如何使用Python无限播放".wav"文件

2024-10-01 15:33:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试无限播放“.wav”文件,以便在我的实验中使用

我使用的是pyaudio网站(http://people.csail.mit.edu/hubert/pyaudio/)的脚本,但是它只能播放5秒钟

我试图使用下面的代码,但它播放了几秒钟

import pyaudio
import wave

while True:
    CHUNK = 20*100

    wf = 
    wave.open('Metano_Ref_Lockin=SR830_mod=0.460V_freq=3936_PP=20_NP=100.wav', 'rb')
    data = wf.readframes(CHUNK)

   p = pyaudio.PyAudio()

   stream = p.open(format=pyaudio.paInt16,
            channels=wf.getnchannels(),
            rate=wf.getframerate(),
            output_device_index=4,
            output=True)


   while data != '':
      stream.write(data)
      data = wf.readframes(CHUNK)

   stream.stop_stream()
   stream.close()
   p.terminate()

另一方面,此代码工作,但信号不均匀(出现一些噪声)

import pyaudio
import wave

CHUNK = 20*100

wf = wave.open('Metano_Ref_Lockin=SR830_mod=0.460V_freq=3936_PP=20_NP=100.wav', 'rb')
data = wf.readframes(CHUNK)

p = pyaudio.PyAudio()

stream = p.open(format=pyaudio.paInt16,
            channels=wf.getnchannels(),
            rate=wf.getframerate(),
            output_device_index=4,
            output=True)

while data != '':
    stream.write(data)

stream.stop_stream()
stream.close()
p.terminate()

我期望一个统一的信号被无限复制。 谢谢


Tags: 代码importtrueoutputdatastreamopenwave
1条回答
网友
1楼 · 发布于 2024-10-01 15:33:04

你的数据比较应该是

while data != b'':
    ...

或者更简单的变体(转换为False的空字符串):

while data:
    ...

此外,您确实应该在循环之间重用wfstreamp

import pyaudio
import wave

CHUNK = 2 ** 11

wf = wave.open('Metano_Ref_Lockin=SR830_mod=0.460V_freq=3936_PP=20_NP=100.wav', 'rb')

p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16,
        channels=wf.getnchannels(),
        rate=wf.getframerate(),
        output=True)


while True:
    wf.rewind()

    data = wf.readframes(CHUNK)
    while data:
        stream.write(data)
        data = wf.readframes(CHUNK)

wf.close()
stream.stop_stream()
stream.close()
p.terminate()

相关问题 更多 >

    热门问题