我已经扩展了“libtinyalsa”(ALSA的一个非常小的版本),并提供了一种重新采样的方法。传出的PCM音频(具有libresample,例如从48 kHz到44.1 kHz)。
现在我想用“downMixing”(这是正确的词?)方法扩展它。
我有5.1声道PCM,只需要2声道立体声音频(左右):
我对C和PCM一无所知 - 简单的答案非常受欢迎。
亲切的问候&提前谢谢!
答案 0 :(得分:3)
我相信将5.1 PCM流缩混到立体声可以这样做:
L = clamp((FL + RL + C*0.708 + LFE*0.708) / 2)
R = clamp((FR + RR + C*0.708 + LFE*0.708) / 2)
您可以参考,例如以downmix effect in Android为例。
或者只选择您要保留的两个频道(例如FL和FR)并跳过其他频道的样本。
答案 1 :(得分:1)
5.1 PCM可能已经被编码,有效地混合到2个通道。如果是这种情况,您应该可以忽略5.1通道并将其视为两个通道。如果是这种情况,但你需要摆脱5.1 PCM的所有痕迹,而不是让它在2声道输出上正确播放,你需要先使用5.1声道解码器库。
如果你真的有一个真正的5.1声道编码输出,那么你会得到它:
for(i = 0; i < buffer_end; i += 6) {
front_left = buffer[i + 0];
front_right = buffer[i + 1];
center = buffer[i + 2];
lfe = buffer[i + 3]; // (sub-woofer)
back_left = buffer[i + 4];
back_right = buffer[i + 5];
}
混合将是:
left = (front_left + back_left)/2 + (lfe + front_center)/4;
right = (front_right + back_right)/2 + (lfe + front_center)/4;
将以相同的方式交错,即
output_buffer[i] = left;
output_buffer[i + 1] = right;
请注意,根据您所需的结果和约束条件,有不同的混音方式。但这是一整套蠕虫。
你也应该问问自己,你是否真的在使用正确的工具。存在所有这些事情的图书馆,ALSA本身已经能够进行相当复杂的混合。请参阅此处了解其他解决方案:http://www.halfgaar.net/surround-sound-in-linux