lame框架將PCM錄音轉成MP3格式
1垂涯、lame下載地址:https://github.com/rbrito/lame,它是一個不可執(zhí)行的文件碌补,需要借助build-lame.sh腳本將其編譯成.a靜態(tài)包壁公。
2、build-lame.sh下載地址:[https://github.com/kewlbear/lame-ios-build][圖片上傳中...(791499-20171011151510980-1910598493.png-dfdad9-1565596345680-0)]
(https://github.com/kewlbear/lame-ios-build)
3焚鲜、解壓下載的lame-ios-build-master框架, 將build-lame.sh 拷貝到 /Users/xxx/xxx/lame/lame-origin目錄下。
4放前、修改build-lame.sh腳本恃泪,將SOURCE="lame" 修改為 SOURCE=“”。
5犀斋、sudo ./build-lame.sh贝乎, 編譯所有.a文件,大概需要一分鐘左右叽粹,編譯完成后lame-origin目錄下會生成fat-lame览效、thin-lame、scratch-lame三個文件夾虫几。
6锤灿、fat-lame下的libmp3lame.a靜態(tài)包適用于所有的處理器,而thin-lame下的libmp3lame.a靜態(tài)包分別對應各個類型處理器辆脸,其實可以自己使用lipo -create -output進行合成但校,可以自己看看。
7啡氢、這里我們使用fat-lame下的靜態(tài)包状囱,將fat-lame中的lame.h 和 libmp3lame.a導入工程即可。
8倘是、截圖
9亭枷、注意,特別說明:
(1)合適libmp3lame 轉換成mp3搀崭,pcm數據必須是雙聲道叨粘。否則轉換會失敗。
(2)使用 lame_set_in_samplerate 設置參數必須與pcm數據采樣率一致。
(3)轉換源碼如下升敲。
(void)Wav2Mp3
{
NSString *srcFile = self.srcFilePath;
NSString *dstFile = self.dstFilePath; long readLen, writeLen;
FILEFILE *srcWav = fopen([srcFile UTF8String], "rb"); //跳過文件頭
fseek(srcWav, sizeof(WavFileHeader), SEEK_CUR);
FILEFILE *destMp3 = fopen([dstFile UTF8String], "wb"); const int PCM_SIZE = 16384; const int MP3_SIZE = 16384; short pcm_buffer[PCM_SIZE*2];
unsigned char mp3_buffer[MP3_SIZE];
//這里要注意答倡,lame的配置要跟AVAudioRecorder的配置一樣,否則會造成轉換失敗
lame_t lame = lame_init();
lame_set_in_samplerate(lame, kSampleRate);
lame_set_VBR(lame, vbr_default);
lame_init_params(lame); do {
readLen = fread(pcm_buffer, 2*sizeof(short int), PCM_SIZE, srcWav); if (readLen == 0)
{
writeLen = lame_encode_flush(lame, mp3_buffer, MP3_SIZE);
} else {
writeLen = lame_encode_buffer_interleaved(lame, pcm_buffer, (int)readLen, mp3_buffer, MP3_SIZE);
}
fwrite(mp3_buffer, writeLen, 1, destMp3);
} while (readLen != 0);
lame_close(lame);
fclose(destMp3);
fclose(srcWav);
}
10驴党、參考
lame(直接使用,已經編譯成功過了):lame.zip
demo:https://github.com/rpplusplus/iOSMp3Recorder