2、實驗原理
音頻編解碼的主要對象是音樂和語音,音頻的編解碼格式可分為無壓縮的格式、無損壓縮格式、有損音樂壓縮格式、有損語音壓縮格式和合成算法。本實驗中使用的MP3格式屬于有損音樂壓縮格式。音頻編解碼的目的是減少傳輸的信息量和減少儲存的信息。
MP3是一種音頻壓縮技術,能夠在音質丟失很小的情況下把文件壓縮到更小的程度,而且還非常好的保持了原來的音質。描述信源的數據是信息和數據冗余之和,將音頻作為一個信源,音頻編碼的實質是減少音頻中的冗余。通常情況下,我們采用的是脈沖代碼調制編碼。PCM通過抽樣、量化、編碼三個步驟將連續變化的模擬信號轉換為數字信號。
MP3編碼一般會使用libmp3lame庫,這是一個開源的MP3編碼庫。使用lame庫只需要包含lame.h頭文件即可。通過lame庫實現MP3編碼的流程是初始化編碼參數、設置編碼參數、初始化編碼器、編碼PCM數據、結束編碼,最后銷毀編碼器。
我們來詳細了解下lame庫提供的各種參數設置的接口。首先看下初始化編碼參數的接口lame_init,這個接口可以用來設置參數。
然后看下編碼參數設置的相關接口。
第一個是設置設置被輸入編碼器的原始數據的采樣率
第二個是設置最終MP3編碼輸出的聲音的采樣率,如果不設置則和輸入采樣率一樣
第三個是設置被輸入編碼器的原始數據的聲道數
第四個是設置最終MP3編碼輸出的聲道模式,如果不設置則和輸入聲道數一樣。
第五個是設置比特率控制模式,默認是CBR,但是通常我們都會設置VBR
第六個是設置CBR的比特率,只有在CBR模式下才生效
第七個是設置VBR的比特率,只有在VBR模式下才生效
接著看一下初始化編碼器的接口,根據設置好的參數建立編碼器
然后調用接口將PCM數據送入編碼器,獲取編碼出的MP3數據。本實驗中的雙聲道數據是交錯在一起輸入的,所以使用lame_encode_buffer_interleaved接口。
編碼結束前需要刷新編碼器緩沖,獲取殘留在編碼器緩沖里的數據。
最后,編碼結束后要銷毀編碼器釋放資源。
本實驗中的MP3音頻編碼是基于SYSBIOS系統下完成的。SYS/BIOS 是一個可擴展的實時的操作系統,具有非常快速的響應時間,可以最大限度地減少對內存和CPU的要求,并且能夠實現系統的模塊化并可裁剪。
靜態創建任務的方法是通過在cfg Script腳本語言中添加相應的配置語句實現的,通過調用 Task_create()創建任務。
var Task = xdc.useModule('ti.sysbios.knl.Task');
var task0Params = new Task.Params();
task0Params.instance.name = "task0";
Program.global.task0= Task.create("&taskMain", task0Params);
3、操作現象
硬件接口
本實驗使用的硬件接口為SD卡座,所需硬件為實驗板、仿真器、電源、SD卡和讀卡器。
硬件連接
將工程目錄下的song.pcm文件拷貝到SD卡后,把SD卡插入卡槽內。
連接仿真器和電腦的USB接口。
將撥碼開關撥到DEBUG模式01111,連接實驗箱電源,撥動電源開關上電
實驗現象
導入工程,選擇Demo文件夾下的對應工程
編譯工程,生成可執行文件
將CCS連接開發板并加載程序
點擊運行程序
運行程序后,Console 窗口會持續打印信息,本次實驗每次處理9045字節的數據。
大概等待1分鐘,編碼完成。
實驗箱斷電后,取下 SD 卡
通過讀卡器將SD卡插入電腦可查看 SD 卡目錄下的內容,程序把 SD卡目錄下的 song.pcm 文件編碼并生成 song.mp3 文件。
打開并播放 MP3 文件,
-
PCM
+關注
關注
1文章
195瀏覽量
53203 -
緩沖器
+關注
關注
6文章
1921瀏覽量
45473 -
仿真器
+關注
關注
14文章
1017瀏覽量
83721 -
調制器
+關注
關注
3文章
840瀏覽量
45142 -
音頻編解碼
+關注
關注
0文章
18瀏覽量
3000
發布評論請先 登錄
相關推薦
評論