我是PyAudio和音频操作的新手,所以这是一个我无法找到答案的基本问题 - PyAudio为您提供了通过频道地图向不同频道发送声音的选项,但是你如何将这些不同的频道连接到你的计算机/ python上?
是否像配对蓝牙音箱那样简单,因此将我的电脑的内置扬声器作为一个通道,将蓝牙扬声器作为第二个?
(最终我想同时播放2个.wav文件,但是分别在2个不同的输出上播放。如果有比PyAudio更容易的方式,请听听这个!)
感谢您的帮助! :)
答案 0 :(得分:1)
我相信使用sounddevice可能会有这种感觉。请参阅链接以获取安装详细信息。
sounddevice
提供了一种使用sd.query_devices()
列出不同输入/输出音频设备的简便方法
>>> print sd.query_devices()
0 Microsoft Sound Mapper - Input, MME (2 in, 0 out)
> 1 Jack Mic (IDT High Definition A, MME (2 in, 0 out)
2 Microphone Array (IDT High Defi, MME (2 in, 0 out)
3 Microsoft Sound Mapper - Output, MME (0 in, 2 out)
< 4 Speakers / Headphones (IDT High, MME (0 in, 2 out)
5 Communication Headphones (IDT H, MME (0 in, 2 out)
这里设备id(4)是输出设备(扬声器)。我没有配置bluetooth
。但如果你有,它应该显示在列表中。
列出两个输出设备后,您只需使用重定向它们即可
sd.play(data_array, sampling_frequency, device=device_id_)
虽然sounddevice
在播放过程中有阻止IO的限制,但我相信可以通过使用线程来克服它。
注意:以下代码未在两个不同的设备上进行测试。如果有效,请告诉我。
import sounddevice as sd
import soundfile as sf
import threading
from threading import Thread
def audioFunc1():
audio1 = "audio1.wav"
data1, fs1 = sf.read(audio1, dtype='float32')
sd.play(data1, fs1, device=3) #speakers
def audioFunc2():
audio2 = "audio2.wav"
data2, fs2 = sf.read(audio2, dtype='float32')
sd.play(data2, fs2, device=10) #headset
if __name__ == '__main__':
Thread(target = audioFunc1).start()
Thread(target = audioFunc2).start()