阻止模式音频 IO
msgstr“”“PyAudio 示例:播放波形文件。”“
import pyaudio
import wave
import sys
CHUNK = 1024
if len(sys.argv) < 2:
print("Plays a wave file.\n\nUsage: %s filename.wav" % sys.argv[0])
sys.exit(-1)
wf = wave.open(sys.argv[1], 'rb')
# instantiate PyAudio (1)
p = pyaudio.PyAudio()
# open stream (2)
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
channels=wf.getnchannels(),
rate=wf.getframerate(),
output=True)
# read data
data = wf.readframes(CHUNK)
# play stream (3)
while len(data) > 0:
stream.write(data)
data = wf.readframes(CHUNK)
# stop stream (4)
stream.stop_stream()
stream.close()
# close PyAudio (5)
p.terminate()
要使用 PyAudio,首先使用 pyaudio.PyAudio()
(1) 实例化 PyAudio,它设置 portaudio 系统。
要录制或播放音频,请使用 pyaudio.PyAudio.open()
(2) 在所需设备上使用所需音频参数打开流。这会设置一个 pyaudio.Stream 来播放或录制音频。
通过使用音频数据写入到该流播放音频 pyaudio.Stream.write()
,或读取使用从流中的音频数据 pyaudio.Stream.read()
。 (3)
请注意,在阻塞模式下,每个 pyaudio.Stream.write()
或 pyaudio.Stream.read()
都会阻塞,直到播放/录制了所有给定/请求的帧。或者,要动态生成音频数据或立即处理录制的音频数据,请使用回调模式( 请参阅回叫模式下的示例 )
使用 pyaudio.Stream.stop_stream()
暂停播放/录制,使用 pyaudio.Stream.close()
来终止播放。 (4)
最后,使用 pyaudio.PyAudio.terminate()
(5) 终止 portaudio 会话