Audio

帶藍牙音箱的mpd沒有聲音

  • May 9, 2019

我的環境有兩個音頻輸出:HDMI 和藍牙揚聲器。通常它們都可以正常工作。例如,

#this plays sound via bluetooth speaker
$ aplay -D default jingle.wav

#this plays sound via HDMI
$ aplay -D plughw:1,7 jingle.wav

但是,mpc play不播放任何聲音。My/etc/mpd.conf是預設的,除了音樂目錄。所以

music_directory     "smb://xxx.xxx.xx.x/some_directory"
...
audio_output {
   type        "alsa"
   name        "My ALSA Device"
   #   device      "hw:0,0"    # optional
   #   mixer_type      "hardware"      # optional
   #   mixer_device    "default"   # optional
   #   mixer_control   "PCM"       # optional
   #   mixer_index "0"     # optional
}

我使用遠端音樂目錄(smb協議)並且連接正常。根據,欄位man mpd.conf的預設值為。但是沒有聲音,雖然我希望它通過藍牙揚聲器播放,如上面的命令。說device``"default"``mpc play``aplay -D default``sudo mpd --no-daemon --stderr

exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted
avahi: Service 'Music Player' successfully established.
client: [0] opened from xxx.x.x.x:xxxxx
No protocol specified
xcb_connection_has_error() returned true
No protocol specified
No protocol specified
xcb_connection_has_error() returned true
exception: Failed to read mixer for 'My ALSA Device': no such mixer control: PCM

最後一行可能是原因,所以我將mixer_type欄位設置為"none". 但是還是沒有聲音。mpc play成功和目前位置(例如00:56/3:20 (58%))進展但沒有聲音。

如何使用我的藍牙音箱?如果我設置deviceplughw:1,7mpc play實際上是通過 HDMI 播放聲音,如aplay上面的命令。但是,我想使用藍牙揚聲器。

環境:

$ lsb_relase -d
Description:    Linux Mint 19 Tara

$ mpd --version
Music Player Daemon 0.20.18

mpd通過sudo apt install mpd.

Music Player Daemon/Tips and tricks - PulseAudio完美地解決了這個問題。帶有pulseaudio的MPD也很有幫助。

該網站實際上就足夠了,但讓我寫下我所做的。首先,我確實將device欄位設置/etc/mpd.conf"alsa"但這是錯誤的。預設情況下,藍牙揚聲器不是由管理,alsa而是由pulseaudio(至少在 Linux Mint 上,儘管您可以通過alsa使案例如使用藍牙揚聲器BlueALSA)。所以該欄位的值應該是"pulse"。但是,預設情況下,在系統範圍pulseaudio內執行時在使用者空間中mpd執行。因此mpd無法訪問目前使用者pulseaudio會話的設置。要mpd查看設置,您可以打開pulseaudio的遠端功能:

sudo cp /etc/pulse/default.pa /etc/pulse/default.pa.bak
sudo vi /etc/pulse/default.pa

並改變線

#load-module module-native-protocol-tcp

對此(取消註釋並添加一些單詞)

load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1

並重新啟動pulseaudio以反映此更改。

#Note there is no `sudo` prefix.
#As written above, `pulseaudio` runs in a user session.
pulseaudio --kill
pulseaudio --start

現在您可以pulseaudio使用tcp協議和通過 ip 地址127.0.0.1(通常是localhost)訪問 。最後,mpd應該更改 的設置:

sudo cp /etc/mpd.conf /etc/mpd.conf.bak
sudo vi /etc/mpd.conf

並設置audio_output欄位的值如下

audio_output {
   type        "pulse"
   name        "arbitrary_name_which_you_like"
   server      "localhost"
}

並重新啟動mpd以反映更改。

#Note there is `sudo` prefix.
sudo systemctl restart mpd

就這樣。


補充:

順便說一句,aplay -D default jingle.wav成功但mpc play沒有成功的事實來自執行空間的差異,即在系統範圍內執行或作為使用者會話執行。所以比較結果是沒有意義的。我應該mpc play比較sudo -u mpd aplay -D default jingle.wav。後一個命令失敗,這是預期的結果。

引用自:https://unix.stackexchange.com/questions/517793