alsa音訊相關檔案的移植
情況簡介:
ALSA 是目前 Linux 系統上大量採用的音訊裝置庫,通過 Alsa 架構能分離驅動和應用的開發。
有了 Alsa 核心驅動,我們還需要 Alsa Lib 和 Alsa Util 的支援,這 3 者的關係如下圖所示:
alsa-driver:alsa的驅動程式
alsa-lib: 應用程式呼叫的API函式
alsa-utils: alsa的應用程式
移植主機的環境:
1、主機:ubuntu-10.10
2、交叉編譯器版本:arm-none-linux-gnueabi-gcc-4.4.1(gcc version 4.4.1 (Sourcery G++ Lite 2010q1-202))
一、alsa-lib-1.0.23移植:
1、configure
./configure --host=arm-none-linux-gnueabi
--prefix=/home/linux/tools/arm_install/alsa/alsa-lib-1.0.23
--enable-static --enable-shared --disable-python
--with-alsa-devdir=/dev
--with-configdir=/usr/local/share/alsa
--with-plugindir=/usr/local/lib/alsa_lib
配置會先對此命令中的配置項進行檢查,然後實現配置。需要注意的是:配置如果出錯,未必一定報錯,而是會採用預設的配置選項。幾個重要的配置項:
1)、--host 指定編譯器,這裡指定為交叉編譯器。注意執行本配置命令前務必保證編譯器已經可以在 Shell下直接執行了
2)、--prefix 指定編譯後文件的安裝路徑,後續的安裝命令會在該目錄中建立 lib 和 include 兩個目錄
3)、--with-configdir 指定 conf 檔案的安裝目錄,該目錄中對我們最有用的 alsa.conf ,此檔案會被直接移植到你的目標系統中
4)、--with-alsa-devdir 指定音訊裝置檔案的目錄。例如在/dev/ 目錄下有(pcmC0D0c/pcmC0D0p/pcmC0D1p等)
但是有些裝置的裝置檔案是在 /dev/snd/ (pcmC0D0c/pcmC0D0p/pcmC0D1p等。
所以"--with-alsa-devdir"是改變裝置檔案的選項,我的裝置檔案時在/dev/ 目錄下,所以就是--with-alsa-devdir=/dev
2、make
make or sudo make
3、安裝編譯好的檔案
su root //這裡面為什麼進入root使用者,因為我sudo make install一直錯誤,我完全進入root使用者後問題就解決了
make install
二、alsa-utils-1.0.23移植:
utils會生成用於播放,錄製,配置音訊的應用檔案,對測試很有用處。編譯過程如下:
1、Configure
./configure --host=arm-none-linux-gnueabi \
--prefix=/home/linux/tools/arm_install/alsa/alsa-utils-1.0.23 \
--with-alsa-inc-prefix=/home/linux/tools/arm_install/alsa/alsa-lib-1.0.23/include \
--with-alsa-prefix=/home/linux/tools/arm_install/alsa/alsa-lib-1.0.23/lib \
--with-configdir=/usr/locale/share \
--disable-alsamixer --disable-xmlto
主要的配置選項:
1)、--host 指定編譯器,與 lib 的配置選項相同
2)、--prefix 指定編譯後文件的安裝路徑,與 lib 的配置選項相同
3)、--with-alsa-inc-prefix用來指定alsa-lib編譯好的檔案的include目錄
4)、--with-alsa-prefix用來指定alsa-lib編譯好的檔案的lib目錄
2、編譯
make
3、安裝編譯好的檔案
su root
make install
三、將 lib 和 utils 檔案系統中,在目標板上,以下檔案必須被拷貝至對應位置:
alsa-lib的庫檔案
1、cp /home/linux/tools/arm_install/alsa/alsa-lib-1.0.23/lib/lib* /source/rcar/rootfs/lib
拷貝alsa配置檔案到 /usr/share/ 下
2、cp /usr/local/share/alsa /source/rcar/rootfs/usr/share
並且設定環境變數
export ALSA_CONFIG_PATH=/usr/share/alsa/alsa.conf
utils能產生 aplay,amixer,arecord 可執行程式,這些檔案可放在 /usr/sbin 中
3、cp /home/linux/tools/arm_install/alsa/alsa-utils-1.0.23 /source/rcar/rootfs/usr/bin
4、根據自己平臺關於音效卡裝置的裝置檔案所在的目錄進行調整,常見的是"/dev/" 和"/dev/snd"
controlC0, pcmC0D0c, pcmC0D0p, timer等
四、執行測試程式
//播放wave檔案
apply test.wav
//改變test.wav的頻率播放檔案
apply -D rate_44k test.wav
//錄音,以20秒的間隔時間(-d 20),立體聲(-c 2),頻率是8000HZ來錄製wave格式音訊
arecord -d 20 -c 2 -t wav -r 8000 -f "Singed 16 bit Little Endian" test.wav
//測試混音播放(先是播放test1.wav,然後再同時播放test2.wav)
aplay -D plug:dmix_44k test1.wav &
aplay -d plug:dmix_44k test2.wav &
//設定放音增益(0 to 3)
amixer set Master 1
//設定錄音音量(0-31)
amixer set Line 10
//單聲道錄音
arecord -d 10 -t wav -c1 -r 22050 -f S16_LE test.wav
//立體聲錄音
arecord -d 10 -t wav -c2 -r 22050 -f S16_LE test1.wav
./configure --host=arm CC=arm-none-linux-gnueabi-gcc --prefix=/home/kerson/alsa/alsa-lib-1.0.25/install --disable-python --with-configdir=/share/alsa --with-alsa-devdir=/dev --with-aload-devdir=/dev
./configure --host=arm-linux CC=arm-none-linux-gnueabi-gcc --prefix=/home/kerson/alsa/alsa-utils-1.0.25/install --with-alsa-inc-prefix=/home/kerson/alsa/alsa-lib-1.0.25/install/include --disable-alsamixer --with-alsa-prefix=/home/kerson/alsa/alsa-lib-1.0.25/install/lib
--disable-xmlto --disable-alsamixer CFLAGS="-lrt"
/bin/mkdir /dev/snd
/bin/ln -s /dev/pcmC0D0c /dev/snd/pcmC0D0c
/bin/ln -s /dev/pcmC0D0p /dev/snd/pcmC0D0p
/bin/ln -s /dev/controlC0 /dev/snd/controlC0
/bin/ln -s /dev/pcmC1D0c /dev/snd/pcmC1D0c
/bin/ln -s /dev/pcmC1D0p /dev/snd/pcmC1D0p
/bin/ln -s /dev/controlC1 /dev/snd/controlC1
/bin/ln -s /dev/seq /dev/snd/seq
/bin/ln -s /dev/timer /dev/snd/timer
複製 本機目錄 share/alsa 檔案到開發板