我正在使用带有 WASAPI 支持的 pyaudio 的这些预编译二进制文件。我想通过 WASAPI 播放一个 wav 文件。我找到了这个 api 的默认输出设备的索引:
import pyaudio
p = pyaudio.PyAudio()
print p.get_host_api_info_by_index(3)
>>{'index': 3, 'name': u'Windows WASAPI', 'defaultOutputDevice': 11L, 'type': 13L, 'deviceCount': 3L, 'defaultInputDevice': 12L, 'structVersion': 1L}
然后我通过这个设备播放一个 wav 文件:
import pyaudio
import wave
CHUNK = 1024
wf = wave.open('test.wav', '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_device_index=11,
output=True)
# read data
data = wf.readframes(CHUNK)
# play stream (3)
while data != '':
stream.write(data)
data = wf.readframes(CHUNK)
# stop stream (4)
stream.stop_stream()
stream.close()
# close PyAudio (5)
p.terminate()
播放文件时,我仍然能够听到系统中的其他声音,但在独占 WASAPI 模式下,必须阻止所有其他声音。那么如何在pyaudio中开启WASAPI独占模式呢?