作者dnaspirit (XD)
看板Headphone
標題[心得]USB Audio在ARM架構的Linux套件播放
時間Mon Jan 28 17:13:34 2013
全線性電源系統在x86架構下的電腦去實現,有現實上的難處。大抵就是耗電量太高,電
供體積勢必過大,散熱需非常注意。
選用ARM處理器的好處,就是省電,但是效能上就無法跟主流的x86處理器。另一個問題在
於很多USB Audio的裝置並沒有支援Linux的環境,因此使用上就會受限。不過由於智慧型
手機的興起,投入於崁入式系統的資源就變多了,也許廠商也願意投入這部分的驅動開發
也不一定。
最近開始玩起了ARM的開發板,知名的Beagleboard與Beagleboard XM是屬於Cortex-A8的
架構,Ti也把自家的DSP內建,因此可以做很多硬體的加速在訊號處理上。但是進入門檻
有點高,很多與Linux kernel的支援有關。目前尚未玩到這部分。這次用來實驗的版子其
實是Pandaboard ES,這塊使用的CPU是OMAP4460,是Cortex-A9架構的雙核心處理器,實
脈高達1.5G。並搭配1G LPDDR2記憶體。
ARM系統的開機方式與x86有很大的不同,因為沒有BIOS的關係,因此有別於傳統的開機方
式。安裝系統這邊就不詳述了,若有興趣可以私下交流。本次選用Debian的armhf架構的
套件,代號是wheezy,不屬於stable的版本,但好處是支援比較多的硬體。而電源的使用
上更是省事,只要一個5V/2A的變壓器就可以搞定整套系統。
一開始比較克難一點,我們用ALSA (Advanced Linux Sound Architecture) 的命令模式
來播放wav檔案。選用的USB Audio是 TE7022L的方案。首先把aune T1接到pandaboard的
usb。接著kernel就會檢測到有新的usb 裝置,並載入必要的模組。
列出可用的聲音裝置,TE7022L位於裝置2上,等下用aplay去撥放wav檔案時,必須使用這
個id來啟動裝置。
root@pandaes:~# cat /proc/asound/cards
0 [PandaBoardES ]: PandaBoardES - PandaBoardES
PandaBoardES
1 [OMAPHDMI ]: OMAPHDMI - OMAPHDMI
OMAPHDMI
2 [Audio ]: USB-Audio - DigiHug USB Audio
GFEC ASSP DigiHug USB Audio at usb-ehci-omap.0-1.2,
full speed
播放檔案也很簡單,使用aplay即可。
-Dhw:2,0代表指定裝置ID=2進行撥放。
aplay -v -Dhw:2,0 ./"Prologue ~ deai.wav"
播放後發現音量實在過低,使用amixer可以進行調整。
首先列出id=2有哪些mixer可調整。
root@pandaes:~# amixer -c 2 contents
numid=1,iface=MIXER,name='PCM Playback Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=2,iface=MIXER,name='PCM Playback Volume'
; type=INTEGER,access=rw---R--,values=2,min=0,max=110,step=0
: values=110,110
| dBminmax-min=-55.00dB,max=0.00dB
numid=5,iface=MIXER,name='PCM Capture Source'
; type=ENUMERATED,access=rw------,values=1,items=2
; Item #0 'Line'
; Item #1 'IEC958 In'
: values=0
numid=3,iface=MIXER,name='Line Capture Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=4,iface=MIXER,name='Line Capture Volume'
; type=INTEGER,access=rw---R--,values=2,min=0,max=104,step=0
: values=0,0
| dBminmax-min=-40.00dB,max=12.00dB
調整音量為100%的指令。
amixer -c 2 cset numid=2 100% 100%
接著再用aplay去撥放即可得到正常的音量。
這樣的過程實在有點煩人,最方便的就是裝上桌面套件,這樣就可以透過GUI介面去撥放
。有如使用windows系統的便利性。
版上有些對x86系統的調整,不外乎就是讓系統單純化,電源全線性化,在ARM系統下,自
由度更高,線性化更為簡單。只不過硬體支援度不夠高,進入門檻高。尤其是要打這麼多
指令,會讓更多人怯步。
接下來會找XMOS的晶片來試試。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.124.168.214
※ 編輯: dnaspirit 來自: 59.124.168.214 (01/28 17:14)
推 odanaga:先推! 01/28 17:25
→ odanaga:話說這樣是不是PCIE裝置用不了... 01/28 17:26
→ legendmtg:有沒有編個realtime的kernel XD 01/28 17:26
→ dnaspirit:之後想跑android,畢竟kernel事差不多的 01/28 17:49
→ dnaspirit:如果說只拿來放音樂,可以不需要用到debian套件xd 01/28 17:50
推 Dopin:真懷念 這種用參數調音量的玩具 XD 01/28 17:58
→ sorkayi:linux 的音訊處理不是很悲劇嗎@@? 01/28 18:19
推 Dopin:多工分時不可能 realtime 啦 除非用單工的 OS 現在那裡找 XD 01/28 18:39
→ Dopin: ^^^^^^^^ ^^^^^^ 你該不會是指 EZGo 吧 ... 01/28 18:40
推 fuhsi:快推!不然別人以為我聽不懂 01/28 19:17
推 delaluna:我覺得嵌入式系統撥放會是未來電腦訊源的主流 可以真正 01/28 20:41
→ delaluna:實現完全隔離 01/28 20:41
推 turtleknight:.....為何不用rasberryPi 01/28 20:49
→ dnaspirit:realtime可以用RTOS,選擇還蠻多的 01/28 21:23
→ dnaspirit:ARM PC應該可以找到pci-e的插槽 01/28 21:32
推 legendmtg:單然是單工啊XD realtime kernel要自己編啊XDD 01/28 22:51
→ legendmtg:現在有有PCI-E的產品嗎? 之前好像沒看過.... 01/28 22:54
推 Dopin:別的 OS 我不知道 但是 Linux 做為單工真的有點小拼現在大多 01/28 23:29
→ Dopin:都是靠控制 nice 來實現(模擬) RT ... 編 kernel 變 RTOS 這 01/28 23:30
→ Dopin:樣 Unix 都不 Unix 了 (不過似乎真的有搞<賺>頭 ? (炸)) 01/28 23:31
→ dnaspirit:rasberryPi 是用broadcom方案,沒跟RS買過東西,有機會 01/29 07:44
→ dnaspirit:對岸用三星arm有lay mini pci-e,Ti有arm內建2lane pci-e 01/29 07:56
→ Greentale:intel最近的atom功耗有在追上arm了喔~ 01/29 10:15
※ 編輯: dnaspirit 來自: 1.34.102.250 (04/27 20:56)