星期五, 6月 08, 2007

---------From Moto http://moto.debian.org.tw/viewtopic.php?t=11377-----------
pulseaudio可以輸出到常用的alsa oss 驅動的裝置,esound server,遠端電腦(rtp),或甚至是windows 的waveout驅動.

可以接收來自
1.有支援pulseaudio的程式(xine,bmpx,audacious等等)
2.透過alsa-lib的plugin讓所有支援alsa的程式使用pulseaudio
3.支援esd的程式..pulseaudio可以完全取代esd
4.OSS模擬 (像是aoss一樣,可以給java發出聲音)
其他其他...
大概分享一下我在我電腦上使用pulseaudio的安裝方法
apt-get install pulseaudio pulseaudio-module-x11 paman pavucontrol pulseaudio-esound-compat pulseaudio-utils
module-x11 讓x11發出的警告beep聲音透過pulseaudio發出,像是..命令列已經沒有東西了又按backspace就會逼..vi裡面亂按也會..
paman pulseaudio manager可以讓你看目前server的狀態,所有的input/output
pavucontrol 音量控制,這個一定要裝,可以控制個別程式的音量

修改 /etc/pulse/default.pa
輸出輸入
### Load audio drivers statically
load-module module-alsa-sink device=dmix
load-module module-alsa-source device=plughw:1,0
輸出到alsa的dmix裝置,
從硬體1,0來錄音,你也可以設定成dsnoop

其實,修改到這樣子就可以用了...
不過我還加了esd的功能..
load-module module-esound-protocol-tcp auth-ip-acl=10.11.12.13;192.168.50.0/24;127.0.0.0/8
load-module module-esound-protocol-unix
讓那些ip可以透過tcp把聲音送到本機,或是也可以用unix socket

恩...就先這樣,執行pulseaudio之前.要先建立esd socket,不然,本機也會用tcp連線
mkdir -p /tmp/.esd
chmod 1777 /tmp/.esd
touch /tmp/.esd/socket
chmod 777 /tmp/.esd/socket
執行看看
pulseaudio --verbose
Note: 1. mplayer設定成pulse輸出的話,會crash. 改用esd輸出。
To support audio of Flash:
pulseaudio.revolutionlinux.com



3 則留言:

匿名 提到...

我想問一下pulseaudio可以由使用者控制音效卡來決定現在聲音是由內建喇叭輸出或是耳機輸出或是兩者都有輸出呢?? 謝謝

Kim Lai 提到...

這程式的主用途不是在切換實體的聲音輸出裝置喔 你問的東西應該是在更下層的driver控制的.

匿名 提到...

你好 謝謝你的問答 我想再請教一個問題
我最近在用藍芽耳機A2DP聽音樂
播放器是用banshee的,我有用一個按鈕就是可以切換藍芽耳機與電腦內建喇叭的功能
主要就是用執行一個script

#!/bin/bash

state=`gconftool --get /system/gstreamer/0.10/default/musicaudiosink | cut -d\ -f1`

if [ $state == "autoaudiosink" ]; then
gconftool --type string --set /system/gstreamer/0.10/default/musicaudiosink "alsasink device=bluetooth"
zenity --info --title="GStreamer" --text="Switched to Bluetooth headphones."
else
gconftool --type string --set /system/gstreamer/0.10/default/musicaudiosink "autoaudiosink"
zenity --info --title="GStreamer" --text="Switched to speaker output."
fi

echo musicaudiosink set to `gconftool --get /system/gstreamer/0.10/default/musicaudiosink`

但這個功能沒有辦法即使切換,要它繼續播到下一首歌或是我重新按播放的功能才會切換到另一個輸出
所以我研究過audio的架構:
■Audio

----------------------------------------------------------
│Application │
│ Banshee Amarok │
│ ↓ │
----------------------------------------------------------
│Desktop Environment │
│ ↓ ↓ ↓ │
│ GNOME KDE XFCE │
│ │
--------------------------DBus----------------------------
│ │
---------------------------------------------------------- GStreamer framework解碼器
│Sound Server │
│ ↓ ↓ │
│ ↓ ↓ │
│ ESD aRTs PulseAudio│
----------------------------------------------------------
│Kernel │
│ ↓ │
│ ALSA driver │
----------------------------------------------------------
│Hardware │
│ ↓ │
│ Soundcard │
----------------------------------------------------------
是否是我只控制到Gstreamer解碼器這邊的部份,如果要做到即時的話,是否說要控制到kernel那部份
才可以達到即時切換的功能,謝謝
有辦法說只用指令的方式控制到kernel(ALSA)那部份嗎??