阻止模式音频 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 会话