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的接口使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [ delphi ] AES-256-E
- 下一篇: PyCharm配置Virtual Env