去年就搗鼓過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