热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

求助:linuxg729音频压缩,杂音很大

求助:linuxg729音频压缩,杂音很大--Linux通用技术-Linux技术与应用信息,下面是详情阅读。
坛里的各位高手,求助一个问题:

我在itu网站上下载了g729的标准算法,将pcm语音压缩后通过udp发送出去,在encode端,我dump出压缩后的语音文件,用工具解码之后,发现编码之后

的语音质量很差,都是杂音,在此求助。

我的处理过程是:
将pcm分两次编码,一次80bit
assert(readLen/4 == 80);
g729_encode_oneframe( (short *)buff, readLen/4, sendbuf+hdrlen, &g729_one_frame_size);
assert(g729_one_frame_size == G729_ONE_FRAME_SIZE);//G729_ONE_FRAME_SIZE=10
g729_encode_oneframe( ((short *)buff)+readLen/4, readLen/4, sendbuf+hdrlen+g729_one_frame_size, &g729_one_frame_size);
assert(g729_one_frame_size == G729_ONE_FRAME_SIZE);

PS:g729_encode_oneframe函数如下:
int g729_encode_oneframe(Word16 * pcm_src, Word16 src_len, unsigned char* dst, Word16 * dst_len_ptr)
{
extern Word16 *new_speech; /* Pointer to new speech data */

Word16 prm[PRM_SIZE+1]; /* Analysis parameters. */
Word16 serial[SERIAL_SIZE]; /* Output bitstream buffer */
Word16 syn[L_FRAME]; /* Buffer for synthesis speech */

Word16 i; /* frame counter */

/* For G.729B */
Word16 nb_words;

if (L_FRAME != src_len)
{
LOGD("pcm src is wrong len is not 80");
return 1;
}

LOGD("g729 encdoe one frame %d len",src_len);

for(i=0; i = (Word16)0;

/* Loop for each "L_FRAME" speech data. */

memcpy(new_speech, pcm_src, sizeof(Word16) * src_len ); /* 可能会存在网络序问题 */

if (count_frame == 32767)
{
count_frame = 256;
}
else
{
count_frame++;
}

Pre_Process(new_speech, L_FRAME);

//Coder_ld8k(prm, syn, count_frame, use_vad);
Coder_ld8k(prm, syn);

prm2bits_ld8k( prm, serial);

if(use_annex_b)
{
nb_words = add((Word16)serial[1], 2);
}
else
{
nb_words = serial[1];
}
return 0;
}


在线,求指导,qq:178021614
推荐阅读
author-avatar
小鱼儿太疯癫
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有