我正在寻找一种方法来平移我拥有的 PCM 音频。目前音频是立体声格式,我想将它平移到所需的一侧(或更多/更少到一侧)。
我最近想出了如何在这里进行混合,所以我想它会是类似的(相互添加东西等等)。我的想法是将音频数据从一侧添加到另一侧。
例如,如果我要向左平移,我会从右通道获取数据并将其添加到左通道。然后我会将正确的通道设置为一个恒定值,这样它就会静音。
我的想法是正确的还是我错过了一些明显的东西?
提前致谢!
我正在寻找一种方法来平移我拥有的 PCM 音频。目前音频是立体声格式,我想将它平移到所需的一侧(或更多/更少到一侧)。
我最近想出了如何在这里进行混合,所以我想它会是类似的(相互添加东西等等)。我的想法是将音频数据从一侧添加到另一侧。
例如,如果我要向左平移,我会从右通道获取数据并将其添加到左通道。然后我会将正确的通道设置为一个恒定值,这样它就会静音。
我的想法是正确的还是我错过了一些明显的东西?
提前致谢!
将单声道源置于立体声中的基本技术称为恒功率声像。
如果您想以角度放置单声道源,您可以使用和作为通道的振幅:
通常的范围从到以为中心。
希望,这有帮助。
参考:道路,柯蒂斯 (1996)。电脑音乐教程。剑桥:麻省理工学院出版社,第 457-461 页。
此外:
您可以直接将其放入代码中。例如,如果您使用 Python 并且在 numpy 数组中有单声道音频,您可以按给定角度将其转换为立体声,如下所示:
def panner(x, angle):
"""
pan a mono audio source into stereo
x is a numpy array, angle is the angle in radiants
"""
left = np.sqrt(2)/2.0 * (np.cos(angle) - np.sin(angle)) * x
right = np.sqrt(2)/2.0 * (np.cos(angle) + np.sin(angle)) * x
return np.dstack((left,right))[0]
你可以像使用它一样panner(np.array([1,2,3]), np.radians(20))
。(当然[1,2,3]
是一个毫无意义的音频缓冲区。)
我只是想指出,如果您打算在代码中使用这些公式,您可以通过使用 0 到 90 度之间的角度 $\theta$ 并简单地计算 $A_{amp } = \sin(\theta)$ 和 $B_{amp} = \cos(\theta)$。 between 0 and 90 degrees and simply calculating and .
您之前可能遇到过这些(在我搜索等功率或恒定功率平移时,它们似乎更常被引用),并认为上面的公式会给您一个不同的曲线。它们确实看起来不同,但曲线是相同的。
对于立体声文件,如果声相不居中,您只需要保持一个通道相同,同时线性衰减另一侧。