wav格式音频转换成aac格式音频(二)

来源:互联网 发布:淘宝售后服务 编辑:程序博客网 时间:2024/05/21 06:39

根据前一篇的分析,则需要实现在AACCodecHelper.h中声明的几个函数,如下:

#include"AACCodecHelper.h"
#include"faac.h"
ULONG nSampleRate = 11025; // 采样率
UINT      nChannels = 1; // 声道数
UINT      nPCMBitSize = 16; // 单样本位数
ULONG nInputSamples = 0;
ULONG nMaxOutputBytes = 0;
faacEncHandle hEncoder;
faacEncConfigurationPtr pConfiguration;
BYTE* pbPCMBuffer;
BYTE* pbAACBuffer;
INT32 nPCMBufferSize;
INT32 nRet = 0;
//////////////////
INT32 t = 0;
//////////////////
void openFaacEngine(){//打开Faac引擎
    hEncoder = faacEncOpen(nSampleRate, nChannels, &nInputSamples, &nMaxOutputBytes);
    pConfiguration = faacEncGetCurrentConfiguration(hEncoder);
    pConfiguration->inputFormat = FAAC_INPUT_16BIT;
    nRet = faacEncSetConfiguration(hEncoder, pConfiguration);
    nPCMBufferSize = nInputSamples * nPCMBitSize / 8;
    pbPCMBuffer = new BYTE[nPCMBufferSize];
    pbAACBuffer = new BYTE [nMaxOutputBytes];
}
void closeFaacEngine(){//关闭Faac引擎
    nRet = faacEncClose(hEncoder);
    delete[] pbPCMBuffer;
    delete[] pbAACBuffer;
}
int wavToAAC(const char* wavData,int wavDataLen,char* aacData){
    /**
     * 将长为wavDataLen个字节的wav音频数据转化为aac,写入aacData
     * 成功返回aac数据的字节数,失败返回-1
     */
    if (hEncoder == NULL) {
        return -1;
    }
    INT32 nInputSamples = 0;
    INT32 readPCMByteSum = 0;
    INT32 writeAACByteSum = 0;
    INT32 nAACEncRet = 0;
    INT32 j = 0;
    INT32 k = 0;
    while (readPCMByteSum < wavDataLen) {
        for (j = 0; j < nPCMBufferSize; j++) {
            *(pbPCMBuffer + j) = *(wavData + j + readPCMByteSum);
        }
        readPCMByteSum += nPCMBufferSize;

        nInputSamples = nPCMBufferSize / (nPCMBitSize / 8);//计算输入样本的个数

       /**

        *调用faacEncEncode()函数,这里略过

        */

        for (k = 0; k < nAACEncRet; k++) {
            *(aacData + k + writeAACByteSum) = *(pbAACBuffer + k);
        }
        writeAACByteSum += nAACEncRet;
                fprintf(stderr,"%d: faacEncEncode returns %d\n", t++, nAACEncRet);
    }
    return writeAACByteSum;
}
未完待续~

PS:初写文章,文笔生涩之处,各位请见谅,若有疑问或者交流的,可加本人YY号:301558660

转载请注明出处:山水间博客,http://blog.csdn.net/linyanwen99/article/details/7553317