从 MPG123 输出中提取左声道 PCM 数据

Posted

技术标签:

【中文标题】从 MPG123 输出中提取左声道 PCM 数据【英文标题】:Extract left channel PCM data from MPG123 output 【发布时间】:2014-01-11 20:06:17 【问题描述】:

我正在使用 MPG123 库将 MP3 解码为 PCM 数据。我想对 PCM 数据应用 FFT,特别是左声道。 mpg123_read 函数使用 PCM 数据填充 char 数组。如何从这个 char 数组中提取左声道的 PCM 数据?

【问题讨论】:

【参考方案1】:

假设音频是立体声的,一旦你有原始 PCM 的前两个字节对应于左声道音频,两个对应于右声道音频,所以你可以将它们视为短裤然后第一个短代表左声道和第二个右声道。因此,如果您想获取左声道数据,您必须使用输入的原始 PCM 循环并保存每一个短信号。像这样:

void demux(short in[], short left[], short right[], int len) 
    for (int i=0; i<len/2; i+2) 
       left[i] = in[i];
       right[i+1] = in[i+1];
    

其中 in 是原始输入指针,left 是左缓冲区指针,right 是右缓冲区指针,len 是输入流的长度(以字节为单位)。

【讨论】:

我也发现这篇文章很有帮助:blog.bjornroche.com/2013/05/…

以上是关于从 MPG123 输出中提取左声道 PCM 数据的主要内容,如果未能解决你的问题,请参考以下文章

在 iPhone 上从线性 PCM 中提取幅度数据

视音频数据处理入门:PCM音频采样数据处理

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

Android音视频系列(七):PCM音频单声道与双声道的相互转换

如何创建一个没有舍入误差的简单 iir 低通滤波器? (16 位 pcm 数据)

AudioUnit - 在 Swift 中控制左声道和右声道输出