Linux上的MPC/MPD:如何播放本地WAV文件

4

我想通过 mpc 将本地文件添加到 mpd 并播放它。我的平台是 OpenWRT 嵌入式 Linux。

因此,根据手册,它说明:

mpc add <file>   Add a song to the current playlist

如果我执行:

root@OpenWrt:~/.mpd# mpc add /usr/share/baresip/ring.wav 
error adding /usr/share/baresip/ring.wav: directory or file not found

或者如果我执行以下操作:
root@OpenWrt:~/.mpd# mpc add file:///usr/share/baresip/ring.wav 
error adding file:///usr/share/baresip/ring.wav: Access denied

这里到底应该使用正确的语法是什么?mpc/mpd的手册真的不太清楚。


看看这个帖子:http://ubuntuforums.org/showthread.php?t=2105007 它说了些关于更新数据库的事情...? - ophintor
2个回答

10

你的第二次尝试就快成功了。问题在于,mpd 只允许通过本地连接传递 file: URL,并通过要求您连接其 Unix 域套接字 来执行此操作。因此,在你的mpd.conf中,需要有这样一行:

bind_to_address     "/run/mpd/socket"
< p >(根据您的系统,您可能需要将< code >/ run 更改为< code >/ var / run - 我引用的版本适用于最近版本的Debian或Ubuntu,但其他版本可能不同)。

然后,您需要设置您的环境以指向该套接字:

export MPD_HOST=/run/mpd/socket

当您执行此操作时,mpc addmpc insert 可以成功接受一个 file: URL:

$ mpc insert "file:///data/incoming/files/111_scorpions_-_the_zoo.mp3"
$ mpc next
Scorpions - The Zoo
[playing] #23/39   0:00/5:30 (0%)
volume: n/a   repeat: off   random: off   single: off   consume: off
$

在通过brew安装了mpd的Mac上,我无法在典型的/private/var/run位置或系统中的任何其他位置查找Unix套接字。我应该考虑自己生成一个Unix套接字吗? - Sviatoslav Zalishchuk
1
@SviatoslavZalishchuk - 是的;如果没有mpd.conf文件(据我所知,'brew'的安装脚本不会生成该文件),它将默认不生成Unix套接字;您需要创建一个配置文件并告诉它在哪里放置套接字。 - Jules
感谢您的及时回复。顺便问一下,有没有办法从shell中生成它?还是只能通过C/Python等系统层来完成? - Sviatoslav Zalishchuk
1
通过适当的配置文件(请参见 https://github.com/andrewrk/mpd/blob/master/doc/mpdconf.example 以获取一个示例文件,并查看 man mpd.conf 获取文档),mpd 将自行创建套接字。 - Jules
是的,确实如此。以前当我尝试将其写入 /private/var/run/mpd.socket 时,由于权限不足而失败,但却给出了“连接被拒绝”的错误信息。我已经配置好将套接字写入用户的主目录中,并在我的 .bashrc 中设置了 MPD_HOST 和 MPD_PORT 变量以便能够被 mpc 捕捉并在 ncmpcpp 中引用。现在一切都井然有序,ncmpcpp 管理着播放列表,我还使用“mpc insert "/path/" && mpc next”技巧将 ranger 配置为默认使用 mpc 打开音频 mime 类型文件。谢谢你,Jules! - Sviatoslav Zalishchuk

4
我没有找到如何播放wav文件的方法,但我忘记了我找到了解决方案(适用于mp3),并在这里发布了帖子:https://forum.openwrt.org/viewtopic.php?id=41022 然而,由于stackoverflow总是在谷歌搜索中排名靠前,我将相同的解决方案粘贴在这里,以防有人需要:
/etc/mpd.conf 应该大致如下:
music_directory        "/tmp"
playlist_directory        "~/.mpd/playlists"
db_file            "~/.mpd/database"
log_file            "/tmp/mpdlog"
pid_file            "~/.mpd/pid"
state_file            "~/.mpd/state"
sticker_file            "~/.mpd/sticker.sql"

user                "root"
group                "root"
bind_to_address "127.0.0.1"


log_level            "verbose"
auto_update    "yes"
auto_update_depth "3"
follow_outside_symlinks    "yes"
follow_inside_symlinks        "yes"

然后执行以下操作:

  1. /etc/init.d/mpd restart(重启mpd服务)
  2. 将MP3文件复制到 /tmp 文件夹中(wav文件似乎不可行,因为音乐目录为/tmp文件夹)
  3. 执行 mpc update 命令
  4. 执行 mpc add file.mp3 命令(添加 /tmp/file.mp3 将无法正常工作)
  5. 执行 mpc play 命令

2
wjy音乐目录设置为/tmp? - realtebo
1
@realtebo 这是在 carambola 开发板上运行的(http://www.8devices.com/carambola),它有大量的闪存,但很少的 ROM 存储器。因此,我将音乐文件保存在 /tmp 目录中,并在播放之前重新下载它们。 - Shrouk Khan
1
复制文件只是为了播放它可能是一个解决方法,但这不是一个解决方案。我的文件分散在各个地方,由不同的用户使用。 - Nikodemus RIP
1
对@Nikodemus的评论点赞。我知道mpd 可以播放任意文件,因为你可以通过ncmpncpp让它这样做,但像OP一样,我正在寻找一种命令行方式来完成它,而不是一个TUI程序。 - Jules

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接