python - 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)
但结果是一样的。
解决方案
录制的音频数据不会附加到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。
如果我希望它使用默认采样率,是否应该定义采样率?
如果要使用默认值,则不必显式指定它。
推荐阅读
- python - 尽管我安装了模块,但在 VS 代码中未发现错误
- python - 如何从 docx 中创建的表中删除空白列?
- python - 两个区间差的算法是什么?
- swift - 在 SwiftUI 中制作相同宽度和高度的按钮网格
- fortran - 值未使用公共块传递给子程序
- python - 如何创建一个 Python 类,它是另一个类的子类,但 issubclass 和/或 isinstance 测试失败?
- jquery - 将 readOnly 更改为 true 会使 MS Chromium Edge 中的站点崩溃
- javascript - 如何修复导致空对象的循环依赖
- cadence-workflow - 设置第二个值时 MutableSideEffect() 出现恐慌
- string - 在 DrRacket 中,我如何更改使用 if 语句的程序以使用条件语句