Jak uruchomić PulseAudio?

28

Chciałbym używać mojego Raspberry Pi jako zlewu PulseAudio, który może odtwarzać dźwięk przez sieć.

Na początek chcę, aby Pulseaudio działało lokalnie i napotkało różne błędy. Używam zalecanego obrazu Debiana.

Jaka jest najlepsza procedura uruchomienia PulseAudio?


Do tej pory próbowałem:

Procedura

Moja dotychczasowa procedura wyglądała mniej więcej tak:

Zainstaluj Pulseaudio i VLC:

sudo apt-get install pulseaudio

Skonfiguruj GStreamer do korzystania z zlewu pulseaudio:

gconftool-2 -t string --set /system/gstreamer/0.10/default/audiosink pulsesink

Załaduj moduł jądra dla urządzenia audio

sudo modprobe snd_bcm2835

Uruchom VLC z mp3

vlc 

Problemy

VLC pęka wielokrotnie, drukując ten błąd:

[0x7503d0] alsa audio output error: cannot write: Broken pipe
Bengt
źródło
Czy możesz pokazać błędy, które otrzymujesz?
darryn.ten

Odpowiedzi:

9

Mam go działa na moim Raspberry Pi przy użyciu zlewu ALSA, z następującą procedurą:

Aby zainstalować niezbędne pliki:

sudo apt-get install pulseaudio pulseaudio-module-zeroconf alsa-utils avahi-daemon

Aby włączyć ALSA:

sudo modprobe snd-bcm2835                      # load module for single boot
echo "snd-bcm2835" | sudo tee -a /etc/modules  # load module for persistance

Aby skonfigurować sieć:

sudo nano /etc/pulse/default.pa

i odkomentuj linie:

load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/16
load-module module-zeroconf-publish

Aby uruchomić serwer pulseaudio, użyj:

pulseaudio -D

Powinieneś być w stanie przetestować, czy to działa, odtwarzając plik wav za pomocą paplay ( sudo apt-get install pulseaudio-utils), a także przez sieć, wybierając zlew w panelu sterowania dźwiękiem systemu.

Możliwe jest również skonfigurowanie w trybie ogólnosystemowym za pomocą:

sudo pulseaudio --system 
Adam MW
źródło
pulseaudio-module-zeroconfbrakuje w części instalacyjnej apt-get. Powinien również wspomnieć pulseaudio --log-level=debugo rozwiązywaniu problemów. Na źródle dźwięku (nie na raspberry pi) powinieneś uruchomić, paprefsaby łatwo przejrzeć swoją pulseaudio conf (jeśli masz X11). I nie zapomnij uruchomić ponownie pulseaudiow razie wątpliwości.
vaab
7

Jeśli chcesz, aby pulseaudio uruchamiało się podczas rozruchu, ale jako usługa na poziomie użytkownika, możesz utworzyć plik jednostki systemowej. Może to pomóc, ponieważ pulseaudio nie woli działać w trybie systemowym. https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/SystemWide/

Oto usługa, którą napisałem w /etc/systemd/system/pulseaudio.service

[Unit]
Description=PulseAudio Sound System
Before=sound.target

[Service]
User=pi
BusName=org.pulseaudio.Server
ExecStart=/usr/bin/pulseaudio
Restart=always  

[Install]
WantedBy=session.target

Przed = każe poczekać, aż dźwięk się zainicjuje. BusName = łączy go z D-Bus WantedBy = session.target jest pomocnym domyślnym, ale tak naprawdę nie wiem, co robi.

półtony
źródło
Najwyraźniej możemy to włączyć ~/.config/systemd/user/pulseaudio.servicei użyć systemd z --userflagą, aby uniknąć uprawnień roota.
jchook
6

Trudno mi było uruchomić pulseaudio na Wheezy raspbian (2012-10-28) przy użyciu wyjścia analogowego. Oto, co zrobiłem, aby działało w trybie na sesję (nie w trybie systemowym). Tryb systemowy może również działać, nie próbowałem tego. Konfiguracja serwera będzie wymagała nieco więcej pracy. Znalazłem te informacje w różnych miejscach, mam nadzieję, że zebranie ich tutaj pomoże komuś.

Zainstaluj pulseaudio i upewnij się, że użytkownik (np. Eric) jest częścią grupy audio:

sudo apt-get install pulseaudio pulseaudio-utils
sudo adduser eric audio

Zmiana /etc/asound.conf wygląda następująco. Ustawia to domyślnie pulseaudio jako urządzenie alsa, więc aplikacje używają go bez dodatkowej konfiguracji. Pierwsze dwie deklaracje (w tym komentowana) znajdowały się w oryginalnym pliku.

pcm.mmap0 {
    type mmap_emul;
    slave {
      pcm "hw:0,0";
    }
}

#pcm.!default {
#  type plug;
#  slave {
#    pcm mmap0;
#  }
#}

pcm.pulse { type pulse }
ctl.pulse { type pulse }
pcm.!default { type pulse }
ctl.!default { type pulse }

Dodaj następujące wiersze do /etc/pulse/daemon.conf:

default-sample-rate = 48000
resample-method = trivial

trivialjest metodą o najniższej jakości, ale zużywa około 6% procesora. src-sinc-fastestrównież działało dla mnie, ale używaj około 25% procesora. Inni też mogą działać. Później nieco nie rozumiem potrzeby, ale wydawało się, że to magiczny składnik. Możesz przeczytać więcej na ten temat tutaj .

Na koniec, aby wyciszyć dźwięk pojawiający się między utworami, skomentuj ten wiersz w pliku /etc/pulse/default.pa w następujący sposób:

#load-module module-suspend-on-idle

Nadal występują pewne zaniechania, gdy odtwarzane są jednocześnie dwa źródła, jeśli znajdę lekarstwo na to, dodam do tej odpowiedzi.

ergosys
źródło
Podczas odtwarzania dźwięku przez sieć PulseAudio zużywało około 16% procesora, nawet trivialdla mnie.
Nathan Osman