首页 > 解决方案 > sounddevice 录制“out”参数

问题描述

我想使用“out”参数将记录的信号写入给定的 numpy 数组,但我没有将任何音频附加到我传递的数组中。如果我希望它使用默认采样率,是否应该定义采样率?文档中没有具体的示例用法,所以如果有任何关于正确使用的建议,请参见下面的示例:

import sounddevice as sd
import numpy as np
import time

input_chs = [1,2]
rec_array = np.zeros([1, len(input_chs)])
sd.rec(out=rec_array, mapping=input_chs)
time.sleep(1)
sd.stop()
print(rec_array)  # Returns original rec_array

我也试过

rec_array = sd.rec(out=rec_array, mapping=input_chs)

但结果是一样的。

标签: pythonpython-sounddevice

解决方案


录制的音频数据不会附加out数组中。数组中填充了记录的out数据,直到其大小,然后记录停止(假设您使用sd.wait()or blocking=True)。

您正在传递一个out只有一行的数组,这意味着只会记录一帧。您应该为数组使用int(desired_duration_in_seconds * samplerate)行。out

换句话说,您必须事先知道录音应该持续多长时间。然后您可以使用sd.wait()完成录制。

如果您想在事先不知道持续时间的情况下进行录音,您应该查看示例https://github.com/spatialaudio/python-sounddevice/blob/master/examples/rec_unlimited.py

如果我希望它使用默认采样率,是否应该定义采样率?

如果要使用默认值,则不必显式指定它。


推荐阅读