• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • Linux下實現多音頻

    發表于:2007-05-26來源:作者:點擊數: 標簽:
    來自Sir上的一篇文章,原文在 這里 [原創][多音頻流完整 解決方案 ]讓你在Skype的時候看電影,聽歌,看flash....... 作者:張樂, a.k.a zhllg 本文試闡述在alsa環境下多個進程共享聲卡的問題以及具體如何通過alsa讓skype和其他程序同時使用聲卡。本文可以看
    來自Sir上的一篇文章,原文在這里


    [原創][多音頻流完整解決方案]讓你在Skype的時候看電影,聽歌,看flash.......


    作者:張樂, a.k.a zhllg
    本文試闡述在alsa環境下多個進程共享聲卡的問題以及具體如何通過alsa讓skype和其他程序同時使用聲卡。本文可以看作是筆者的個人經驗介紹。同時有些信息翻譯自一些英文資料。筆者的聲卡是AC'97(intel8x0),系統是gentoo,
    內核2.6.11-nitro0, KDE3.4(split ebuild,arts-3.4.0),alsa-driver, alsa-utils, alsa-oss均為1.0.8,skype是www.skype.com上下載的static binary with Qt 3.2 compiled in(因為非static的版本在筆者的系統中總是segfault。這個稍微大一點,只有Qt的共享庫是靜態編譯的),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驅動的問題,請參閱其他資料。實現多音頻還可以使用http: //www.opensound.com/的商業驅動。不過是close-sourced,以前還是要收錢的?,F在雖然個人使用已經免費(free)了, 但總歸是不自由(free)的。好了,閑話少敘,我們來切入正題。

    先來看一看一些背景知識

    首先要了解Linux有兩種不同的聲音系統
    * OSS (Open Sound System) 舊的.對于44100 Hz, 立體聲(stereo), 16-bit 音頻與一般的聲卡及要求它可以工作的很好. 但不足以勝任專業級的音頻處理工作。 很多舊的軟件都只能使用OSS。 OSS系統中通常有下列設備文件/dev/audio /dev/dsp /dev/midi /dev/mixer /dev/music /dev/sequencer等等

    * ALSA (Advanced Linux Sound Architecture)新的。對于很多舊的聲卡支持的不是很好,但是支持很多新的聲卡以及很多高級的專業的功能,而且具備很強擴展性??蓞⒁?a target="_blank">http://www.alsa-project.org/alsa-do...cm_plugins.html?,F在已經是2.6內核的一部分。ALSA音頻系統的設備文件在/dev/snd下。如果裝了ALSA oss模擬層,也會有/dev/dsp等文件。

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

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

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

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

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

    小結:上面Linux的程序不能截然分成上面三類,因為很多程序都可以選擇輸出插件,比如xmms。還有,程序能否共享聲卡,跟程序本身有很大關系,要看它采用什么樣的手段輸出。最好的程序就是可以直接使用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
    }

    pcm.!dmix, pcm.!dsnoop, pcm.!default是分別重新定義dmix,dsnoop插件,以及default設備,目的是為了使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
    代碼:
    #!/bin/sh
    aoss /opt/RealPlayer/realplay "$@"

    注:gentoo里二進制包的軟件,都放在/opt里,不是所有的系統都這么處理。所以不要照抄這一段

    firefox(flash plugin): 與上面類似,腳本內容為,存為/usr/bin/firefox
    代碼:
    #!/bin/sh
    aoss /usr/libexec/firefox "$@"

    注:這只是為了flash插件,mplayer插件上面設置完就可以使用dmix了

    stardict:稍微麻煩一點,他使用esound(esd)。所以如果讀者使用gentoo的話要先USE=“alsa" emerge media-sound/esound,然后rc-update add esound default
    然后修改/etc/esd/esd.conf,在spawn_options最后加上-d default
    代碼:
    [esd]
    auto_spawn=1
    spawn_options=-terminate -nobeeps -as 2 -d default
    spawn_wait_ms=100

    注:stardict在剛開機的時候不行,關掉stardict再開己可以了,只需要一次。

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

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


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

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

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>