简单解释
如果 mpd 正在播放并且声音尝试通过另一个应用程序播放,X,声音来自X将不会被输出。
如果来自其他应用程序的声音,X正在播放,然后 mpd 尝试播放,mpd 不会输出任何声音,而X继续播放。
细节
我第一次注意到这个问题是在 Flash 中,这仍然是最常见的情况。我发布了有关此问题的问题后来才意识到它并不是严格意义上的 Flash 相关,而是与 mpd 有关。
我最大的挫败来自于尝试让 mpd 重新工作,因为我似乎无法确定任何方法。有时pulseaudio -k
似乎有帮助,有时sudo /etc/init.d/mpd restart
,有时用 杀死 Chromium(由于 Flash)SIGTERM
。大多数时候是上述方法的组合。
我认为这可能是因为我以另一个用户身份运行 mpd 并使用 pulseaudio。它不是以 root 或当前用户身份运行的。此外,mpd 是在 pulse 支持下编译的。
我尝试了很多方法,但说实话我记不清具体是什么方法了,因为时间已经过去很久了。我不想在没有方向的情况下到处摸索,但我真的很乐意一劳永逸地解决这个问题。
mpd配置文件
通过删除注释/空行来简化。
music_directory "/var/lib/mpd/music"
playlist_directory "/var/lib/mpd/playlists"
db_file "/var/lib/mpd/tag_cache"
log_file "/var/log/mpd/mpd.log"
pid_file "/var/run/mpd/pid"
state_file "/var/lib/mpd/state"
user "mpd"
bind_to_address "wilson"
input {
plugin "curl"
}
audio_output {
type "pulse"
name "My Pulse Output"
}
filesystem_charset "UTF-8"
id3v1_encoding "UTF-8"
问题
为了保持这个问题的本质:有人知道是什么原因造成的,或者如何在不以当前用户身份运行 mpd 的情况下修复它?
答案1
当我第一次开始使用 mpd 时我就遇到了这个问题,但那已经是很久以前的事了,所以我记不清我是如何解决这个问题的!
您是否安装了 PulseAudio 偏好设置?我在论坛上找到了这个提示:
sudo apt-get install paprefs
然后从菜单中打开 PulseAudio 首选项:System->Preferences->PulseAudio Preferences 单击网络服务器选项卡,然后选中“启用对本地声音设备的网络访问”框,最后选中“不需要身份验证”框。之后,重新启动 mpd:sudo /etc/init.d/mpd restart
但是...我刚刚意识到 mpd 对我来说工作正常并且我没有启用“网络访问本地声音设备”。
我认为您可能是对的,需要以当前用户身份运行 mpd,这就是我正在做的。(但我不知道为什么会这样!)
您可以在此处找到有关设置 mpd 以作为用户运行的简单指南: http://gmpc.wikia.com/wiki/MPD_INSTALL_USER_SERVICE_UBUNTU
总而言之,由于您已经安装了 mpd:
1.)停止:sudo update-rc.d mpd disable
2.) 将您的 mpdconf 复制到您的主目录(作为 .mpdconf),并将以下条目更改为您的用户可以访问和写入的位置:
music_directory playlist_directory db_file log_file error_file pid_file state_file
我从中获取此信息的页面建议只在您的主目录中为这些内容创建一个 .mpd 文件夹,以保存您的实际音乐目录。
3.) 注释掉.mpdconf 中的用户行:
#user "mpd"
4.) 现在您可以运行 mpd 并更新数据库。
5.) 为了使 mpd 在登录时作为用户自动启动,请转到启动应用程序并为 mpd 添加一个条目,然后在 ~/.config/autostart/ 中创建一个自动启动文件。
[Desktop Entry] Type=Application Exec=mpd Hidden=false NoDisplay=false Terminal=false X-GNOME-Autostart-enabled=true Name[en_US]=Music Player Daemon Name=Music Player Daemon Comment[en_US]=plays the music Comment=plays the music
以用户身份运行可能存在缺点,因此也许这不适合您的需要。
答案2
不确定这是否是完全相同的问题,但使用我旧的默认 mpd 设置,我认为 mpd 试图以不同的用户(mpd 用户)启动自己的脉冲音频。我发现在/etc/mpd.conf使用套接字连接更简单,可以避免此类问题。
audio_output {
type "pulse"
name "My Pulse Output"
server "localhost"
}
那么你可能需要检查一下帕普雷夫您接受本地连接
答案3
当按照 wiki 说明以自己的用户身份运行时,mpd 将无法将声音发送到其他用户的 pulseaudio 服务器。您不必将 pulseaudio 设置为系统范围的守护进程(这是上游强烈反对的做法),而是可以配置 mpd 以使用 pulseaudio 的 tcp 模块将声音发送到本地主机:
首先,取消注释 /etc/pulse/default.pa 或 $XDG_CONFIG_HOME/pulse/default.pa(通常为 ~/.config/pulse/default.pa)中的 tcp 模块,并将 127.0.0.1 设置为允许的 IP 地址;主目录优先:
### Network access (may be configured with paprefs, so leave this commented
### here if you plan to use paprefs)
#load-module module-esound-protocol-tcp
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1
#load-module module-zeroconf-publish
可以使用 ; 作为分隔符添加 cidr 表示法中的其他 IP 范围。完成后,重新启动 pulseaudio:
$ pulseaudio --kill
$ pulseaudio --start -or- start-pulseaudio-x11/kde
接下来,编辑 /etc/mpd.conf 并添加一个指向 127.0.0.1 作为“远程”服务器的新脉冲输出:
audio_output {
type "pulse"
name "Local Music Player Daemon"
server "127.0.0.1"
}
从https://wiki.archlinux.org/index.php/Music_Player_Daemon/Tips_and_tricks