使用 sox 从两个单声道文件创建立体声文件

使用 sox 从两个单声道文件创建立体声文件

我在 Centos 6.0 上使用 sox 14.2.0。

我有两个单核细胞增多症wav 文件left.wavright.wav。我需要将它们合并为一个stereo.ogg文件,其中left.wav80% 平移到左侧,right.wav80% 平移到右侧。

我无法想出所需的 sox 选项。我该怎么做?

这将针对许多文件重复执行,因此我更喜欢高效的解决方案。据我所知,应该有一种方法可以一次性完成(一次调用 sox)。

答案1

不知何故,以上所有操作都会给我带来错误。以下方法对我有用(Ubuntu 14.04 上的 SOX):

sox -M -c 1 lef.wav -c 1 right.wav output.mp3 

答案2

具体操作如下:

sox 左.wav 右.wav --通道 2 --合并立体声.ogg 混音器 0.8,0.2,0.2,0.8

答案3

haimgs 命令并不完全正确。通常,您可以通过降低一个声道的音量来实现平移。这意味着:如果您希望信号保持 80% 的音量,则左声道将保持原始音量,而右声道仅获得原始音量的 20%。至少这就是 sox 的平移代码所做的(Alan Blumlein 在发明立体声时似乎提出了这一点)。

此外,还可以使用 remix 选项来缩短他的命令。

因此,更正并缩短的命令是:

sox left.wav right.wav stereo.ogg remix 1,2v0.2 1v0.2,2

编辑以回答 haimgs 的评论:

如果发生削波,sox 会警告您。但是,是的,这是可能的。使用 remix 选项,每个通道的音量都按因子 1/n 缩放,其中 n 是输入通道的数量。但这仅在输出通道未指定 VULME OPTION 时才使用(因此您的 100% + 20% 是正确的)。

sox 还有一个选项,可以在没有明确音量信息的情况下缩放任何通道,只需在“remix”后添加一个“-a”(例如“remix -a 1,2v0.2 1v0.2,2”),音量就会变成 50% +20% = 70%。这相当令人困惑,现在我不确定你是否还必须将声像通道音量缩放 1/n,这将导致“remix -a 1,2v0.1 1v0.1,2”,或 50% + 10% = 60%。我将不得不进一步研究这个方向。同时,你可以阅读 sox 手册页中的 remix 部分(也可以在sox主页)。

经过进一步思考后进行编辑:

经过考虑之后,我很确定您也必须将平移音量缩放 1/n。

关于剪辑问题:通过划分全部音量乘以声道数,则不会发生此问题。但是不保留信号的原始功率,因为​​信号的功率是对数的,而不是线性的。混合的通道越多,信号就越安静。这就是为什么 sox 也为此提供了选项,其中音量按 1/sqrt(n) 缩放。要使用此功能,只需在 remix 部分使用“p”而不是“v”并相应地调整值,并在 remix 语句后添加“-p”选项。您可以看到按 1/n 和按 1/sqrt(n) 缩放的区别这里

以下是我认为计算正确功率值的方法:对于每个通道,您必须求解 20*log_10(因子)。因子 2 将导致 ~6(dB),因子 0.5 将导致 ~-6(dB)。这正是 sox 手册所说的,所以我想这是正确的。

因此,最终您使用的命令应该是:

sox left.wav right.wav stereo.ogg remix -p -a 1,2p-6 1p-6,2

这台机器上没有 sox,所以我无法测试此命令的语法是否正确,如果有问题请告诉我。我会一有机会就测试所有这些理论,因为我会遇到类似的问题,但我必须混合比 2 个更多的通道,这就是我想出信号功率的原因。

答案4

使用 sox 的 pan 选项将一个文件平移到最右边,将另一个文件平移到最左边(分别为 1 和 -1)。然后使用 soxmix 将两者混合在一起。

相关内容