懂Speex的请进

赤勇玄心行天道 2015-12-02 10:08:56
我目前想用Speex库对原始音频数据进行编码和解码,但是解码后的音频数据和编码前的音频数据相差非常大,各位帮我看看代码有没有问题。


CLog p_clLog;
char p_szcTemp[1024];
int p_iTemp;

p_clLog.Debug ("编码前");
p_clLog.LogHex (L_DEBUG, (const char *)inputBuffer, framesPerBuffer * 2);

//编码
{
void * vSpeexEncoderState;
SpeexBits stSpeexBits;

speex_bits_init (&stSpeexBits);//初始化SpeexBits结构体
speex_bits_reset (&stSpeexBits);//清空SpeexBits结构体
vSpeexEncoderState = speex_encoder_init (&speex_nb_mode);//初始化Speex编码器句柄,采样频率8000Hz

p_iTemp = 0;
speex_encoder_ctl (vSpeexEncoderState, SPEEX_SET_VBR, &p_iTemp);//关闭Speex编码器句柄的动态比特率

speex_encode_int (vSpeexEncoderState, (INT16 *)inputBuffer, &stSpeexBits);//将16位整型原始音频数据编码成Speex格式,并写入到SpeexBits结构体

p_iTemp = speex_bits_write (&stSpeexBits, p_szcTemp, sizeof (p_szcTemp));//从SpeexBits结构体,将编码后的Speex格式音频数据写入到新的内存

speex_bits_destroy (&stSpeexBits);//销毁SpeexBits结构体
speex_encoder_destroy (vSpeexEncoderState);//销毁Speex编码器句柄

p_clLog.Debug ("编码后");//打印日志
p_clLog.LogHex (L_DEBUG, p_szcTemp, p_iTemp);//打印日志
}

//解码
{
void * vSpeexDecoderState;
SpeexBits stSpeexBits;

speex_bits_init (&stSpeexBits);//初始化SpeexBits结构体
speex_bits_reset (&stSpeexBits);//清空SpeexBits结构体
vSpeexDecoderState = speex_decoder_init (&speex_nb_mode);//初始化Speex编码器句柄,采样频率8000Hz

speex_bits_read_from (&stSpeexBits, p_szcTemp, p_iTemp);//将编码后的Speex格式音频数据写入到SpeexBits结构体

p_iTemp = speex_decode_int (vSpeexDecoderState, &stSpeexBits, (INT16 *)outputBuffer);//从SpeexBits结构体,将编码后的Speex格式音频数据解码成16位整型原始音频数据,并写入到新的内存

speex_bits_destroy (&stSpeexBits);//销毁SpeexBits结构体
speex_decoder_destroy (vSpeexDecoderState);//销毁Speex编码器句柄

p_clLog.Debug ("解码后");//打印日志
p_clLog.LogHex (L_DEBUG, (const char *)outputBuffer, 1 * framesPerBuffer * 2);//打印日志
}


以下是日志:


