配套資料在網(wǎng)盤資料的“迅為iTOP-i.MX6開發(fā)板資料匯總(不含光盤資料)\08_迅為iTOP-i.MX6開發(fā)板 Linux 系統(tǒng)開發(fā)資料\13-Linux 系統(tǒng)移植 tinyplay\iTOP-iMX6-Linux 系統(tǒng)-聲卡移植 tinyplay.zip” tinyalsa 是 Google 在 Android 4.0 之后推的基于 alsa 內(nèi)核的用戶層音頻接口。tinyalsa 提供的頭文件是"asoundlib.h",提供最基礎(chǔ)的 pcm 和 mixer 操作。 tinyalsa 的實(shí)現(xiàn)文件為 pcm.c(實(shí)現(xiàn) pcm api)和 mixer.c(實(shí)現(xiàn) mixer api)。在其中有四個(gè)小工具它們分別是: tinypcminfo:tinypcminfo.c,查看 pcm 設(shè)備能力; tinyplay:tinyplay.c,使用 pcm 設(shè)備播放 wav 格式的音頻文件; tinycap:tinycap.c,使用 pcm 設(shè)備采集 pcm 格式的碼流,并保存為 wav 格式的文件; tinymix:tinymix.c,對(duì) pcm 設(shè)備的控制,包括音量調(diào)節(jié)、設(shè)備切換。 這四個(gè)工具使用時(shí)可以先使用 tinypcminfo 查看 pcm 設(shè)備的能力,以防我們使用其他三個(gè)命令時(shí)使用 了不合理的配置會(huì)出現(xiàn) parameter invalid 的錯(cuò)誤。 本文檔適用于最小 Linux 系統(tǒng)以及 Qt 系統(tǒng)。 64.1 源碼編譯 查看本次提供的壓縮包內(nèi)容,分別為指導(dǎo)文檔,測(cè)試音樂以及源碼文件夾,如下圖所示。 ![]() 將提供的壓縮包中的文件夾 tinyalsa 拷貝到 Ubunut 的工作目錄,如圖。 ![]() 本次編譯環(huán)境為“arm-2009q3”,如下圖所示。 ![]() 進(jìn)入到 ubuntu 上的 tinyalsa 文件夾,在當(dāng)前目錄下輸入命令“make”,自動(dòng)生成 4 個(gè) 可執(zhí)行文件“tinycap、tinymix、tinypcminfo、tinyplay”。 ![]() 編譯完成。 64.2 耳機(jī)和喇叭測(cè)試 本次測(cè)試是在 iTOP-iMX6Q 開發(fā)板上進(jìn)行,耳機(jī),麥克風(fēng)的連接如圖。喇叭左聲道是 J5,右聲道是 J6。 ![]() 64.2.1 測(cè)試環(huán)境和 tinymix 將上一步生成的 4 個(gè)二進(jìn)制可執(zhí)行文件和我們提供的測(cè)試音樂 1.wav 文件拷貝到 U 盤,插入到運(yùn)行最小 Linux 系統(tǒng)的 iMX6Q 開發(fā)板上,掛載 U 盤使用命令 “mount /dev/sda1 /mnt/disk”,如下圖所示。 ![]() 如果在 qt 系統(tǒng)上,那么先需要使用命令“mknod /dev/sda1 b 8 1”創(chuàng)建節(jié)點(diǎn),再使用命令“mount/dev/sda1 /mnt/disk”掛載 U 盤,如下圖所示。 ![]() 然后使用命令“cp /mnt/disk/tiny* /bin”將 U 盤中的四個(gè)可執(zhí)行文件拷貝到“/bin”目錄下,如下圖所示。 ![]() 接著在控制臺(tái)輸入“tinymix”命令,如下圖所示,可以看到全部設(shè)置。 ![]() 第一行顯示“Number of controls: 52”表明有 52 條 tinymix 混音命令。 第二行是介紹 0-52 條命令的表格; 第一列 ctl 表示編號(hào)。使用對(duì)應(yīng)命令的時(shí)候如果想用第 n 條命令,則 tinymix 要加上第一個(gè)參數(shù) n; 第二列 type 表示類型。INT 類型可以設(shè)置為 0-127 或者 255,BOOL 表示可以設(shè)置為 0 和 1; 第三列 num 表示“可控制數(shù)目”。例如,有兩個(gè)耳機(jī)(左耳和右耳)通道,可是只用設(shè)置一個(gè)參數(shù) 4 同時(shí)就可以設(shè)定兩 個(gè)耳機(jī)的音量;第四列 name 解釋命令;第五列 value顯示參數(shù)當(dāng)前的值。 測(cè)試中需要用到的命令如下表所示。注意,下表中只有最常用的命令,其它命令可以使用 tinymix 命令查看研究,這里不再贅述。 ![]() 編號(hào) 5 中的零交叉檢波(Zero Cross detection)設(shè)置增益只有在輸入信號(hào)零交叉后才會(huì)變化,開啟此項(xiàng)以避免增益變化引起的咔咔聲。 應(yīng)該注意的是,無論在最小 Linux 系統(tǒng)還是 Qt 系統(tǒng),聲音默認(rèn)同時(shí)從揚(yáng)聲器以及內(nèi)置耳機(jī)輸出,并沒有切換內(nèi)外放的開關(guān)。而當(dāng)揚(yáng)聲器的兩個(gè)聲道同時(shí)打開時(shí),默認(rèn)只有右聲道有聲音,要想使用左聲道輸出,則需關(guān)閉右聲道。即揚(yáng)聲器只能作用在一個(gè)聲道。如果在耳機(jī)和揚(yáng)聲器同時(shí)設(shè)置非零音量時(shí)播放音樂,聲音從耳機(jī)以及揚(yáng)聲器的右聲道傳出。 64.2.2 耳機(jī)播放測(cè)試 使用耳機(jī)輸出,則在串口控制臺(tái)依次執(zhí)行以下命令:tinymix 4 127、tinymix 5 1、 tinymix 38 1、 tinymix 41 1,如下圖所示。 ![]() 接下來在串口控制臺(tái)輸入“tinyplay /mnt/disk/1.wav”,音頻文件的具體路徑應(yīng)以實(shí)際情況為準(zhǔn),操作完成如下圖所示。 ![]() 可以看到正在播放,并且耳機(jī)中可以聽到聲音,退出播放使用快捷鍵 Ctrl+c。 64.2.3 揚(yáng)聲器喇叭播放測(cè)試 使用揚(yáng)聲器,則需在串口依次輸入以下命令:tinymix 6 127、tinymix 7 1、tinymix 38 1、tinymix 41 1,如下圖所示。 ![]() 接下來在串口控制臺(tái)輸入“tinyplay /mnt/disk/1.wav”,音頻文件的具體路徑應(yīng)以實(shí)際情況為準(zhǔn),操作完成如下圖所示。 ![]() 可以聽到揚(yáng)聲器中有聲音播放。 |