Pulseaudio kasutamine operatsioonisüsteemiga Debian Squeeze
Sissejuhatus
PulseAudio http://www.freedesktop.org/wiki/Software/PulseAudio on helisüsteem (ingl. k. sound system), mis võimaldab juhtida arvutiga heli salvestamist ja taasesitamist, ülidselt ruutida heli arvutis. Tundub, et 2012 aastal on PulseAudio kasutamine suhteliselt populaarne töökohaarvutites, paljud rakendused oskavad seda ühel või teisel viisil kasutada. Professionaalseks helitöötluseks on tõenäoliselt sobivamat tarkvara, nt JACK http://jackaudio.org/.
Reeglina PulseAudio ei tööta otseselt riitvaraga, vaid kasutab nt ALSA abi.
Tööpõhimõte
Väga tõenäoliselt toimub Debian Squeeze operatsioonisüsteemi heli kasutamine selliselt
- riistvaraga tegeleb ALSA
- kõige muuga, st heli ruutimisega erinevate sisendite, väljundite ja neid kasutavate programmide vahel tegeleb PulseAudio
Seejuures on täiesti nö normaalne, et ALSA kasutamiseks ettevalmistatud tarkvara pannakse suhtlema PulseAudioga, mis omakorda kasutab ALSA vahendeid riistvaraga suhtlemiseks.
- Source
- Sink
- Client
Nö normaalsel juhtumil peaks olema arvutil
- mikrofoni sisend
- line-in
- kõrvaklappide väljud
- line-out
ja saama neid tarkvaraliselt juhtida, nt valida, kas heli kostab kõrvaklappidest, line-outist või mõlemist.
Tarkvara paigaldamine
Debian Squeeze sisaldab PulseAudio v. 0.9.21 tarkvara, 2012 suvel sisaldab tulev Debian Wheeze PulseAudio v. 2.0.
# apt-get install pulseaudio vlc-plugin-pulse paman paprefs pavucontrol pavumeter
kus
- paman - PulseAudio Manager
- paprefs - PulseAudio Preferences
- pavucontrol - PulseAudio Control
- puvemeter - PulseAudio Volume
PulseAudio seadistamine ja käivitamine
UNIX audio gruppi ei tohi kuuluda kasutajaid
# grep audio /etc/group audio:x:29:
PulseAudio tööd juhivad seadistusfailid
# ls -l /etc/pulse/* -rw-r--r-- 1 root root 1184 Jul 29 2010 /etc/pulse/client.conf -rw-r--r-- 1 root root 2134 Jul 29 2010 /etc/pulse/daemon.conf -rw-r--r-- 1 root root 4781 Feb 13 14:28 /etc/pulse/default.pa -rw-r--r-- 1 root root 1978 Jul 29 2010 /etc/pulse/system.pa
kus võib olla oluline kasutada failis /etc/pulse/default.pa ridu
load-module module-alsa-sink device=hw:0 load-module module-alsa-source device=hw:0,0
Seejärel muuta ALSA seadistusfail nt selliseks
# cat /etc/asound.conf pcm.pulse { type pulse } ctl.pulse { type pulse } pcm.!default { type pulse # If defaults.namehint.showall is set to off in alsa.conf, then this is # necessary to make this pcm show up in the list returned by # snd_device_name_hint or aplay -L hint.description "Default Audio Device" } ctl.!default { type pulse }
PulseAudio seadisusfailis kasutamine
# cat /etc/default/pulseaudio PULSEAUDIO_SYSTEM_START=0 DISALLOW_MODULE_LOADING=0
Käivitamine
Käivitamine toimub skriptiga, mida tavaliselt ei ole vaja teha
# /etc/init.d/pulseaudio start|stop
Peale kasutaja GNOME keskkonda sisselogimist käivitatakse automaatselt sellised protsessid
# ps aux | grep pulse imre 8141 1.3 0.1 317176 7912 ? Ssl 14:31 0:51 /usr/bin/pulseaudio --start --log-target=syslog imre 8144 0.0 0.0 105748 3640 ? S 14:31 0:00 /usr/lib/pulseaudio/pulse/gconf-helper
ning kuulatakse sellistel soketitel
# netstat -anp | grep pul tcp 0 0 0.0.0.0:16001 0.0.0.0:* LISTEN 8141/pulseaudio tcp 0 0 0.0.0.0:4713 0.0.0.0:* LISTEN 8141/pulseaudio tcp6 0 0 :::16001 :::* LISTEN 8141/pulseaudio tcp6 0 0 :::4713 :::* LISTEN 8141/pulseaudio
GNOME Configuration Editor, avada
/desktop/gnome/sound
Testimine
$ aplay -Dpulse /usr/share/skype/sounds/CallRingingIn.wav Playing WAVE '/usr/share/skype/sounds/CallRingingIn.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono
Pulseaudio kasutamine levinud programmidega
Iceweasel
Üks võimalus seadistada Iceweasel brauser kasutama PulseAudiot on läbi padsp wrapperi
# cat /etc/iceweasel/iceweaselrc ICEWEASEL_DSP="padsp"
VLC
Debian Squeeze sisaldab VLC v. 1.1.3, millel veel ei ole PulseAudio tuge, seepärast sobib teda kasutada nt läbi padsp wrapperi
$ padsp vlc -v v4l2:///dev/video0:width=720:height=576 --input-slave oss:///dev/dsp
Skype
TODO
mpg123
TODO
LiVES
TODO
PulseAudio töö kontrollimine
PulseAudio Volume Control
PulseAudio Volume Control võimaldab kontrollida erinevaid heli sisended ja väljundeid, samuti tegevusi (salvestamine ja mängimine). Tihtipeale on tänapäeval arvutis mitu nö helikaarti või muu hulgas heliga tegelevat seadet, pealegi väidetavalt on PulseAudio eelis muude lahenduste ees need ära hallata.
- videokaardiga seotud heli osa
- onboard helikaart
- laienduskaardi kujul helikaart
- veebikaamera
Erinevate kaartide ja nende peale olevate ressursside kontrollimine toimub valikus Configuration
kus
- esimene Built-in Audio vastab videokaardi HDMI osale
- teine Built-in Audio vastab onboard helikaardile
- WebCam C310 on veebikaamera
- antud juhul on selguse mõttes kõik va onboard helikaart välja lülitatud
Playback valik näitab, millised programmid parasjagu mängivad
kus
- VLC media player
- Movie browser plugin
- ALSA plug-in [mpg123.bin]
Erinevate helikaartide sisendseadmed asuvad Input Devices jaotuses, allolev pilt vastab juhtumile, kus Configuration all on ka webcam sisse lülitatud olekus, et pilt toredam tuleks
kus
- Built-in Audio Analog Stereo seadmel on kolm võimalikku sisendit (porti), esipaneeli mikrofon, tagapaneeli mikrofon ning line in, tundub, et plugged in ja unplugged täpsustused sulgudes vastavad tegelikkusele
- webcam puhul on ainult üks sisend port
- kõige all on öeldud, et esitada tuleb vaid riistvaralisi sisendseadmeid
Erinevate helikaartide väljundseadmed asuvad Output Devices jaotuses
kus
- Built-in Audio Analog Stereo seadmel on neli väljundit
- tundub, et plugged in ja unplugged vastavad tegelikkusele
Salvestamise sakk, seal on parasjagu salvestavad rakendused
PulseAudio Manager
Avades on näha parasjagu Pulset kasutavad rakendused
PulseAudio Manager -> Clients
kus
- ConsoleKit Session
- GNOME Volume Control Applet
- Movie browser plugin
- PulseAudio Volume Control
- PulseAudio Manager
- VLC media player
- ALSA plug-in [mpg123.bin]
- PulseAudio utiliit pamcd võimaldab juhtida käsurealt, nt käsk stat
$ pacmd Welcome to PulseAudio! Use "help" for usage information. >>> stat Memory blocks currently allocated: 1, size: 63.9 KiB. Memory blocks allocated during the whole lifetime: 2947307, size: 3.8 GiB. Memory blocks imported from other processes: 0, size: 0 B. Memory blocks exported to other processes: 0, size: 0 B. Total sample cache size: 0 B. Default sample spec: s16le 2ch 44100Hz Default channel map: front-left,front-right Default sink name: alsa_output.hw_0 Default source name: alsa_input.hw_0_0 Memory blocks of type POOL: 1 allocated/1729838 accumulated. Memory blocks of type POOL_EXTERNAL: 0 allocated/482520 accumulated. Memory blocks of type APPENDED: 0 allocated/0 accumulated. Memory blocks of type USER: 0 allocated/0 accumulated. Memory blocks of type FIXED: 0 allocated/1005234 accumulated. Memory blocks of type IMPORTED: 0 allocated/212235 accumulated.
PulseAudio serveri ettevalmistamine üle võrgu kasutamiseks
Ubuntu v. 13.10
Tõenäoliselt asjakohane ka Debianil, aga konkreetselt on nii tehtud Ubuntu v. 13.10 keskkonnas
# cat /etc/default/pulseaudio PULSEAUDIO_SYSTEM_START=1 DISALLOW_MODULE_LOADING=0
# cat /etc/pulse/default.pa ... ### Enable TCP and CLI load-module module-native-protocol-tcp port=1500 auth-anonymous=1 load-module module-cli-protocol-unix
# cat /etc/pulse/system.pa ... load-module module-position-event-sounds load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/16
# cat /etc/pulse/daemon.conf ... system-instance = yes
Probleemide avastamiseks võib olla abiks, kui pulseaudio ei käivitu süsteemi algkäivituse ajal automaatselt, selleks tuleks kaustada faili
# cat /etc/init/pulseaudio.override manual
Käsitsi deemoni juhtimine toimub nt initctl utiliidiga
# initctl start pulseaudio
Tundub, et Ubuntu 13.10 juures on midagi katki, et deemonit õnnestub startida vaid üks kord. Edaspidi ta ei allu initctl juhtimisele.
Lisaks, nn headless (st ilma X vms graafilise kasutajaliideseta) arvutis aitab heli omadusi seadistada nt alsamixer programm
- valida esmalt programmi haldusliidesest õige helikaart (F6 abil)
- valida TAB abil sobiv vaade (Playback jne)
- kontrollida erinevate väljundite helitugevust
- kontrollida erinevate sisendite tundlikkust
Ubuntu v. 14.04
Nn headless arvutis kasutamiseks tuleb paigaldada PulseAudio ja soovitavalt ALSA mixer tarkvara
# apt-get install pulseaudio alsa-utils
Seadistamine muus osas sarnaselt 13.10, kuid failis /etc/init/pulseaudio.conf kasutada ridu
env DISALLOW_MODULE_LOADING=0 env PULSEAUDIO_SYSTEM_START=1
Tundub, et korduv pulseaudio protsessi stop ja start 14.04 puhul töötab.
Kasulikud lisamaterjalid
- http://blog.dhampir.no/content/category/howto
- http://pleasanthacking.com/2010/11/28/linux-media-network/
- http://ubuntuforums.org/showthread.php?t=1083077
PulseAudio kliendi kasutamine üle võrgu
$ paplay -s 192.168.10.10 track01.cdda.wav
kus
- -s 192.168.10.10 - PulseAudio serveri ip aadress, vaikimisi kasutatakse andmevahetuseks 4713/tcp porti
Selleks, et saaks kasutada nt mpg123 programmi tuleb kasutada failis /etc/asound.conf
# cat /etc/asound.conf pcm.pulse { type pulse } ctl.pulse { type pulse } pcm.!default { type pulse # If defaults.namehint.showall is set to off in alsa.conf, then this is # necessary to make this pcm show up in the list returned by # snd_device_name_hint or aplay -L hint.description "Default Audio Device" } ctl.!default { type pulse }
ning failis /etc/pulse/client.conf rida, mis näitab PulseAudio serveri aadressi
# cat /etc/pulse/client.conf ... default-server = 192.168.10.10
Seejärel peaks töötama kliendis käsk ning olema kuulda heli PulseAudio serveriga ühendatud helisüsteemist
$ mpg123 mangimind.mp3
Tundub, et nö igal juhul on kliendi ja serveri vahel andmeliikluse maht ca 200 kBait/s.
Kasulikud lisamaterjalid
- http://blog.dhampir.no/content/category/howto
- http://pleasanthacking.com/2010/11/28/linux-media-network/
- http://ubuntuforums.org/showthread.php?t=1083077
pactl kasutamine
$ pactl list $ pactl load-sample lugu1.wav lugu1 $ pactl play-sample lugu1
Selleks, et moodulite laadimine toimuks automaatselt, sobib nt line-in ja out kokkuühendamiseks lisada /etc/pulse/defaults.pa faili
load-module module-loopback
Konsoolilt kasutamine
TODO
Skype kõne salvestamine
$ pactl load-module module-null-sink sink_name=pealtkuulaja $ pactl load-module module-loopback $ pactl load-module module-loopback
Kasulikud lisamaterjalid
parec kasutamine
Iga sink'iga kaasneb automaatselt nn monitor source, nt kui midagi mängitakse alsa_output.pci-0000_00_1b.0.analog-stereo abil, saab seda nt nii lindistada
$ parec -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor | sox -t raw -r 44k -sLb 16 -c 2 - /tmp/tere.wav
padsp kasutamine
padsp on wrapper, mis suunab nn legacy programmid pulseaudiot kasutama, nt
$ padsp vlc -v v4l2:///dev/video0:width=720:height=576 --input-slave oss:///dev/dsp
Line-in ja Line-out kokku-ühendamine
PulseAudio abil saab ühendada kokku arvuti line-in signaali line-out'i
$ pactl load-module module-null-sink sink_name=tvtime $ pactl load-module module-loopback sink=tvtime
Ning seejärel töötada Volume Control rakendusega.
Konkureerivad lahendused
OSS
Open Sound Sustem http://wiki.debian.org/OSS ...
ALSA
Advanced Linux Sound Arcitecture http://wiki.debian.org/ALSA ...
Märkused
- Kui PulseAudio töötab, siis tundub, et alati ei pruugi saada root kasutaja alsamixerit kasutada
# alsamixer ALSA lib pulse.c:243:(pulse_connect) PulseAudio: Unable to connect: Connection refused cannot open mixer: Connection refused
Aitab näidata õigem kaart, nt '-c 1' võtmega
kus
- F6 abil saab valida helikaardi
- Tab abil saab vaida Playback, Capture ja All vahel
- M abil toggleda Mute ja Unmute
Tundub, et AlsaMixerit sobib kasutada nii kasutajana kui root kasutajana.
Kui kasutatakse XFCE aknahaldurit, siis maksab Mixeri liidesest kontrollida Input Source'id, Front Mic, Rear Mic jne
2020 kasutamine
Server arvutis öelda
$ pactl load-module module-native-protocol-tcp auth-ip-acl="127.0.0.1;192.168.10.0/24"
Klient arvutis öelda
$ pactl load-module module-tunnel-sink "server=192.168.10.124 sink=alsa_output.pci-0000_00_0e.0.analog-stereo sink_name=valamunimi" $ pacmd set-default-sink valamunimi
Selleks, et serverisse ei tuleks esmalt kasutajana sisse logida, sobib tekitada fail
# cat /etc/systemd/system/pulseaudio.service [Unit] Description=PulseAudio Daemon [Install] WantedBy=multi-user.target [Service] Type=simple PrivateTmp=true ExecStart=/usr/bin/pulseaudio --system --realtime --disallow-exit --no-cpu-limit
ning öelda
# systemctl enable pulseaudio.service
ja lisada faili /etc/pulse/system.pa rida
load-module module-native-protocol-tcp auth-ip-acl="127.0.0.1;192.168.10.0/24"
ning muudatuste kehtestamiseks arvuti taaskäivitada.
2020 headless pulseaudio server
Headless pulseaudio serveri tekitamiseks sobib tavalisele Debian v. 10 operatsioonisüsteemile (kus ei ole desktop tarkvara, nt xfce4, paigaldatud) paigaldada pakett pulseaudio, seejuures paigaldatakse lisaks hulka sõltuvusi
# apt-get install pulseaudio
Muuta pulse kasutaja shell /etc/passwd failis /bin/bash selleks, et saaks pulse protsessiga töötada (eriti öelda unmute)
/usr/bin/no-login -> /bin/bash
Tekitada eelmises punktis kirjeldatud 'Klient arvutis öelda' osa ja muudatuste kehtestamiseks arvuti rebootida. Kasutamiseks tuleb öelda unmute
# su - pulse $ pactl set-sink-mute 0 toggle
ning lisaks saab uurida pulseaudio serveri omadusi, nt
$ pactl list sinks Sink #0 State: RUNNING Name: alsa_output.pci-0000_00_0e.0.analog-stereo Description: Built-in Audio Analog Stereo Driver: module-alsa-card.c Sample Specification: s16le 2ch 44100Hz Channel Map: front-left,front-right Owner Module: 4 Mute: no Volume: front-left: 63932 / 98% / -0.65 dB, front-right: 63932 / 98% / -0.65 dB balance 0.00 Base Volume: 65536 / 100% / 0.00 dB Monitor Source: alsa_output.pci-0000_00_0e.0.analog-stereo.monitor Latency: 23258 usec, configured 24988 usec Flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY Properties: alsa.resolution_bits = "16" device.api = "alsa" device.class = "sound" alsa.class = "generic" alsa.subclass = "generic-mix" alsa.name = "ALC887-VD Analog" alsa.id = "ALC887-VD Analog" alsa.subdevice = "0" alsa.subdevice_name = "subdevice #0" alsa.device = "0" alsa.card = "0" alsa.card_name = "HDA Intel PCH" alsa.long_card_name = "HDA Intel PCH at 0x91210000 irq 129" alsa.driver_name = "snd_hda_intel" device.bus_path = "pci-0000:00:0e.0" sysfs.path = "/devices/pci0000:00/0000:00:0e.0/sound/card0" device.bus = "pci" device.vendor.id = "8086" device.vendor.name = "Intel Corporation" device.product.id = "5a98" device.product.name = "Celeron N3350/Pentium N4200/Atom E3900 Series Audio Cluster" device.form_factor = "internal" device.string = "front:0" device.buffering.buffer_size = "352800" device.buffering.fragment_size = "176400" device.access_mode = "mmap+timer" device.profile.name = "analog-stereo" device.profile.description = "Analog Stereo" device.description = "Built-in Audio Analog Stereo" alsa.mixer_name = "Realtek ALC887-VD" alsa.components = "HDA:10ec0887,104386c7,00100302 HDA:8086280a,80860101,00100000" module-udev-detect.discovered = "1" device.icon_name = "audio-card-pci" Ports: analog-output-lineout: Line Out (priority: 9900, available) analog-output-headphones: Headphones (priority: 9000, not available) Active Port: analog-output-lineout Formats: pcm
kus
- Mute: no
- saab muuta heli valjust
$ pactl set-sink-volume 0 +3%
Kasulikud lisamaterjalid
- https://askubuntu.com/questions/151216/how-can-i-force-the-rediscovery-of-pulseaudio-virtual-sound-devices
- https://gavv.github.io/articles/pulseaudio-under-the-hood/