ALSA 編程:入門篇
[導(dǎo)讀]1、GNU/Linux 系統(tǒng)下三大主流聲卡驅(qū)動程序集
Linux 有三個主流的聲卡驅(qū)動程序集:OSS/Lite(也稱為OSS/Free)、OSS/Full
(商業(yè)軟件)、ALSA(自由軟件)。
OSS
1、GNU/Linux 系統(tǒng)下三大主流聲卡驅(qū)動程序集
Linux 有三個主流的聲卡驅(qū)動程序集:OSS/Lite(也稱為OSS/Free)、OSS/Full
(商業(yè)軟件)、ALSA(自由軟件)。
OSS/Lite 是現(xiàn)在linux內(nèi)核中自帶的聲卡驅(qū)動程序集,最初由 Hannu Savolainen
開發(fā)。后來 Hannu 跑去開發(fā) Open Sound System(也就是上面所說的OSS/Full)。
由于 Hannu 的“逃跑”,RH 資助 Alan Cox 增強(qiáng) Hannu 開發(fā)的驅(qū)動程序,并使它們
完全模塊化。現(xiàn)在 Alan Cox 是內(nèi)核聲卡驅(qū)程集的維護(hù)人。OSS/Lite 從kernel-2.0開
始并入內(nèi)核,現(xiàn)在大家使用的聲卡驅(qū)程默認(rèn)都是OSS/Lite中的。
OSS/Full 是由 4Front Technologies 開發(fā)并銷售的商業(yè)軟件。它可以驅(qū)動很多
聲卡并且可以用在很多 UNIX 系統(tǒng)中。OSS/Full 完全兼容以前基于 OSS/Lite 開發(fā)
的應(yīng)用程序。作為一個商業(yè)軟件,你雖然可以使用它,但是你得不到它的源代碼,并且
你必須為此而付錢。
ALSA 是linux內(nèi)核的下一代標(biāo)準(zhǔn)聲卡驅(qū)動集。開始時 Jaroslav Kysela 等人為
Gravis UltraSound Card 開發(fā)驅(qū)動程序,后來該計(jì)劃改名為 ALSA「先進(jìn)的linux音頻
體系」,因?yàn)樗麄冋J(rèn)為 ALSA 比原來內(nèi)核中的 OSS/Lite 驅(qū)動程序集更優(yōu)秀,完全可以
代替 OSS/Lite。他們是對的,ALSA 支持的聲卡比 OSS/Lite 多,完全兼容以前基于
OSS 開發(fā)的程序,SMP(多處理器) 與 線程安全設(shè)計(jì),并且從 2.5 分支的內(nèi)核開始,
ALSA 的驅(qū)動程序集開始并入內(nèi)核,大家可以在今年的 2.6 版本的內(nèi)核中看到使用它們。
2、為什么我要使用 ALSA 開發(fā)音頻程序
首先,ALSA 是 linux 以后聲卡驅(qū)動程序的標(biāo)準(zhǔn),OSS/Lite 遲早會從內(nèi)核中去除。
開發(fā)基于 ALSA 的音頻程序可以保證以后的兼容。
其次,我們簡單比較一下開發(fā)基于 OSS 與 ALSA 的方法。
OSS 向應(yīng)用程序提供了一系列的系統(tǒng)接口。開發(fā)基于 OSS 的應(yīng)用程序需要使用
open,close,ioctl,read,write 等低級系統(tǒng)調(diào)用來完成音頻設(shè)備的控制、音頻流的輸入
輸出。
而 ALSA 則為應(yīng)用程序開發(fā)人員提供了一個優(yōu)秀的音頻庫。利用該音頻庫,開發(fā)
人員可以方便快捷地開發(fā)出自己的應(yīng)用程序,細(xì)節(jié)則留給音頻庫內(nèi)部處理。當(dāng)然 ALSA
也提供了類似于 OSS 的系統(tǒng)接口,不過 ALSA 的開發(fā)者建議應(yīng)用程序開發(fā)者使用音頻
庫而不是驅(qū)程API。
3、那么我該從何開始呢
第一步當(dāng)然是安裝 ALSA 驅(qū)動程序與音頻庫。
當(dāng)前 ALSA 有兩個分支,一個是以前的0.5版本,一個是現(xiàn)在的0.9。ALSA的開發(fā)者
已經(jīng)不支持0.5版本了,所以我們要使用0.9。大家可以在 ALSA 的主頁
www.alsa-project.org 上下載安裝。這個頁面上的信息對大家安裝很有用:
www.alsa-project.org/alsa-doc ,建議先瀏覽一下。
第二步是參考文檔與例子。
在 ALSA 的文檔頁面上有兩篇為應(yīng)用程序開發(fā)者提供的文章:
ALSA 0.9.0 HOWTO [ http://www.suse.de/~mana/alsa090_howto.html ]
Howto use the ALSA API [ http://www.op.net/~pbd/alsa-audio.html ]
當(dāng)然,還有音頻庫API的在線參考:
http://www.alsa-project.org/alsa-doc/alsa-lib
在開發(fā)過程中大家肯定會遇到問題或者困難,這時請教跟討論就少不了了。所以要
做的第三步就是訂閱 ALSA 的郵件列表了: alsa-devel@lists.sourceforge.net ?;蛘?br /> 你 E 文不好的話,可以在這里跟別人討論一下。不過不要期望過高,國內(nèi)開發(fā) ALSA
音頻程序的人本來就少,能來這里的人就更少了。
要是你已經(jīng)完成以上幾步的話,那么你就應(yīng)該開始開發(fā)了。而我的任務(wù)到此也結(jié)束了。
4、結(jié)語
我曾經(jīng)在論壇服務(wù)區(qū)上建議開一個linux下的音頻編程版塊(見: http://www.linuxforum.net/forum/showflat.php?Cat=&Board=uglyduck&Number=359899&page=2&view=collapsed&sb=5&o=31&fpart= )。然而響應(yīng)者甚廖,David 也沒有表態(tài),看著開版塊的希望已經(jīng)
沒有了,只好退而求其次,到這個版塊來發(fā)表這篇豆腐干。
大家可以看出其實(shí)這篇貼子沒什么技術(shù)含量,除第二部分是自己開發(fā)一個基于 ALSA
的小程序時的一些體會外,第一部分其實(shí)是參考 linux sound howto
[ http://www.ibiblio.org/pub/Linux/docs/HOWTO/Sound-HOWTO ] 的,而第三部分則沒
什么內(nèi)容。我只是想告訴大家應(yīng)該關(guān)注一下音頻編程,順便給大家指個方向而已。而后
面的兩篇“基礎(chǔ)”與一篇“深入”是從 ALSA 的文檔頁面上轉(zhuǎn)載的,大家有興趣可以看
看。
我還是那句話:GNU/Linux 系統(tǒng)只有從應(yīng)用層次轉(zhuǎn)變?yōu)殚_發(fā)層次才真正在中國扎下根
來。希望大家多努力。
http://www.unixresources.net/linux/clf/program/archive/00/00/37/05/370523.html
Linux 有三個主流的聲卡驅(qū)動程序集:OSS/Lite(也稱為OSS/Free)、OSS/Full
(商業(yè)軟件)、ALSA(自由軟件)。
OSS/Lite 是現(xiàn)在linux內(nèi)核中自帶的聲卡驅(qū)動程序集,最初由 Hannu Savolainen
開發(fā)。后來 Hannu 跑去開發(fā) Open Sound System(也就是上面所說的OSS/Full)。
由于 Hannu 的“逃跑”,RH 資助 Alan Cox 增強(qiáng) Hannu 開發(fā)的驅(qū)動程序,并使它們
完全模塊化。現(xiàn)在 Alan Cox 是內(nèi)核聲卡驅(qū)程集的維護(hù)人。OSS/Lite 從kernel-2.0開
始并入內(nèi)核,現(xiàn)在大家使用的聲卡驅(qū)程默認(rèn)都是OSS/Lite中的。
OSS/Full 是由 4Front Technologies 開發(fā)并銷售的商業(yè)軟件。它可以驅(qū)動很多
聲卡并且可以用在很多 UNIX 系統(tǒng)中。OSS/Full 完全兼容以前基于 OSS/Lite 開發(fā)
的應(yīng)用程序。作為一個商業(yè)軟件,你雖然可以使用它,但是你得不到它的源代碼,并且
你必須為此而付錢。
ALSA 是linux內(nèi)核的下一代標(biāo)準(zhǔn)聲卡驅(qū)動集。開始時 Jaroslav Kysela 等人為
Gravis UltraSound Card 開發(fā)驅(qū)動程序,后來該計(jì)劃改名為 ALSA「先進(jìn)的linux音頻
體系」,因?yàn)樗麄冋J(rèn)為 ALSA 比原來內(nèi)核中的 OSS/Lite 驅(qū)動程序集更優(yōu)秀,完全可以
代替 OSS/Lite。他們是對的,ALSA 支持的聲卡比 OSS/Lite 多,完全兼容以前基于
OSS 開發(fā)的程序,SMP(多處理器) 與 線程安全設(shè)計(jì),并且從 2.5 分支的內(nèi)核開始,
ALSA 的驅(qū)動程序集開始并入內(nèi)核,大家可以在今年的 2.6 版本的內(nèi)核中看到使用它們。
2、為什么我要使用 ALSA 開發(fā)音頻程序
首先,ALSA 是 linux 以后聲卡驅(qū)動程序的標(biāo)準(zhǔn),OSS/Lite 遲早會從內(nèi)核中去除。
開發(fā)基于 ALSA 的音頻程序可以保證以后的兼容。
其次,我們簡單比較一下開發(fā)基于 OSS 與 ALSA 的方法。
OSS 向應(yīng)用程序提供了一系列的系統(tǒng)接口。開發(fā)基于 OSS 的應(yīng)用程序需要使用
open,close,ioctl,read,write 等低級系統(tǒng)調(diào)用來完成音頻設(shè)備的控制、音頻流的輸入
輸出。
而 ALSA 則為應(yīng)用程序開發(fā)人員提供了一個優(yōu)秀的音頻庫。利用該音頻庫,開發(fā)
人員可以方便快捷地開發(fā)出自己的應(yīng)用程序,細(xì)節(jié)則留給音頻庫內(nèi)部處理。當(dāng)然 ALSA
也提供了類似于 OSS 的系統(tǒng)接口,不過 ALSA 的開發(fā)者建議應(yīng)用程序開發(fā)者使用音頻
庫而不是驅(qū)程API。
3、那么我該從何開始呢
第一步當(dāng)然是安裝 ALSA 驅(qū)動程序與音頻庫。
當(dāng)前 ALSA 有兩個分支,一個是以前的0.5版本,一個是現(xiàn)在的0.9。ALSA的開發(fā)者
已經(jīng)不支持0.5版本了,所以我們要使用0.9。大家可以在 ALSA 的主頁
www.alsa-project.org 上下載安裝。這個頁面上的信息對大家安裝很有用:
www.alsa-project.org/alsa-doc ,建議先瀏覽一下。
第二步是參考文檔與例子。
在 ALSA 的文檔頁面上有兩篇為應(yīng)用程序開發(fā)者提供的文章:
ALSA 0.9.0 HOWTO [ http://www.suse.de/~mana/alsa090_howto.html ]
Howto use the ALSA API [ http://www.op.net/~pbd/alsa-audio.html ]
當(dāng)然,還有音頻庫API的在線參考:
http://www.alsa-project.org/alsa-doc/alsa-lib
在開發(fā)過程中大家肯定會遇到問題或者困難,這時請教跟討論就少不了了。所以要
做的第三步就是訂閱 ALSA 的郵件列表了: alsa-devel@lists.sourceforge.net ?;蛘?br /> 你 E 文不好的話,可以在這里跟別人討論一下。不過不要期望過高,國內(nèi)開發(fā) ALSA
音頻程序的人本來就少,能來這里的人就更少了。
要是你已經(jīng)完成以上幾步的話,那么你就應(yīng)該開始開發(fā)了。而我的任務(wù)到此也結(jié)束了。
4、結(jié)語
我曾經(jīng)在論壇服務(wù)區(qū)上建議開一個linux下的音頻編程版塊(見: http://www.linuxforum.net/forum/showflat.php?Cat=&Board=uglyduck&Number=359899&page=2&view=collapsed&sb=5&o=31&fpart= )。然而響應(yīng)者甚廖,David 也沒有表態(tài),看著開版塊的希望已經(jīng)
沒有了,只好退而求其次,到這個版塊來發(fā)表這篇豆腐干。
大家可以看出其實(shí)這篇貼子沒什么技術(shù)含量,除第二部分是自己開發(fā)一個基于 ALSA
的小程序時的一些體會外,第一部分其實(shí)是參考 linux sound howto
[ http://www.ibiblio.org/pub/Linux/docs/HOWTO/Sound-HOWTO ] 的,而第三部分則沒
什么內(nèi)容。我只是想告訴大家應(yīng)該關(guān)注一下音頻編程,順便給大家指個方向而已。而后
面的兩篇“基礎(chǔ)”與一篇“深入”是從 ALSA 的文檔頁面上轉(zhuǎn)載的,大家有興趣可以看
看。
我還是那句話:GNU/Linux 系統(tǒng)只有從應(yīng)用層次轉(zhuǎn)變?yōu)殚_發(fā)層次才真正在中國扎下根
來。希望大家多努力。
http://www.unixresources.net/linux/clf/program/archive/00/00/37/05/370523.html





