如何使用从 sounddevice Stream class 返回的 NumPy 数组来执行额外的处理?

How do I use the NumPy array returned from sounddevice Stream class to perform additional processing?

我正在使用 python 库 sounddevice 进行一些音频处理。当我使用 Stream class 将从输入设备 (mic) 收集的输入数据传递到输出时,回调函数有一个代表声音数据的 NumPy 数组:

def callback(indata, outdata, frames, time, status):
    outdata[:] = indata

indata 是一个包含浮点数数组的 NumPy 数组。这些花车代表什么?如何对这些数据执行时间拉伸或音高转换?

首先,一个警告:如果你想要高效可靠的实时音频处理,Python可能不是一个很好的选择(因为它是一种解释型语言,它使用垃圾收集,当然也因为臭名昭著的 GIL)。

如果你想使用 Python,有一些实时音频信号处理库; pyo and LibROSA come to mind, more can be found at the PythonInMusic wiki page.

现在回答你的实际问题:indata中的浮点值(默认float32)是表示声压的幅度值。 如果有帮助,您也可以将其视为电压。

请注意,来自声卡的值被限制在 -1.0+1.0 的范围内。当您将输出信号写入 outdata 时,您必须注意它们也被限制在这个范围内,否则您会听到难看的失真。

indataoutdata 数组是二维的,其中列代表音频通道。每行代表一个时间实例。

您可能还想阅读我的小 page about creating simple audio signals with Python

时间 stretching/pitch 移动的实际算法在这里是题外话,如果您需要帮助,可以在 https://dsp.stackexchange.com/ 上询问。