我可以从麦克风上播放音频,但它非常低沉,老实说听起来程序会崩溃。
我尝试使用InputStream但是当我播放它时声音很可怕,任何想法我做错了什么?
10是我的麦克风,而13是我的输出设备(扬声器)
import sounddevice as sd
device_info = sd.query_devices(10, 'input')
samplerate = int(device_info['default_samplerate'])
sd.default.samplerate = samplerate
sd.default.channels = 2
devices = sd.query_devices()
print(devices)
def callback(indata, frames, time, status):
#print(indata)
sd.play(indata, device=13, blocking=True)
with sd.InputStream(device = 10, samplerate=44100, dtype='float32', callback=callback):
print('#' * 80)
print('press Return to quit')
print('#' * 80)
input()
我有一种感觉我需要将它添加到队列中并从队列中播放它?
答案 0 :(得分:0)
高级便利函数sd.play()
,sd.rec()
和sd.playrec()
只是播放和/或记录任意(但固定)长度的整个NumPy数组(只要它们适合内存) )。
它们应该简单方便,但它们的用例非常有限。
如果您需要更多控制(例如连续录制,实时处理......),您可以使用较低级别的"流"类别(例如sd.Stream
,sd.InputStream
,sd.RawInputStream
)或者使用"非阻止"回调接口或使用"阻止" read()
和write()
方法。
内部的高级功能已经使用" stream"课程,因此你不应该混合他们!
如果在流的回调函数中使用sd.play()
,它会在回调函数中创建另一个流。这肯定会失败!
长话短说,您应该使用 或高级别或低级别界面,但不能同时使用。
如果您想立即播放麦克风输入,您应该使用sd.Stream
(包括输入和输出)和回调功能,就像它显示in the documentation一样示例应用程序wire.py。