去年就捣鼓过aac.但貌似怎么遇到了挫折就放弃了。。。
今天看见文件夹里还有EasyAACEncoder。就打开编译了。
因为这个工程是lib.我重建了控制台工程。把源码复制进去。添加一个main.cpp
写测试代码。
发现他只支持g711 to AAC. 我看调用是这个流程。 我没搞过g726.手头只有g711.
if ( Law_ALaw == m_inAudioInfo.CodecType())
{
m_pDecodeToPcm = new G711AToPcm();
}else if ( Law_ULaw == m_inAudioInfo.CodecType() )
{
m_pDecodeToPcm = new G711UToPcm();
}else if ( Law_G726 == m_inAudioInfo.CodecType())
{
m_pDecodeToPcm = new G726ToPcm();
}else
{
m_pDecodeToPcm = new G711AToPcm();
}
我就制造了一个g711a.wav
p.ucAudioCodec=Law_ALaw;
EasyAACEncoder_Handle api=Easy_AACEncoder_Init(p);
先读取WaveFileHeader。然后读取g711块.Encode
ret= Easy_AACEncoder_Encode(api, (BYTE*)pcm_buffer ,pcm_buffer_size,(BYTE*)aacbuf , &nBytesEncode);
返回值ret和nBytesEncode 其实是一样的。
经过运行,压缩出了一个aac音频。播放正常。但是我g711是单声道。
aac给我编码成了立体声。
在对比下文件大小。
音源 1:49秒 44100 单声道
raw_pcm.wav 9.18 MB (9,629,740 字节)
g711.wav 4.59 MB (4,814,892 字节)
out.aac 741 KB (759,157 字节)
同时用speex压缩pcm输出spx 1.2M
压缩率7%
9M的原始音频数据压缩成不到1M 很牛逼了。aac