- 本篇文件介绍 音频PCM数据的单声道、双声道之间的转换
下面介绍函数参数:
一、StereoToMono函数。
双声道转单声道
参数1:资源buffer(双声道数据)
参数2:资源buffer大小(双声道数据大小)
参数3:转换后buffer(单声道数据)
static short g_sSrcAudioBuf[640];
static short g_sDstAudioBuf[640];
//pdata:char * pdata(原始双声道音频数据)
//dlen:pdata数据长度
//单字节1280长度的数据pdata 转换为640双字节数据g_sSrcAudioBuf
memcpy(g_sSrcAudioBuf,pdata,dlen);
StereoToMono(g_sSrcAudioBuf,640,g_sDstAudioBuf)
//本地保存测试
fwrite(g_sSrcAudioBuf,2,320,fp);
void StereoToMono(const int16_t* src_audio,int samples_per_channel,int16_t* dst_audio)
{
for (int i = 0; i < samples_per_channel; i++)
{
dst_audio[i] = (static_cast<int32_t>(src_audio[2 * i]) + src_audio[2 * i + 1]) >> 1;
}
}
二、MonoToStereo函数。
单声道转双声道
参数1:资源buffer(单声道数据)
参数2:资源buffer大小(单声道数据大小)
参数3:转换后buffer(双声道数据)
代码:
static short g_sSrcAudioBuf[640];
static short g_sDstAudioBuf[640];
//g_sDstAudioBuf:单声道数据
//320:单声道数据大小
//g_sSrcAudioBuf:转换后buffer(双声道数据)
MonoToStereo(g_sDstAudioBuf,320,g_sSrcAudioBuf);
//本地保存测试
fwrite(g_sSrcAudioBuf,2,640,fp);
void MonoToStereo(const int16_t* src_audio,int samples_per_channel,int16_t* dst_audio)
{
for (int i = 0; i < samples_per_channel; i++)
{
dst_audio[2 * i] = src_audio[i];
dst_audio[2 * i + 1] = src_audio[i];
}
}