在 C 中将立体声 wav 转换为单声道

Posted

技术标签:

【中文标题】在 C 中将立体声 wav 转换为单声道【英文标题】:Convert a stereo wav to mono in C 【发布时间】:2020-05-12 11:48:19 【问题描述】:

我使用 C 语言为专有的实时操作系统 (RTOS) 开发了同步音频接口 (SAI) 驱动程序。我的驱动器配置为向放大器输出左右声道数据 (I2S)。但是,由于连接的放大器是单声道的,它只向扬声器输出左声道或右声道音频数据。现在,我有一个立体声 PCM 16 位音频数据文件,我想以某种方式在我的应用程序中混合左声道和右声道音频数据,并将其发送到 SAI 驱动程序中的左声道或右声道。这样,我将能够在连接到单声道放大器的扬声器上将组合的立体声音频数据作为单声道播放。

谁能建议我最好的解决方案是什么?

【问题讨论】:

我正在尝试我使用 C 作为我的开发语言。展示你的尝试。 @ryyker 抱歉,我应该更清楚我想问的问题。我已经更新了我的问题。我没有我正在寻找的答案的实际实现。我正在寻找“如何”实现上述场景。 ¿平均左右? right/2 + left/2 防止 (right + left)/2 中可能的溢出 不需要在同一个段落中解释你的问题 3 或 4 次。此外,不清楚您是否输入了一个文件或两个信号(即立体声信号) @pmg 感谢您的回答。对左右声道数据进行平均是否会对作为输出播放的声音质量产生任何影响? 【参考方案1】:

正如评论中所说,在单声道中混合两个立体声通道的常用方法是将每个通道的样本除以 2 并将它们相加。

C 中的示例:

int left_channel_sample, right_channel_sample;
int mono_channel = (left_channel_sample / 2) + ( right_channel_sample / 2);

您提到了一些您编写的驱动程序,对其进行了修改或添加了一些新功能。鉴于您的问题一团糟,真的无法提供更多帮助...

【讨论】:

以上是关于在 C 中将立体声 wav 转换为单声道的主要内容,如果未能解决你的问题,请参考以下文章

在Javascript中将立体声音频转换为单声道

在Javascript中将立体声音频转换为单声道

将wav文件转换为单声道

Python将立体声.flac转换为单声道

我是不是需要将立体声音频转换为单声道以进行 FFT?

解交织 PCM (*.wav) 立体声音频数据