機電之家資源網(wǎng)
單片機首頁|單片機基礎(chǔ)|單片機應(yīng)用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
Gentoo下的多音頻流完整解決方案
Gentoo下的多音頻流完整解決方案
 更新時間:2009-8-12 16:52:34  點擊數(shù):0
【字體: 字體顏色

pcm.!dmix, pcm.!dsnoop, pcm.!default是分別重新定義dmix,dsnoop插件,以及default設(shè)備,目的是為了使skype更好的工作。
下面的pcm.dsp0, ctl.mixer0是為了使用aoss的程序。

先講講怎么樣使一些常見的程序都能夠使用alsa的dmix混音
mplayer: 在/etc/mplayer.conf中修改ao
ao="alsa:device=dmix"

xmms: options->preferences->output plugin選擇alsa output plugin,并配置,audio device填入dmix

gaim: preferences->interface->sounds->sounds method, Method選擇command, sound command填入“aplay -D plug:dmix %s”

這些都是比較alsa friendly的,下面看其他的一些

realplay: 使用aoss, 寫個腳本把真正的realplay包起來,將腳本mv為/usr/bin/realplay
代碼:
注:gentoo里二進(jìn)制包的軟件,都放在/opt里,不是所有的系統(tǒng)都這么處理。所以不要照抄這一段

firefox(flash plugin): 與上面類似,腳本內(nèi)容為,存為/usr/bin/firefox
代碼:
注:這只是為了flash插件,mplayer插件上面設(shè)置完就可以使用dmix了

stardict:稍微麻煩一點,他使用esound(esd)。所以如果讀者使用gentoo的話要先USE=“alsa" emerge media-sound/esound,不需要加入default運行級別
然后修改/etc/esd/esd.conf,在spawn_options最后加上-d default,這樣是為了讓esd使用alsa的default做為音頻設(shè)備
代碼:
。

最后來看看skype
首先我們來通過KDE控制中心來配置一下arts
Sound System
General: 選擇enable the sound system, run with the highest possible priority(realtime priority)
Sound buffer調(diào)節(jié)到92 miliseconds(8 fragments with 2048 bytes)
Hardware: 音頻設(shè)備:Advanced Linux Sound Architecture
選擇full duplex , using custom sampling rate: 48000 , Quality: 16 bits

好了,再看skype
gentoo中skype裝在/opt/skype下
筆者寫個了個腳本叫skype放在了/usr/bin/下
代碼:

這樣基本上就大功告成了。只是以后使用skype的時候要確保先啟動artsd
先這樣吧,如果有問題以后再補充

最后推薦個好網(wǎng)站
http://alsa.opensrc.org
還有一些連接
http://gentoo-wiki.com/HOWTO_ALSA_sound_mixer_aka_dmix
http://www.alsa-project.org/alsa-do...cm_plugins.html
 ChangLog

2005.04.23
skype我不再用靜態(tài)編譯的了,因為中文字體很難看,而且不能改變。之前segfault可能跟我的輸入法scim有關(guān),現(xiàn)在其實仍然和scim- qtimm有點沖突,不過在啟動腳本里加一句 export QT_IM_MODULE=xim就沒事了。順便說一下,scim其實是不錯的輸入法,沖突是因為之前的gcc編譯器編譯出來的c++程序的ABI不統(tǒng)一(蘇大來看看這樣說對么),現(xiàn)在4.0出來不知道會不會有改觀。

2005.03.27
stardict部分作了點改動,不需要將esound加入default運行級別

2005.03.25
原文發(fā)表于www.linuxsir.org gentoo版

正文
本文試闡述在alsa環(huán)境下多個進(jìn)程共享聲卡的問題以及具體如何通過alsa讓skype和其他程序同時使用聲卡。本文可以看作是筆者的個人經(jīng)驗介紹。同時有些信息翻譯自一些英文資料。筆者的聲卡是AC'97(intel8x0),系統(tǒng)是gentoo,
內(nèi)核2.6.11-nitro0, KDE3.4(split ebuild,arts-3.4.0),alsa-driver, alsa-utils, alsa-oss均為1.0.8,skype是1.0.0.20,mplayer是1.0pre6-3.4.3-20050110,gaim是 1.2.0, realplayer是10.0.2.608(Gold),xmms是1.2.10,stardict 2.4.4(安裝了WyabdcRealPeopleTTS),flash plugin 版本7.0.25.0。注意本文不涉及如何安裝alsa驅(qū)動的問題,請參閱其他資料。實現(xiàn)多音頻還可以使用http://www.opensound.com的商業(yè)驅(qū)動。不過是close-sourced,以前還是要收錢的,F(xiàn)在雖然個人使用已經(jīng)免費(free)了,但總歸是不自由(free)的。好了,閑話少敘,我們來切入正題。

先來看一看一些背景知識

