C++音频单声道、双声道之间的转换

  • 本篇文件介绍 音频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(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];
    }
}

你可能感兴趣的:(c++,c++,音频,音频格式转换,单声道,双声道)