機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
Gentoo下的多音頻流完整解決方案
Gentoo下的多音頻流完整解決方案
 更新時(shí)間:2009-8-12 16:52:34  點(diǎn)擊數(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, 寫個(gè)腳本把真正的realplay包起來,將腳本mv為/usr/bin/realplay
代碼:
注:gentoo里二進(jìn)制包的軟件,都放在/opt里,不是所有的系統(tǒng)都這么處理。所以不要照抄這一段

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

stardict:稍微麻煩一點(diǎn),他使用esound(esd)。所以如果讀者使用gentoo的話要先USE=“alsa" emerge media-sound/esound,不需要加入default運(yùn)行級(jí)別
然后修改/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下
筆者寫個(gè)了個(gè)腳本叫skype放在了/usr/bin/下
代碼:

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

最后推薦個(gè)好網(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)編譯的了,因?yàn)橹形淖煮w很難看,而且不能改變。之前segfault可能跟我的輸入法scim有關(guān),現(xiàn)在其實(shí)仍然和scim- qtimm有點(diǎn)沖突,不過在啟動(dòng)腳本里加一句 export QT_IM_MODULE=xim就沒事了。順便說一下,scim其實(shí)是不錯(cuò)的輸入法,沖突是因?yàn)橹暗膅cc編譯器編譯出來的c++程序的ABI不統(tǒng)一(蘇大來看看這樣說對(duì)么),現(xiàn)在4.0出來不知道會(huì)不會(huì)有改觀。

2005.03.27
stardict部分作了點(diǎn)改動(dòng),不需要將esound加入default運(yùn)行級(jí)別

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

正文
本文試闡述在alsa環(huán)境下多個(gè)進(jìn)程共享聲卡的問題以及具體如何通過alsa讓skype和其他程序同時(shí)使用聲卡。本文可以看作是筆者的個(gè)人經(jīng)驗(yàn)介紹。同時(shí)有些信息翻譯自一些英文資料。筆者的聲卡是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ū)動(dòng)的問題,請(qǐng)參閱其他資料。實(shí)現(xiàn)多音頻還可以使用http://www.opensound.com的商業(yè)驅(qū)動(dòng)。不過是close-sourced,以前還是要收錢的,F(xiàn)在雖然個(gè)人使用已經(jīng)免費(fèi)(free)了,但總歸是不自由(free)的。好了,閑話少敘,我們來切入正題。

先來看一看一些背景知識(shí)

首先要了解Linux有兩種不同的聲音系統(tǒng)
OSS (Open Sound System) 舊的.對(duì)于44100 Hz, 立體聲(stereo), 16-bit 音頻與一般的聲卡及要求它可以工作的很好. 但不足以勝任專業(yè)級(jí)的音頻處理工作。 很多舊的軟件都只能使用OSS。 OSS系統(tǒng)中通常有下列設(shè)備文件/dev/audio /dev/dsp /dev/midi /dev/mixer /dev/music /dev/sequencer等等
ALSA (Advanced Linux Sound Architecture)新的。對(duì)于很多舊的聲卡支持的不是很好,但是支持很多新的聲卡以及很多高級(jí)的專業(yè)的功能,而且具備很強(qiáng)擴(kuò)展性?蓞⒁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模擬層,也會(huì)有/dev/dsp等文件。

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

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

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

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

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

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

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

下面來看具體該怎么樣做
首先要有一個(gè)合理配置的.asoundrc,這個(gè)是筆者的
代碼:
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ā)表評(píng)論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

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

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

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