首先要了解Linux有兩種不同的聲音系統(tǒng)
OSS (Open Sound System) 舊的.對于44100 Hz, 立體聲(stereo), 16-bit 音頻與一般的聲卡及要求它可以工作的很好. 但不足以勝任專業(yè)級的音頻處理工作。 很多舊的軟件都只能使用OSS。 OSS系統(tǒng)中通常有下列設(shè)備文件/dev/audio /dev/dsp /dev/midi /dev/mixer /dev/music /dev/sequencer等等
ALSA (Advanced Linux Sound Architecture)新的。對于很多舊的聲卡支持的不是很好,但是支持很多新的聲卡以及很多高級的專業(yè)的功能,而且具備很強擴展性。可參見http://www.alsa-project.org/alsa-do...cm_plugins.html,F(xiàn)在已經(jīng)是2.6內(nèi)核的一部分。ALSA音頻系統(tǒng)的設(shè)備文件在/dev/snd下。如果裝了ALSA oss模擬層,也會有/dev/dsp等文件。

人們往往希望多個進(jìn)程能同時使用聲卡。這就需要將多個進(jìn)程的聲音輸入混入一個音頻流的能力,即multiplexing。如果希望使用alsa來達(dá)到這個要求,針對幾種不同情況需要使用不同的技巧。區(qū)分的標(biāo)準(zhǔn)主要在于聲卡/芯片是否支持硬件混音,程序通過alsa庫直接訪問聲卡,還是通過聲音服務(wù)器(即 artsd之類), 還是通過OSS模擬。
如果硬件支持,alsa驅(qū)動支持共享聲卡。在硬件不支持的情況下,alsa庫也支持共享,只不過需要一些配置。對于使用OSS的程序,aoss能夠讓它們使用alsa。最后使用聲音服務(wù)器(arts, esound)的程序,大多數(shù)聲音服務(wù)器能作軟件混音并支持alsa輸出。所有的情況總結(jié)如下:

* 聲卡支持硬件混音
* 聲卡不支持硬件(分三種情況區(qū)別對待)
* 程序使用alsa庫來訪問聲卡
* 程序使用聲音服務(wù)器訪問聲卡
* 程序使用OSS API訪問聲卡

如果聲卡支持硬件混音,那么聲卡的共享應(yīng)該不是個問題。

如果聲卡不支持硬件混音但程序使用alsa庫來訪問聲卡,那么可以創(chuàng)建一個允許軟件混音的.asoundrc,放在用戶的宿主目錄下。通過使用dmix (允許多個進(jìn)程使用一個聲卡輸出),dsnoop(允許多個進(jìn)程從一個設(shè)備錄音),asym(將前兩者合并成)來實現(xiàn)。這三者都是alsa的插件。下面有具體的例子。這樣的程序有aplay, arecord,alsaplayer。很多程序通過配置都可以直接使用alsa庫來訪問聲卡,比如mplayer, xmms。這是最理想的情況。開發(fā)比較活躍的自由軟件往往都可以做到。

如果程序使用聲音服務(wù)器,那么可以將聲音服務(wù)器的輸出選擇為alsa,然后就可以了。對于本來不使用聲音服務(wù)器的軟件(這樣的軟件實際上只剩下了使用 OSS來訪問聲卡的,直接使用alsa的不必多此一舉)也可以令它們使用聲音器。以arts為例,執(zhí)行時前面加artsdsp就可以做到這一點。 Skype在筆者這里正是這樣處理的。

如果程序使用OSS API來訪問聲卡,可以在執(zhí)行時前面加上aoss來令它們使用alsa。

小結(jié):上面Linux的程序不能截然分成上面三類,因為很多程序都可以選擇輸出插件,比如xmms。還有,程序能否共享聲卡,跟程序本身有很大關(guān)系,要看它采用什么樣的手段輸出。最好的程序就是可以直接使用alsa的了。

下面來看具體該怎么樣做
首先要有一個合理配置的.asoundrc,這個是筆者的
代碼:
pcm.!dmix {    type dmix        ipc_key 5678293        ipc_key_add_uid yes        slave {            pcm "hw:0,0"                period_time 0                period_size 2048                buffer_size 16384                format S16_LE                rate 48000        }}pcm.!dsnoop {    type dsnoop        ipc_key 5778293        ipc_key_add_uid yes        slave {            pcm "hw:0,0"                period_time 0                period_size 2048                buffer_size 16384                format S16_LE                rate 48000        }}pcm.asymed {    type asym        playback.pcm "dmix"        capture.pcm "dsnoop"}pcm.!default {    type plug        slave.pcm "asymed"}pcm.dsp0 {        type plug                slave.pcm "asymed"}ctl.mixer0 {        type hw                card 0}
#!/bin/shaoss /opt/RealPlayer/realplay "$@"
#!/bin/shaoss /usr/libexec/firefox "$@"
[esd]auto_spawn=1spawn_options=-terminate -nobeeps -as 2 -d default -r 48000spawn_wait_ms=100
#!/bin/shartsdsp -m /opt/skype/skype
  • 上一篇: icewm+rox-filer美化過程
  • 下一篇: Gentoo 2005.0 AMD64安裝過程中遇到的問題以及解決辦法
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設(shè)備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實性、準(zhǔn)確性和合法性。
    機電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1