faac
2011-04-21
홈페이지: http://www.audiocoding.com/faac.html
FAAC(Freeware Advanced Audio Coder)의 약어로 AAC 오디오 인코더를 말한다. FAAC는 현재 MPEG-4 LTP, main, Low Complexity를 지원하고 있다.
faac 1.28 버전을 MinGW에서 컴파일시 패치를 해야한다. 패치는 여기서 다운받고.
패치방법은 소스코드내에서 patch -p0 < faac-01-buildfixes.patch 를 수행.
FAAC is an MPEG-4 and MPEG-2 AAC encoder.
Note that the quality of FAAC is not up to par with the currently best AAC encoders available.
Features:
- Portable
- Reasonably fast
- LC, Main, LTP support
- DRM support through DreaM
다운로드: 1.28
예제
#include <faac.h> #include <stdio.h> int _tmain(int argc, _TCHAR* argv[]) { ULONG nSampleRate = 22050; UINT nChannels = 1; 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; FILE* fpOut; fpIn = fopen("C:\\audio-22050,16,1.pcm", "rb"); fpOut = fopen("C:\\audio-22050,16,1.aac", "wb"); // FAAC 라이브러리를 이용하려면 faacEncOpen()을 호출해야 한다. // 압축을 할 PCM 데이터 속성을 입력하면 // 압축 수행 시 한번에 넣을 샘플수와 한번 호출시 출력되는 최대 압축 데이터 크기를 알려준다. 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]; // 입력할 PCM 데이터의 BIT 크기는 16BIT임을 명시한다. (FAAC의 Default값은 32BIT) pConfiguration = faacEncGetCurrentConfiguration(hEncoder); pConfiguration->inputFormat = FAAC_INPUT_16BIT; // Encoding 설정을 변경한다. nRet = faacEncSetConfiguration(hEncoder, pConfiguration); for(int i=0; 1; i++) { nBytesRead = fread(pbPCMBuffer, 1, nPCMBufferSize, fpIn); nInputSamples = nBytesRead / (nPCMBitSize / 8); // faacEncEncode() 에서 PCM 데이터를 압축하여 AAC 데이터를 만든다. // nRet: 결과 데이터의 BYTE 크기 (즉, pbAACBuffer 내에 저장된 AAC 데이터의 BYTE 크기) // pbAACBuffer: 결과물인 AAC 데이터가 저장되는 버퍼 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; } } while(1) { // FAAC 라이브러리내에 남아있는 PCM 데이터를 압축시킨다. (Flushing) nRet = faacEncEncode( hEncoder, (int*) pbPCMBuffer, 0, pbAACBuffer, nMaxOutputBytes); // 더이상 압축된 데이터가 나오지 않으면 종료 if(nRet <= 0) { break; } } // FAAC 라이브러리를 닫는다. nRet = faacEncClose(hEncoder); delete[] pbPCMBuffer; delete[] pbAACBuffer; fclose(fpIn); fclose(fpOut); getchar(); return 0; }
Categorized as: Programming
답글 남기기