faac符号化aac


// 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()
"); 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
", i, nRet); if(nBytesRead <= 0) { break; } } // (4) Close FAAC engine nRet = faacEncClose(hEncoder); delete[] pbPCMBuffer; delete[] pbAACBuffer; fclose(fpIn); fclose(fpOut); //getchar(); return 0; }