一部电影有六路声音,电脑或电视却只有两个音箱,怎样把对白、音乐和环境声都播放出来?这就涉及"音频降混"。
一、音频降混是什么意思?
(一)一句话理解
**音频降混(Downmix),就是按照一定规则,把较多声道的声音混合成较少声道的声音。**例如,把5.1声道转换成双声道,或者把双声道转换成单声道。
可以把声道想象成几条独立的"声音路线":有的路线负责左边的声音,有的负责对白,有的负责身后的环境声。降混就是把这些路线重新汇总到更少的输出路线中。

(二)为什么叫"降混"?
"降"表示声道数量减少,"混"表示多个声道的音频参与混合。它不是把声音变小,也不是把播放速度降低。以5.1转双声道为例,原来独立的中置对白通常会分配到左右两路中,让两个音箱都能播放对白。
二、先分清单声道、双声道和5.1声道
(一)常见声道配置
| 配置 | 声道数量 | 直观理解 |
|---|---|---|
| 单声道(Mono) | 1 | 一路声音;可以由一个或多个音箱播放。 |
| 双声道 / 立体声(Stereo) | 2 | 左声道和右声道,可以形成左右空间感。 |
| 5.1声道 | 6 | 左、右、中置、两路环绕,以及一路低频效果声道。 |
| 7.1声道 | 8 | 在常见配置中,比5.1多两路环绕声道。 |
(二)5.1中的".1"是什么?
".1"指低频效果声道(LFE),不是"十分之一条声道"。它在数据中仍然是一条独立声道,只是主要承担低频效果,例如爆炸、震动等声音。
**LFE不等于所有低音。**音乐、对白及其他声道也可能包含低频。把各声道的低频分配给低音炮属于"低音管理",与降混是相关但不同的处理。
三、为什么需要音频降混?
(一)音源声道多,播放设备声道少
电影提供5.1声道,但你使用普通耳机、笔记本扬声器或双声道HDMI输出时,不能直接把六路独立PCM音频都交给只接受两路的设备。常见做法是先解码,再降混成双声道。
(二)只取左右声道,可能会丢失对白
假设电影把大部分对白放在中置声道,而你只保留原来的左、右声道,把其余声道直接丢弃,那么对白可能变得很小,甚至基本听不到。正确降混会把需要保留的中置、环绕等内容按比例加入输出。
**"选择两条声道"和"降混成两条声道"不是同一件事。**前者可能丢弃声音,后者会按混合规则重新分配声音。
四、降混具体是怎么做的?
(一)双声道降混成单声道
一个容易理解的示例是,把左右两路各取一半再相加:
M = 0.5 × L + 0.5 × R
其中L是左声道,R是右声道,M是单声道输出。假设某个采样时刻L为0.6、R为0.2,那么输出为0.4。这是逐个采样点进行的数值运算,不是轮流播放左声道和右声道。
(二)5.1声道降混成双声道
下面用一组简化公式说明原理。L、R表示原左右声道,C表示中置,Ls、Rs表示左右环绕:
左输出 = g × (L + 0.707 × C + 0.707 × Ls)
右输出 = g × (R + 0.707 × C + 0.707 × Rs)
这样,中置对白会出现在左右两边;左环绕加入左边,右环绕加入右边。0.707约对应−3 dB的幅度系数。g表示整体增益,用来预留幅度空间。
**这只是教学示例,不是唯一标准。**实际系数取决于降混类型、实现和音源元数据。这里没有加入LFE;LFE是否加入、加入多少,需要按具体方案决定,不能把所有声道统一直接相加。
(三)为什么需要降低混合增益?
多路声音相加以后,幅度可能超出可表示范围,导致削波失真,听起来像破音。例如,0.8与0.7直接相加会得到1.5,超过以±1为满幅的范围。
因此,需要合理设置各路系数和整体增益,必要时使用限制器。对上面的公式,若每路输入都可能同时达到满幅,取g不大于1 ÷ (1 + 0.707 + 0.707),约为0.414,可以限制该公式的最坏情况幅度;这不代表所有素材都应固定使用这个数值。
五、降混会不会影响音质?
(一)会减少独立的空间信息
5.1降混成双声道之后,原来独立的中置和环绕声道已经融入左右输出,无法再像六个独立音箱那样分别控制各方向的声音。对白和音乐可以保留,但环绕定位会改变。
(二)不等于有损编码
降混改变的是声道组织;MP3、AAC等有损编码改变的是音频数据的压缩表示。两者可以同时发生,也可以单独发生。降混结果完全可以保存为未压缩PCM。
不过,降混通常无法完整逆转:把两条混合后的声道再扩展成六条,并不能还原原来六条独立声音。
(三)还需要注意相位抵消
当两路声音的波形方向相反时,相加可能互相抵消。例如,L为0.5、R为−0.5,按平均方式降混后为0。部分立体声效果在单声道中因此会变弱,需要实际试听检查。
六、降混和其他音频处理有什么区别?
| 处理 | 主要改变什么 | 例子 |
|---|---|---|
| 降混 | 声道数量和内容分配 | 5.1 → 双声道 |
| 重采样 | 每秒采样点的数量 | 44.1 kHz → 48 kHz |
| 位深转换 | 每个采样值的表示精度 | 24 bit → 16 bit |
| 音量调整 | 信号幅度 | 播放音量降低一半 |
| 多音源混音 | 把多个音频流合并 | 话筒声音 + 背景音乐 |
| 升混 | 向更多声道分配内容 | 双声道 → 5.1;不保证恢复原始环绕信息 |
七、在Linux和GStreamer中怎样实现?
(一)先确认音频设备支持什么格式
可以查询ALSA设备参数,例如:
aplay -D hw:0,0 --dump-hw-params \
-t raw -f S16_LE -r 48000 -c 2 -d 1 /dev/zero
如果当前设备返回CHANNELS: 2,表示这条ALSA硬件PCM路径在当前环境下只接受双声道。多声道PCM音源需要转换成它能接受的格式。设备编号可能变化,运行前应先确认aplay -l的结果。
不能仅凭这条结果推断RK3588芯片或HDMI接口永远只支持两声道;具体能力还与驱动、输出路径、连接设备及其能力声明有关。
(二)一个常见的播放管线
gst-launch-1.0 -v \
uridecodebin uri=file:///path/to/movie.mkv name=dec \
dec. ! queue ! audioconvert ! audioresample ! \
'audio/x-raw,format=S16LE,rate=48000,channels=2' ! \
alsasink device=hw:0,0
这是播放文件音轨的示例,视频不在此管线中显示。替换文件路径和设备名,并确保已安装相应的解复用器与音频解码器。
| 部分 | 作用 |
|---|---|
| uridecodebin | 读取文件并尝试解码音轨。 |
| queue | 提供队列缓冲,分隔处理线程。 |
| audioconvert | 处理原始音频格式和声道转换,包括降混。 |
| audioresample | 在需要时转换采样率。 |
| audio/x-raw,... | 要求输出为16位、48 kHz、双声道PCM。 |
| alsasink | 交给指定ALSA播放设备。 |
设置channels=2是提出格式要求,真正执行声道转换的是audioconvert。输入已经符合目标格式时,不一定发生实际降混。
(三)自动降混也需要正确的声道布局
转换器不仅要知道"有六条声道",还要知道哪条是中置、哪条是左环绕等。若声道位置缺失或顺序不正确,自动转换可能无法协商,或者混合结果不符合预期。
需要明确控制分配时,可使用audioconvert的mix-matrix属性。矩阵每一行表示一条输出声道,每一列表示一条输入声道的贡献。先确认实际输入顺序,再配置系数。
在板卡上可先检查插件:
gst-inspect-1.0 audioconvert
gst-inspect-1.0 audioresample
gst-inspect-1.0 alsasink
如果文件无法解码,增加audioconvert不能解决缺少解码器的问题。应先确认音轨格式及相应插件,再处理降混。
八、常见误区与排查思路
(一)HDMI有声音,就代表所有声道都正确了吗?
不一定。建议分别检查中置对白是否清楚、左右位置是否正确、环绕内容是否保留,以及大音量片段是否破音。声道标识测试音比仅凭"听到声音"更容易发现问题。
(二)压缩音频直通,还会在本机降混吗?
若把支持的压缩音频码流直通给电视或功放,通常由接收设备解码并按其播放配置处理。本机PCM降混则需要先解码,再进行声道转换。两条路径不能混为一谈;直通还要求输出链路和接收设备支持对应格式。
(三)降混后的声音太小或对白不清楚怎么办?
先确认输入声道布局和降混规则,再检查增益。整体偏小可能来自预留幅度空间;对白明显缺失则应重点检查中置声道是否参与混合。提高音量之前,先确认没有削波,也没有声道被错误丢弃。
九、总结
**音频降混,就是把多条声音路线按规则合并成更少的路线。**它的目标是在适配播放设备的同时,尽量合理保留对白、音乐和环境声。5.1转双声道不应该简单地只取原左右声道,而应考虑中置、环绕、增益和声道布局。
对只接受双声道PCM的输出路径,常见流程是:读取音源 → 解码成PCM → 声道降混及格式转换 → 输出给音频设备。
参考资料
- GStreamer官方文档:audioconvert(格式转换、声道转换及mix-matrix)
- GStreamer官方文档:audiomixer(多音频流混音)