本文介绍了将PCM16LE双声道数据中左声道和右声道的数据分离成两个文件,PCM音频数据可以使用音频编辑软件导入查看,推荐免费开源的音频编辑软件Audacity。本文参考文献链接:https://blog.youkuaiyun.com/leixiaohua1020/article/details/50534316
PCM16LE简介
PCM16LE双声道数据中左声道和右声道的采样值是间隔存储的。本文中声音样值的采样频率一律是44100Hz,采样格式一律为16LE。“16”代表采样位数是16bit。由于1Byte=8bit,所以一个声道的一个采样值占用2Byte。“LE”代表Little Endian,代表2 Byte采样值的存储方式为高位存在高地址中。
下图为输入的双声道PCM数据的波形图。上面的波形图是左声道的图形,下面的波形图是右声道的波形。

函数代码
函数的代码如下所示:
int CTransPic::simplest_pcm16le_split(char* url){
ifstream infp;
infp.open(url, ios::in | ios::binary);
ofstream outlefp, outrifp;
outlefp.open("outlefp.pcm", ios::out | ios::binary);
outrifp.open("outrifp.pcm", ios::out | ios::binary);
unsigned char* pcmbuf = (unsigned char*)malloc(4);
while (!infp.eof())
{
infp.read((char*)pcmbuf, 4);
outlefp.write((const char*)pcmbuf, 2);
outrifp.write((const char*)pcmbuf + 2, 2);
}
free(pcmbuf);
infp.close();
outlefp.close();
outrifp.close();
return 0;
}
测试用例
左声道的音频波形图如下:

右声道的音频波形图如下:

注:本文参考文献链接https://blog.youkuaiyun.com/leixiaohua1020/article/details/50534316

本文介绍了一种将PCM16LE格式的双声道音频数据分离成左声道和右声道的方法。通过一个简单的C++函数实现,该函数读取原始音频文件,然后将左声道和右声道的数据分别写入到两个不同的文件中。文中提供了函数代码及测试用例,展示了分离后的音频波形图。
2336

被折叠的 条评论
为什么被折叠?



