PyAudio混音多声道

2024-04-28 11:35:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试混合从6个单声道音频输入通道(和一些wav文件)到两个音频输出通道的音频。在

我浏览了一下PyAudio documentation并想出了如何访问我想要的声卡并获得音频。我注意到了通道图示例,但我对使用它有点困惑。在

我还发现了this answer,这个技术也可以工作,但是对于6+个频道,这不是有点慢吗?在

使用pyaudio混合多个声道的推荐或最有效的方法是什么?在


Tags: 文件方法answer示例documentation音频this频道
1条回答
网友
1楼 · 发布于 2024-04-28 11:35:43

The answer you linked to使用NumPy来混合两个流,方法是平均每个流中的帧。在

你担心这可能太慢了。我对此表示怀疑,因为NumPy只是在C中的C数组上循环,就像专用软件混音器一样(无论是在您的声音服务器、声卡驱动程序中,还是在某些操作系统级混音器中)。但与其猜测,不如让我们来看看。在

首先,假设我们处理的是20ms帧,并且我们的回调将针对每一帧调用,因为这是最坏的情况。我们假设我们有44.1KHz的16位立体声流,每个都是1764个样本。所以,让我们用我能想到的最低效的方法来写,然后测试一下:

In [4]: frame = np.zeros(1764, dtype=np.int16)
In [5]: %timeit np.mean([frame]*6, axis=0, dtype=np.int16)
1000 loops, best of 3: 1.01 ms per loop

要达到20毫秒,我必须混合387个流。6不成问题。在

如果这是一个问题,你需要做一些更棘手的事情,例如,预缓冲混合,这样你就有比单个帧大得多的块(在C中循环更多,在Python中更少),或者甚至访问一个硬件混频器,这可能是通过PyAudio做不到的。在

相关问题 更多 >