iOS: lame框架將PCM錄音轉成MP3格式


lame框架將PCM錄音轉成MP3格式

 

1、lame下載地址:https://github.com/rbrito/lame,它是一個不可執行的文件,需要借助build-lame.sh腳本將其編譯成.a靜態包。

 

2、build-lame.sh下載地址: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靜態包適用於所有的處理器,而thin-lame下的libmp3lame.a靜態包分別對應各個類型處理器,其實可以自己使用lipo -create -output進行合成,可以自己看看。

 

7、這里我們使用fat-lame下的靜態包,將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

簡書:iOS - 錄音文件lame轉換MP3相關配置

demo:https://github.com/rpplusplus/iOSMp3Recorder


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM