您的位置:首页 > 其它

faac编码aac

2014-04-15 15:01 204 查看
// faacode.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <faac.h>
#include <stdio.h>

typedef unsigned long   ULONG;
typedef unsigned int    UINT;
typedef unsigned char   BYTE;
//typedef char            _TCHAR;

#pragma comment(lib,"libfaac.lib")

int main(int argc, _TCHAR* argv[])
{
ULONG nSampleRate = 44100;  // 采样率
UINT nChannels = 2;         // 声道数
UINT nPCMBitSize = 16;      // 单样本位数
ULONG nInputSamples = 0;
ULONG nMaxOutputBytes = 0;

int nRet;
faacEncHandle hEncoder;
faacEncConfigurationPtr pConfiguration;

int nBytesRead;
int nPCMBufferSize;
BYTE* pbPCMBuffer;
BYTE* pbAACBuffer;

FILE* fpIn; // WAV file for input
FILE* fpOut; // AAC file for output

fpIn = fopen("test.wav", "rb");//  resample.pcm
fpOut = fopen("test.aac", "wb");//  resample.aac

// (1) Open FAAC engine
hEncoder = faacEncOpen(nSampleRate, nChannels, &nInputSamples, &nMaxOutputBytes);
if(hEncoder == NULL)
{
printf("[ERROR] Failed to call faacEncOpen()\n");
return -1;
}

nPCMBufferSize = nInputSamples * nPCMBitSize / 8;
pbPCMBuffer = new BYTE [nPCMBufferSize];
pbAACBuffer = new BYTE [nMaxOutputBytes];

// (2.1) Get current encoding configuration
pConfiguration = faacEncGetCurrentConfiguration(hEncoder);

pConfiguration->inputFormat = FAAC_INPUT_16BIT;

// (2.2) Set encoding configuration
nRet = faacEncSetConfiguration(hEncoder, pConfiguration);

//如果是wav格式,先读取前面的
fseek(fpIn,58,SEEK_SET);
for(int i = 0; 1; i++)
{
// 读入的实际字节数,最大不会超过nPCMBufferSize,
nBytesRead = fread(pbPCMBuffer, 1, nPCMBufferSize, fpIn);
// 输入样本数,用实际读入字节数计算,一般只有读到文件尾时才不是nPCMBufferSize/(nPCMBitSize/8);
nInputSamples = nBytesRead / (nPCMBitSize / 8);
// (3) Encode
nRet = faacEncEncode(
hEncoder, (int*) pbPCMBuffer, nInputSamples, pbAACBuffer, nMaxOutputBytes);

fwrite(pbAACBuffer, 1, nRet, fpOut);

printf("%d: faacEncEncode returns %d\n", i, nRet);

if(nBytesRead <= 0)
{
break;
}
}

// (4) Close FAAC engine
nRet = faacEncClose(hEncoder);

delete[] pbPCMBuffer;
delete[] pbAACBuffer;
fclose(fpIn);
fclose(fpOut);

//getchar();

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: