91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS下使用lamemp3庫將PCM錄音數據壓縮為MP3格式

發布時間:2020-07-15 11:09:48 來源:網絡 閱讀:10562 作者:iKingLai 欄目:移動開發

前面介紹過給PCM錄音加44個字節頭轉為wav格式,從而能讓普通播放器進行播放。wav格式有一個比較明顯的缺點就是數據比較大,因為它是沒有壓縮過的。一般開發手機上的app,數據流量和優化是要經常考慮的問題,因此如果你需要將錄音上傳到服務器上,還有能夠讓普通的播放器播放的話,壓縮成mp3是比較好的解決方案,下面就介紹一下如何用lamemp3這個庫進行壓縮。


1.  到網上去下載lame庫,這個就不介紹了,搜索一下就搞定了,或者直接用我附件Demo中的庫也可以。


2.  將lamemp3 Add到你的項目中。


3.   在你的源文件中導入lame.h。


4.   設置壓縮的參數,這些參數根據自己的需要進行調整:


// 全局指針

       lame_t lame;

       // mp3壓縮參數

lame = lame_init();

lame_set_num_channels(lame, 1); // 單聲道

lame_set_in_samplerate(lame, 16000);// 16K采樣率

lame_set_brate(lame, 128);// 壓縮的比特率為128K

lame_set_mode(lame, 1);

lame_set_quality(lame, 2);

lame_init_params(lame);


5.    調用lame_encode_buffer這個函數進行壓縮,這個函數有很多參數,下面一一說明一下:


       第一個參數lame_global_flags * gfp,就是我們之前聲明的全局指針,即lame


       第二個參數const short int pcm_l[],short類型的錄音數據,這里表示的是左聲道

       第三個參數const short int pcm_r[],short類型的錄音數據,這里表示的是右聲道

       說明:把這兩個參數都設置為你要壓縮的錄音數據即可


      第四個參數unsigned char *mp3buf,存放壓縮完后數據的緩沖區,注意是unsigned char *類型


      第五個參數constint mp3buf_size,緩沖區的長度


我們得到的錄音數據是byte類型的,首先要將它轉換為short類型,由于一個short是兩個byte,長度要減半

short *recordingData = (short *)audioData.bytes;

int pcmLen = audioData.length;

int nsamples = pcmLen / 2;


聲明一個用來存放壓縮后數據的緩沖區,長度就設置為pcmLen即可

   unsigned char buffer[pcmLen];


調用lame_encode_buffer進行壓縮

int recvLen = lame_encode_buffer(lame, recordingData, recordingData, nsamples, buffer, pcmLen);


注意有可能緩沖區沒有填滿,所以壓縮后數據的實際大小為recvLen,也就是lame_encode_buffer的返回值


把壓縮后的數據添加到一個NSMutable中

    [mp3Datas appendBytes:buffer length:recvLen];


6.   錄音結束后,保存到Document文件中


   NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,   NSUserDomainMask, YES) objectAtIndex:0];

NSString *filePath = [path stringByAppendingPathComponent:@"recording.mp3"];

    [mp3Datas writeToFile:filePath atomically:YES];

     [mp3Datas release];


7.  釋放lame資源

    lame_close(lame);


以上就是用lame進行壓縮的主要步驟,我設置的錄音格式是:16位  16k的pcm,這個要和lame設置的參數對應上,否則壓縮是會有問題的。


整個Demo我已經上傳到附件中,點擊“開始說話”按鈕進行錄音,然后再點擊“說完了”停止錄音。


我把壓縮后的MP3數據存放在Documents下的recording.mp3文件中,需要的話可以自行用AVAudioPlayer進行播放,或直接把recording.mp3拷出來,用一般的音樂播放器播放。






附件:http://down.51cto.com/data/2363064
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

定兴县| 亳州市| 屏东市| 江北区| 崇仁县| 普陀区| 资中县| 惠来县| 游戏| 涟源市| 于田县| 将乐县| 正宁县| 奎屯市| 孙吴县| 太仓市| 滁州市| 隆安县| 南乐县| 博罗县| 崇阳县| 荔波县| 常宁市| 勃利县| 陇南市| 巴中市| 石阡县| 安乡县| 集安市| 车致| 自治县| 曲松县| 新沂市| 山西省| 丰都县| 香格里拉县| 化德县| 商丘市| 志丹县| 通道| 城步|