1. 程式人生 > >alsa音訊相關檔案的移植

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 檔案到開發板