海思库解码CCITT标准g726算法编码G726音频数据
来源:互联网 发布:有趣的书 知乎 编辑:程序博客网 时间:2024/06/09 14:20
海思库解码CCITT标准g726算法编码G726音频数据,海思库解码需要使用MEDIA_G726_XXX格式解码音频数据。MEDIA_G726_XXX格式包括以下几种:
#define MEDIA_G726_16KBPS 0x24 /* G726 16kbps forASF ... */
#define MEDIA_G726_24KBPS 0x25 /* G726 24kbps forASF ... */
#define MEDIA_G726_32KBPS 0x26 /* G726 32kbps forASF ... */
#define MEDIA_G726_40KBPS 0x27 /* G726 40kbps forASF ... */
//编码:使用CCITT标准g726算法将pcm编码成g726,再增加海思4字节头,将g726变成海思g726
g726_state_t*pSate726 = (g726_state_t*)malloc(sizeof(g726_state_t));
pSate726= g726_init(pSate726,16*1000);//16kps
CStringfilePath ="";
CStringnewlFilePath ="";
charszFilter[] = {"PcmFiles (*.pcm)|*.pcm||"};
CFileDialogdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter,NULL);
if(dlg.DoModal() ==IDOK)
{
filePath= dlg.GetPathName();
newlFilePath= filePath;
newlFilePath.Replace(".pcm","_ff.g726_hisiWithFFMpeg");
FILE* fpSrc = fopen(filePath.GetBuffer(filePath.GetLength()),"rb");
FILE* fpDst = fopen(newlFilePath.GetBuffer(newlFilePath.GetLength()),"wb+");
charszData[320] = {0};
unsignedcharszOutData[200]= {0};
int nDataLen =320;
int nOutDataLen= 200;
int nReadedSize= 0;
unsignedshortusHisiHeader[2]= {0};
usHisiHeader[0]= 0x0100;
int ret = 0;
if(fpSrc !=NULL)
{
while(TRUE)
{
nReadedSize = fread(szData,sizeof(char),nDataLen,fpSrc);
if(nReadedSize<nDataLen)
{
break;
}
int iRet = g726_encode(pSate726,szOutData, (short*)szData,nReadedSize/2);
nOutDataLen = iRet;
if (nOutDataLen> 0)
{
usHisiHeader[1] = (usHisiHeader[1]& 0xff00) +nOutDataLen/sizeof(unsignedshort);
//写入hisi头
fwrite(usHisiHeader,sizeof(unsignedshort),2,fpDst);
//写入数据
int iiiii = fwrite(szOutData,1,nOutDataLen, fpDst);
}
}
fclose(fpSrc);
fclose(fpDst);
}
}
if(pSate726 !=NULL)
{
free(pSate726);
pSate726= NULL;
}
//解码
//hisig726 to pcm
CStringfilePath ="";
CStringnewlFilePath ="";
charszFilter[] = {"g726Files (*.g726_hisiWithFFMpeg)|*.g726_hisiWithFFMpeg||"};
CFileDialogdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter,NULL);
if(dlg.DoModal()==IDOK)
{
filePath= dlg.GetPathName();
newlFilePath= filePath;
newlFilePath.Replace(".g726_hisiWithFFMpeg","_ff2hisi.pcm");
BOOLbRet = 0;
CG726ADecoderg726Decoder;
g726Decoder.DecoderInit(MEDIA_G726_16KBPS);
FILE * fpSrc= fopen(filePath.GetBuffer(filePath.GetLength()),"rb");
FILE* fpDst = fopen(newlFilePath.GetBuffer(newlFilePath.GetLength()),"wb+");
char szData[104] = {0};
char szOutData[320]= {0};
int nDataLen = 104;
int nOutDataLen = 320;
int nReadedSize= 0;
unsignedshortusHisiHeader[2]= {0};
if(fpSrc !=NULL)
{
while(TRUE)
{
//读取头标记
nDataLen = Hisi_AUDIO_HERDER_LEN;
nReadedSize = fread(szData,sizeof(char),nDataLen,fpSrc);
if(nReadedSize<nDataLen)
{
break;
}
memcpy(usHisiHeader,szData,Hisi_AUDIO_HERDER_LEN);
int nAudioFrameDataLen= (usHisiHeader[1] & 0x00ff) *sizeof(unsigned short);
nDataLen = nAudioFrameDataLen;
//读取音频帧数据
nReadedSize = fread(szData+Hisi_AUDIO_HERDER_LEN,sizeof(char),nDataLen,fpSrc);
if(nReadedSize<nDataLen)
{
break;
}
bRet = g726Decoder.AFrameDecoder(szData,nReadedSize+Hisi_AUDIO_HERDER_LEN,szOutData,&nOutDataLen);
if(bRet)
{
fwrite(szOutData,sizeof(char),nOutDataLen,fpDst);
}
}
fclose(fpSrc);
fclose(fpDst);
}
}
代码下载
- 海思库解码CCITT标准g726算法编码G726音频数据
- CCITT标准G726编解码实例
- ffmpeg库解码海思G726库编码音频数据
- G726标准库与海思G726库数据转换
- g726
- Android G726语音编解码库+除燥音算法
- g726算法的一些总结
- g721解码使用ffmpeg和g726一样
- ffmpeg库G726编解码实例
- Hi3511的G726音频如何解?
- EasyDarwin开源音频解码项目EasyAudioDecoder:基于ffmpeg的安卓音频(AAC、G726)解码库(第一部分,ffmpeg-android的编译)
- Android G711(PCMA/PCMU)、G726、PCM音频转码到AAC
- EasyPlayer实现Android MediaMuxer录像MP4(支持G711/AAC/G726音频)
- ffmpeg中G726解码器用法 编码器用法
- ffmpeg中G726解码器用法 编码器用法
- 音频编解码标准
- 音频编解码标准
- 音频编解码标准
- POJ 3111
- LeetCode刷题(30)
- android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen"相关问题
- 在ROS下,创建range_layer,加入超声波传感器。
- laravel 发送邮件
- 海思库解码CCITT标准g726算法编码G726音频数据
- Idea 快捷键修改
- [BFS] HDU 1241
- JAVA---基础面试题总结(1)
- solr的group和facet
- hibernate学习笔记(一)
- Solr配置业务字段
- oracle共享服务模式以及配置
- java基础---抽象类