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