2015-12-02 10:08:20 927|时隔 0.000|audiotestdlg.cpp:558->patestCallback ()|调试: 编码前
2015-12-02 10:08:20 927|时隔 0.000|audiotestdlg.cpp:559->patestCallback ()|调试:
/****************************/ 十六进制开始 \****************************\
0:83 E3 71 01 C2 37 10 50 2C C1 D0 9E A4 BA 70 F4 ; ..q..7.P,.....p.
16:C9 E5 C5 D9 AD B6 CA F8 A9 74 4C 3E 9A C7 36 98 ; .........tL>..6.
32:F1 26 4D 6F FC 44 86 51 70 E0 00 80 F2 97 67 BD ; .&Mo.D.Qp.....g.
48:40 70 FF 39 91 CD 15 E1 80 FF 45 37 94 0D F6 F7 ; @p.9......E7....
64:3B AA A5 0D B5 F1 F1 A0 0E E9 7F 0D 81 55 8A 65 ; ;...........U.e
80:EF 54 39 4B D7 16 E5 12 DF CB 5E D0 7E 9E 81 D8 ; .T9K......^.~...
96:35 2B 50 37 7D 62 EC C8 25 C9 01 46 EC 5C 4D 18 ; 5+P7}b..%..F.\M.
112:D9 17 70 F0 B0 8C 6B A2 57 D1 80 F6 C3 E3 0E C8 ; ..p...k.W.......
128:3F 09 20 18 CA 71 74 35 B4 A7 D7 A8 DF C5 A0 56 ; ?. ..qt5.......V
144:F5 5A E7 60 64 49 41 30 6D 1A 22 A9 71 89 BB B9 ; .Z.`dIA0m.".q...
160:AA FC A8 D3 65 A6 2E 0A 60 2C CF 41 DA 02 C8 1F ; ....e...`,.A....
176:64 5E 6F 53 8A 1B 41 DB F3 D9 43 A0 BE 9E F5 EA ; d^oS..A...C.....
192:56 D5 FD 46 C9 7B 9E 52 C0 12 00 80 61 9A E2 B4 ; V..F.{.R....a...
208:A5 02 A1 37 3D 69 DD 17 49 CC B5 CC CA AB 74 30 ; ...7=i..I.....t0
224:31 06 48 36 22 41 60 D2 DE 3D 4D 05 9D DA 12 08 ; 1.H6"A`..=M.....
240:67 B4 6A CC 2E CC 3F 2A FF 7F C9 78 EC 13 DB AD ; g.j...?*..x....
256:4D 14 35 22 D0 CE FE F0 BA 53 58 2C 58 DF 25 E1 ; M.5".....SX,X.%.
272:92 AE 47 28 01 C0 91 AB 33 3F 73 33 FA 2E 03 DB ; ..G(....3?s3....
288:87 CA D8 D1 8D 36 3A DA 7F AE 02 AD 3A BC 78 F1 ; .....6:....:.x.
304:85 35 85 3B 3C E4 C1 BD 16 D1 2D 22 FB 09 DD EF ; .5.;<.....-"....
\****************************\ 十六进制结束 /****************************/
2015-12-02 10:08:20 928|时隔 0.001|audiotestdlg.cpp:580->patestCallback ()|调试: 编码后
2015-12-02 10:08:20 928|时隔 0.000|audiotestdlg.cpp:581->patestCallback ()|调试:
/****************************/ 十六进制开始 \****************************\
0:28 17 1C 02 FF 00 00 7F FF FF FF FF FF 84 A1 FD ; (..............
16:BC 4C BA B9 E6 50 AD E3 5D 2D 1B C7 92 09 16 FE ; .L...P..]-......
32:B2 60 DD D8 1E 17 ; .`....
\****************************\ 十六进制结束 /****************************/
2015-12-02 10:08:20 929|时隔 0.001|audiotestdlg.cpp:600->patestCallback ()|调试: 解码后
2015-12-02 10:08:20 929|时隔 0.000|audiotestdlg.cpp:601->patestCallback ()|调试:
/****************************/ 十六进制开始 \****************************\
0:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
16:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
32:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
48:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
64:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
80:DE FF E4 FF 1A 00 35 00 1E 00 D7 FF D0 FF 0B 00 ; ......5.........
96:2F 00 1A 00 D7 FF D6 FF 10 00 2D 00 13 00 D4 FF ; /.........-.....
112:DB FF 16 00 30 00 12 00 CB FF D4 FF 18 00 3E 00 ; ....0.........>.
128:19 00 C2 FF CC FF 12 00 39 00 1A 00 CB FF D0 FF ; ........9.......
144:1B 00 41 00 18 00 C7 FF CD FF 17 00 3E 00 1D 00 ; ..A.........>...
160:50 0A 05 EE 29 27 AD 24 CB A2 B4 C5 66 DA 2F 12 ; P...)'.$....f./.
176:F7 24 A4 03 57 E1 FD 17 2E 6C 0E 2C 4A E6 2D C9 ; .$..W....l.,J.-.
192:FD E9 ED 3F 58 5A 61 2D 87 CE C7 83 F2 96 70 E0 ; ...?XZa-......p.
208:4E 31 51 47 4B DF 92 E9 A6 29 36 23 D2 25 1C 00 ; N1QGK....)6#.%..
224:89 BC 5F 25 95 1C 6C D0 F6 D0 7D DD 69 45 5B 3C ; .._%..l...}.iE[<
240:FE 4D DA 4C 0F FA B5 B9 69 92 C1 C8 82 B2 83 FB ; .M.L....i.......
256:62 4C 41 3A 2D 4B 85 DA 09 D0 42 3F 09 0E A3 0E ; bLA:-K....B?....
272:5E 09 01 CB 00 80 DE A6 BE FC 06 FC 7C 04 72 EF ; ^...........|.r.
288:EE 14 D8 26 E9 61 CA 4F AD BA 5E BC 3E E1 F6 2C ; ...&.a.O..^.>..,
304:50 7C 5D 67 28 1A 92 12 05 13 A2 AA 00 80 7D AC ; P|]g(.........}.
...全文
361 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
满衣兄 2015-12-08
  • 打赏
  • 举报
回复
解决了就好,官网的例子可以多看看,都不错的。
worldy 2015-12-08
  • 打赏
  • 举报
回复
请教一下,SpeeX怎么下载?
  • 打赏
  • 举报
回复
送分了!!!!!!!!!!!!!!!!!!!!!!
  • 打赏
  • 举报
回复
问题解决了,是我在处理每一帧数据时,都用了新的编码器句柄和解码器句柄,应该只能用一个,中途不能更换,否则就会出现杂音。
  • 打赏
  • 举报
回复
引用 3 楼 worldy 的回复:
请教一下,SpeeX怎么下载?
加我的QQ:280604597

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