日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

libmp3lame的接口使用

發布時間:2023/12/16 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 libmp3lame的接口使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MP3標準

? ? ? ? MP3,即MPEG Layer III。MPEG有幾個版本的協議,不同版本的協議能夠支持的參數能力是不同的。編碼庫的使用者必須清楚不同版本的區別才能正確的設置參數。

? ? ? ? 有以下3個版本的協議,MPEG1、MPEG2、MPEG2.5。其中MPEG2.5是非官方的標準,但是流傳廣泛,所以基本也都支持。他們的區別主要集中在支持的比特率和采樣率不同。

MP3參數

? ? ? ??但是mp3有很多參數,這里列舉幾個mp3編碼的必要參數。

  • 采樣率(sampleRate):采樣率越高聲音的還原度越好。
  • 比特率(bitrate):每秒鐘的數據量,越高音質越好。
  • 聲道數(channels):聲道的數量,通常只有單聲道和雙聲道,雙聲道即所謂的立體聲。
  • 比特率控制模式:ABR、VBR、CBR

LAME介紹

? ? ? ? lame是一個有名的開源mp3編碼庫。具體可參考:https://lame.sourceforge.io/

編碼流程

? ? ? ? 使用lame庫只需要包含lame.h頭文件,編碼mp3基本上遵循以下的流程。

  • 初始化編碼參數

lame_init:初始化一個編碼參數的數據結構,給使用者用來設置參數。

  • 設置編碼參數

lame_set_in_samplerate():設置被輸入編碼器的原始數據的采樣率。
lame_set_out_samplerate():設置最終mp3編碼輸出的聲音的采樣率,如果不設置則和輸入采樣率一樣。
lame_set_num_channels() :設置被輸入編碼器的原始數據的聲道數。
lame_set_mode() :設置最終mp3編碼輸出的聲道模式,如果不設置則和輸入聲道數一樣。參數是枚舉,STEREO代表雙聲道,MONO代表單聲道。
lame_set_VBR():設置比特率控制模式,默認是CBR,但是通常我們都會設置VBR。參數是枚舉,vbr_off代表CBR,vbr_abr代表ABR(因為ABR不常見,所以本文不對ABR做講解)vbr_mtrh代表VBR。
lame_set_brate():設置CBR的比特率,只有在CBR模式下才生效。
lame_set_VBR_mean_bitrate_kbps():設置VBR的比特率,只有在VBR模式下才生效。
其中每個參數都有默認的配置,如非必要可以不設置。

  • 初始化編碼器

lame_init_params():根據上面設置好的參數建立編碼器

  • 編碼PCM數據

lame_encode_buffer()或lame_encode_buffer_interleaved():將PCM數據送入編碼器,獲取編碼出的mp3數據。這些數據寫入文件就是mp3文件。
? ? ? ? 其中lame_encode_buffer輸入的參數中是雙聲道的數據分別輸入的,lame_encode_buffer_interleaved輸入的參數中雙聲道數據是交錯在一起輸入的。具體使用哪個需要看采集到的數據是哪種格式的,不過現在的設備采集到的數據大部分都是雙聲道數據是交錯在一起。單聲道輸入只能使用lame_encode_buffer,把單聲道數據當成左聲道數據傳入,右聲道傳NULL即可。調用這兩個函數時需要傳入一塊內存來獲取編碼器出的數據,這塊內存的大小lame給出了一種建議的計算方式:采樣率/20+7200。

  • 結束編碼

lame_encode_flush:結束編碼,獲取編碼出的結束數據。這部分數據也需要寫入mp3文件。

  • 5.6 銷毀編碼器

lame_close()銷毀編碼器,釋放資源。

?

總結

以上是生活随笔為你收集整理的libmp3lame的接口使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。