【VC开源代码栏目提醒】:网学会员为广大网友收集整理了,AudioCode.cpp,希望对大家有所帮助!
#include "stdafx.h"
#include "AudioCode.h"
extern "C" void va_g729a_init_encoder();
extern "C" void va_g729a_encoder(short *speech, unsigned char *bitstream);
extern "C" void va_g729a_init_decoder();
extern "C" void va_g729a_decoder(unsigned char *bitstream, short *synth_short, int bfi);
#define L_FRAME_COMPRESSED 10
#define L_FRAME 80
//包含动态链接库
#pragma comment(lib,"G729a")
//构造函数
CAudioCode::CAudioCode()
{
va_g729a_init_encoder();//初始化编码器
va_g729a_init_decoder();//初始化解码器
}
//析构函数
CAudioCode::~CAudioCode()
{
}
//编码音频数据
BOOL CAudioCode::EncodeAudioData(char *pin,int len,char* pout,int* lenr)
{
//编码成功与否标记
BOOL bRet=FALSE;
//无效输入或输出
if(!pin||len!=SIZE_AUDIO_FRAME||!pout)
goto RET;
//分块进行编码
va_g729a_encoder((short*)pin,(BYTE*)pout);
va_g729a_encoder((short*)(pin+160),(BYTE*)pout+10);
va_g729a_encoder((short*)(pin+320),(BYTE*)pout+20);
va_g729a_encoder((short*)(pin+480),(BYTE*)pout+30);
va_g729a_encoder((short*)(pin+640),(BYTE*)pout+40);
va_g729a_encoder((short*)(pin+800),(BYTE*)pout+50);
//编码长度
if(lenr)
*lenr=SIZE_AUDIO_PACKED;
//编码成功标记
bRet=TRUE;
RET:
//返回
return bRet;
}
//音频解码
BOOL CAudioCode::DecodeAudioData(char *pin,int len,char* pout,int* lenr)
{
//解码成功与否标记
BOOL bRet=FALSE;
//无效输入或输出
if(!pin||len!=SIZE_AUDIO_PACKED||!pout)
goto RET;
//分块解码
va_g729a_decoder((BYTE*)pin,(short*)(pout),0);
va_g729a_decoder((BYTE*)pin+10,(short*)(pout+160),0);
va_g729a_decoder((BYTE*)pin+20,(short*)(pout+320),0);
va_g729a_decoder((BYTE*)pin+30,(short*)(pout+480),0);
va_g729a_decoder((BYTE*)pin+40,(short*)(pout+640),0);
va_g729a_decoder((BYTE*)pin+50,(short*)(pout+800),0);
//解码长度
if(lenr)
*lenr=SIZE_AUDIO_FRAME;
//设置解码成功标记
bRet=TRUE;
RET:
//返回
return bRet;
}
上一篇:
audio.cpp
下一篇:
全程领航顶级赛事,ARCFOX加速品牌向上