จะทำให้ PulseAudio ทำงานได้อย่างไร


28

ฉันต้องการใช้ Raspberry Pi ของฉันเป็นอ่างเก็บ PulseAudio ที่สามารถเล่นเสียงผ่านเครือข่าย

สำหรับผู้เริ่มต้นฉันต้องการให้ Pulseaudio ทำงานในพื้นที่และพบข้อผิดพลาดต่างๆ ฉันใช้ภาพ Debian ที่แนะนำ

ขั้นตอนที่ดีที่สุดในการเปิดใช้ PulseAudio คืออะไร


นี่คือสิ่งที่ฉันได้ลองมาแล้ว:

ขั้นตอน

ขั้นตอนของฉันจนถึงตอนนี้ดูเหมือนสิ่งต่อไปนี้:

ติดตั้ง Pulseaudio และ VLC:

sudo apt-get install pulseaudio

กำหนดค่า GStreamer เพื่อใช้ pulseaudio sink:

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

โหลดโมดูลเคอร์เนลสำหรับอุปกรณ์เสียง

sudo modprobe snd_bcm2835

เรียกใช้ VLC ด้วย mp3

vlc 

ปัญหาที่เกิดขึ้น

VLC ร้าวซ้ำ ๆ แล้วพิมพ์ข้อผิดพลาดนี้:

[0x7503d0] alsa audio output error: cannot write: Broken pipe

คุณสามารถแสดงข้อผิดพลาดที่คุณได้รับ?
darryn.ten

คำตอบ:


9

ฉันได้มันทำงานกับ Raspberry Pi ของฉันโดยใช้อ่าง ALSA ด้วยขั้นตอนดังนี้

ในการติดตั้งไฟล์ที่จำเป็น:

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

วิธีเปิดใช้งาน ALSA:

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

ในการตั้งค่าเครือข่าย:

sudo nano /etc/pulse/default.pa

และยกเลิกหมายเหตุบรรทัด:

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

ในการเริ่มต้นเซิร์ฟเวอร์ pulseaudio ให้ใช้:

pulseaudio -D

คุณควรทดสอบว่าสามารถใช้งานได้โดยเล่นไฟล์ wav ด้วย paplay ( sudo apt-get install pulseaudio-utils) และผ่านเครือข่ายโดยเลือก sink ในแผงควบคุมระบบเสียงของคุณ

คุณอาจสามารถตั้งค่าในโหมดทั้งระบบด้วย:

sudo pulseaudio --system 

pulseaudio-module-zeroconfหายไปในส่วนการติดตั้ง apt-get ควรพูดถึงอาจจะยังpulseaudio --log-level=debugเพื่อแก้ไขปัญหาใด ๆ ในแหล่งกำเนิดเสียง (ไม่ใช่ราสเบอร์รี่ปี่) คุณควรเริ่มต้นpaprefsเพื่อดูภาพรวม pulseaudio conf ของคุณ (หากคุณมี X11) และอย่าลืมรีสตาร์ทpulseaudioเมื่อมีข้อสงสัย
vaab

7

หากคุณต้องการให้ pulseaudio เริ่มต้นระบบ แต่เป็นบริการระดับผู้ใช้คุณสามารถสร้างไฟล์ systemd unit ได้ สิ่งนี้อาจช่วยได้เนื่องจาก pulseaudio ไม่ต้องการทำงานในโหมดระบบ https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/SystemWide/

นี่คือบริการที่ฉันเขียนใน /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

Before = บอกให้รอจนกระทั่งหลังจาก sound.target เริ่มต้น BusName = เชื่อมต่อกับ D-Bus WantedBy = session.target เป็นค่าเริ่มต้นที่เป็นประโยชน์ แต่ฉันไม่รู้จริงๆว่ามันทำอะไร


เห็นได้ชัดว่าเราสามารถใส่สิ่งนี้ใน~/.config/systemd/user/pulseaudio.serviceและใช้ systemd กับ--userธงเพื่อหลีกเลี่ยงสิทธิ์พิเศษ
jchook

6

ฉันมีเวลายากมากที่จะได้ pulseaudio ที่ทำงานบน Wheezy raspbian (2012-10-28) โดยใช้เอาท์พุทแบบอะนาล็อก ต่อไปนี้เป็นสิ่งที่ฉันทำเพื่อให้มันทำงานในโหมดต่อเซสชัน (ไม่ใช่โหมดระบบ) โหมดของระบบอาจใช้งานได้เช่นกันฉันไม่ได้ลอง การตั้งค่าเซิร์ฟเวอร์จะต้องใช้งานมากกว่านี้ ฉันพบข้อมูลนี้ในที่ต่างๆหวังว่าการรวบรวมข้อมูลที่นี่จะช่วยให้ใครบางคน

ติดตั้ง pulseaudio และทำให้แน่ใจว่าผู้ใช้ (เช่น eric) เป็นส่วนหนึ่งของกลุ่มเสียง:

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

เปลี่ยน /etc/asound.conf มีลักษณะดังต่อไปนี้ นี่เป็นการตั้งค่า pulseaudio เพื่อใช้เป็นอุปกรณ์อัลซาโดยค่าเริ่มต้นดังนั้นแอปพลิเคชันจะใช้โดยไม่ต้องมีการกำหนดค่าเพิ่มเติมใด ๆ การประกาศสองครั้งแรก (รวมถึงการแสดงความคิดเห็น) อยู่ในไฟล์ต้นฉบับ

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 }

เพิ่มบรรทัดต่อไปนี้ใน /etc/pulse/daemon.conf:

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

trivialเป็นวิธีที่มีคุณภาพต่ำที่สุด แต่ใช้ซีพียูประมาณ 6% src-sinc-fastestใช้ได้กับฉันด้วย แต่ใช้ CPU ประมาณ 25% คนอื่นอาจทำงานได้เช่นกัน ต่อมาฉันไม่เข้าใจความต้องการ แต่ดูเหมือนว่ามันเป็นส่วนผสมที่มหัศจรรย์ คุณสามารถอ่านเพิ่มเติมได้ที่นี่

ในที่สุดเมื่อต้องการปิดเสียงป๊อประหว่างการเล่นเพลงให้ใส่เครื่องหมายบรรทัดนี้ใน /etc/pulse/default.pa ดังนี้:

#load-module module-suspend-on-idle

ยังคงมี dropouts บางอย่างเมื่อแหล่งที่มาสองแห่งเล่นพร้อมกันถ้าฉันค้นพบวิธีการรักษาที่ฉันจะเพิ่มในคำตอบนี้


เมื่อเล่นเสียงผ่านเครือข่าย PulseAudio ใช้ CPU ประมาณ 16% แม้แต่กับtrivialฉัน
นาธานออสมัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.