⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 audiocode.cpp

📁 音频通信的一个例子
💻 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;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -