学习了SchumyHao 的大作 黑群晖接有线音响做TTS ,把前几天买的一个自带DAC的USB小音箱在群晖上成功用起来了。非常爽。
可是原帖里使用的镜像是一个比较旧的版本且原作者好久没有上传了,本着有新版不用就不舒服的原则,开始琢磨自己构建镜像。
先交代一下:我用的是群晖,Audio Station已经可以完美使用这个小音箱。
看了下原作者在github上的repo,开始动手。
1. Dockerfile 文件,修改如下:
FROM alpine:latest
RUN set -xe \
&& apk add --no-cache mpd mpc ncmpc \
&& setcap -r /usr/bin/mpd
VOLUME /var/lib/mpd
EXPOSE 6600
CMD ["mpd", "--stdout", "--no-daemon"]
复制代码
然后以root权限执行:
docker build -t mpd:210621 .
复制代码
创建镜像文件。
2. 新建一个给mpd容器用的目录,我设置的是 /volume1/docker/mpd,在其中再新建一个子目录 run,以及以下两个文件:
docker-compose.yaml:
version: "3.8"
services:
mpd:
container_name: mpd
image: mpd:210621
network_mode: host
volumes:
- ./mpd.conf:/etc/mpd.conf
- ./run:/var/lib/mpd
devices:
- /dev/snd
restart: unless-stopped
复制代码
把run目录映射到docker里,比原来单独映射每个文件更科学,可以避免很多错误提示。
mpd.conf:
music_directory "/var/lib/mpd/music"
playlist_directory "/var/lib/mpd/playlists"
db_file "/var/lib/mpd/database"
log_file "/var/lib/mpd/mpd.log"
pid_file "/var/lib/mpd/mpd.pid"
state_file "/var/lib/mpd/state"
sticker_file "/var/lib/mpd/sticker.sql"
audio_output {
type "alsa"
name "MPDalsa"
device "hw:0,0"
mixer_type "software"
}
复制代码
然后进入到这个目录,继续以root权限执行:
docker-compose up -d
复制代码
容器就启动就绪了。最新版的 mpd,虽然用起来没啥区别,但感觉就是更爽。。。
剩下的和原帖没啥区别。
~~~~~~~~~~
一点小经验:
因mpd的工作机制,music和playlist目录有更新之后,必须用mpd客户端更新一次数据库,否则新增的文件是不认的。
在mpd容器新增终端,命令 /bin/ash,然后执行:`mpc update` 即可。
~~~~~~~~~~
仍有一个很大的遗憾:
群晖里是有PulseAudio的,但尝试让mpd使用没有成功。只好让 mpd 继续直接使用 alsa 设备。这么做的一个缺陷就是播放时独占硬件,无法与 Audio Station 和谐共处。
哪位大神知道怎么弄啊?