python-sounddevice - 从麦克风播放音频

时间:2018-02-09 07:57:56

标签: python audio microphone python-sounddevice

我可以从麦克风上播放音频,但它非常低沉,老实说听起来程序会崩溃。

我尝试使用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()

我有一种感觉我需要将它添加到队列中并从队列中播放它?

1 个答案:

答案 0 :(得分:0)

高级便利函数sd.play()sd.rec()sd.playrec()只是播放和/或记录任意(但固定)长度的整个NumPy数组(只要它们适合内存) )。 它们应该简单方便,但它们的用例非常有限。

如果您需要更多控制(例如连续录制,实时处理......),您可以使用较低级别的"流"类别(例如sd.Streamsd.InputStreamsd.RawInputStream)或者使用"非阻止"回调接口或使用"阻止" read()write()方法。

内部的高级功能已经使用" stream"课程,因此你不应该混合他们! 如果在流的回调函数中使用sd.play(),它会在回调函数中创建另一个流。这肯定会失败!

长话短说,您应该使用 高级别低级别界面,但不能同时使用

如果您想立即播放麦克风输入,您应该使用sd.Stream(包括输入和输出)和回调功能,就像它显示in the documentation一样示例应用程序wire.py