2

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

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

我觉得我需要将它添加到队列中并从队列中播放?

4

1 回答 1

3

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

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

内部的高级函数已经使用了“流”类,因此你不应该混合它们!如果sd.play()在流的回调函数中使用,它会在回调函数中创建另一个流。这注定要失败!

长话短说,您应该使用高级低级接口,但不能同时使用两者。

如果您想立即播放麦克风输入,您应该使用sd.Stream带有回调函数的(包括输入和输出),正如文档和示例应用程序wire.py中所示。

于 2018-02-10T09:10:25.490 回答