使用libfaac转换WAV文件为AAC文件,需要注意两点:
1、当faacEncEncode返回0的时候,可能是正在缓冲,所以需要重新执行编码,直到成功。
2、WAV文件和AAC文件必须采样率、声道数相同,否则AAC文件播放的声音不正确。
代码如下:
BOOL WaveFile2AACFile(CString strSrc, CString strDst)
{
FILE * fSrc = NULL;
FILE * fDst = NULL;
fSrc = _tfopen(strSrc.GetBuffer(strSrc.GetLength()), _T("ab+"));
fDst = _tfopen(strDst.GetBuffer(strDst.GetLength()), _T("wb+"));
if (!fSrc || !fDst)
return FALSE;
unsigned long nSampleRate = 8000;
unsigned int nChannels = 1;
unsigned int nPCMBitSize = 16;
unsigned long nInputSamples = 0;
unsigned long nMaxOutputBytes = 0;
faacEncHandle hEncoder = { 0 };
// 打开faac编码器引擎
hEncoder = faacEncOpen(nSampleRate, nChannels, &nInputSamples, &nMaxOutputBytes);
if (hEncoder == NULL)
{
fclose(fSrc);
fclose(fDst);
return FALSE;
}
// 分配内存信息
int nPCMBufferSize = nInputSamples*nPCMBitSize / 8;
BYTE* pbPCMBuffer = new BYTE[nPCMBufferSize];
BYTE*