hanxi / xiaomusic

使用小爱音箱播放音乐,音乐使用 yt-dlp 下载。
https://github.com/hanxi/xiaomusic
MIT License
903 stars 89 forks source link

同一个docker支持几个型号的小爱 #65

Open jibwf opened 1 month ago

jibwf commented 1 month ago

家里好几个型号的小爱,可以用一个docker支持吗?现在好像只能开多个docker

hanxi commented 1 month ago

可以通过自己修改 dockerfile ,做一个支持启动同时多个的镜像来实现。

jibwf commented 1 month ago

可以通过自己修改 dockerfile ,做一个支持启动同时多个的镜像来实现。

能给一个例子吗?

hanxi commented 1 month ago

需要有一点制作docker镜像的基础,比如现在的是只启动了一个 python :

FROM python:3.10 AS builder
WORKDIR /app
COPY requirements.txt .
RUN python3 -m venv .venv && .venv/bin/pip install --no-cache-dir -r requirements.txt
COPY install_dependencies.sh .
RUN bash install_dependencies.sh

FROM python:3.10-slim

WORKDIR /app
COPY --from=builder /app/.venv /app/.venv
COPY --from=builder /app/ffmpeg /app/ffmpeg
COPY xiaomusic/ ./xiaomusic/
COPY xiaomusic.py .
ENV XDG_CONFIG_HOME=/config
ENV XIAOMUSIC_HOSTNAME=192.168.2.5
ENV XIAOMUSIC_PORT=8090
VOLUME /config
EXPOSE 8090
ENV PATH=/app/.venv/bin:$PATH
ENTRYPOINT [".venv/bin/python3","xiaomusic.py"]

可以改成启动多个 python 的:

FROM python:3.10 AS builder
WORKDIR /app
COPY requirements.txt .
RUN python3 -m venv .venv && .venv/bin/pip install --no-cache-dir -r requirements.txt
COPY install_dependencies.sh .
RUN bash install_dependencies.sh

FROM python:3.10-slim

WORKDIR /app
COPY --from=builder /app/.venv /app/.venv
COPY --from=builder /app/ffmpeg /app/ffmpeg
COPY xiaomusic/ ./xiaomusic/
COPY xiaomusic.py .
COPY entrypoint.sh .
ENV XDG_CONFIG_HOME=/config
ENV XIAOMUSIC_HOSTNAME=192.168.2.5
VOLUME /config
EXPOSE 8090
EXPOSE 8091
ENV PATH=/app/.venv/bin:$PATH
ENTRYPOINT ["bash","entrypoint.sh"]

然后就可以在 entrypoint.sh 里写多个启动命令:

XIAOMUSIC_PORT=8090 .venv/bin/python3 xiaomusic.py --hardware=L07A &
XIAOMUSIC_PORT=8091 .venv/bin/python3 xiaomusic.py --hardware=L07A

上面只是伪代码,没测试过的。有兴趣可以自己摸索下。

bonnyandsky commented 1 week ago

这个功能现在实现了么??我家里也有几个不同的小爱音响

hanxi commented 1 week ago

还没有呢

LeanFly commented 6 days ago

那这得改很多东西了

hanxi commented 6 days ago

预计会修改代码来实现,而不是新增端口。新增端口的方式无法做到同时播放。

LeanFly commented 6 days ago

感觉可能得改成使用配置文件的方式来处理了,多设备时用列表存储设备信息

hanxi commented 4 days ago

目前测试版本 main 包已经支持多设备,欢迎更新测试。直接在设置页面选择需要同时播放的设备,保存即可。

jibwf commented 2 days ago

勾选多设备后,任何一个小爱同学都无法监听到本地指令了。本地控制页面播放可以同时推送到两个小爱同学。

只够选任何单独的小爱同学都 [Uploading xiaomusic (1).txt…]() 没有问题。

jibwf commented 2 days ago

@hanxi 感谢大佬的快速更新

hanxi commented 2 days ago

@jibwf 你用的哪个版本呢?你的日志可以再上传一下吗?,下载不了。

jibwf commented 2 days ago

@jibwf 你用的哪个版本呢?你的日志可以再上传一下吗?,下载不了。

@hanxi 最新版0.1.97 xiaomusic (1).txt

jibwf commented 2 days ago

日志里那个时间点好像没有任何信息。 我已经重启过容器了,还是不行。

hanxi commented 2 days ago

日志里那个时间点好像没有任何信息。 我已经重启过容器了,还是不行。

我先看看哈,没有多个设备,不太好调试。

hanxi commented 2 days ago

我看出问题了,下个版本修复

hanxi commented 2 days ago

https://github.com/hanxi/xiaomusic/releases/tag/v0.1.98 新版本已出。

jibwf commented 2 days ago

@hanxi 0.1.99版本 对话记录没问题了,但是发现同一个指令,多个小爱音箱都会执行。理想状态是只有获取到指令的小爱执行。

jibwf commented 2 days ago

[xiaomusic (3).txt](https://github.com/user-attachments/files/16118673/xiaomusic.3.txt)

hanxi commented 2 days ago

确实没有考虑这个问题。目前的实现方案就是用来同时播放的。如果要做到语音分开播放,就还得同时搞定网页里播放的问题。后期考虑做一个分组功能,把分在一组的设备一起控制。

hanxi commented 11 hours ago

多设备单独播放功能设计

分组功能

为设备设计分组功能,可以把一个或者多个设备加入到一个分组,一个分组内的设备会被控制同时播放。设备的音量需要支持独立配置。

配置结构如下:

{
  "groups": {
    "客厅的小爱": {
      "cur_music": "当前播放的歌曲",
      "cur_playlist": "当前播放的列表",
      "did_list": [
        "10086",
        "10087"
      ],
      "play_type": 1
    }
  }
}

音量支持修改组内设备的声音,也支持分开设置每个设备的声音,可以在前端操作,后端只需要提供设置多个设备声音的接口即可。

单曲循环,随机播放这些操作只对分组生效,所以存放到组里。

歌单列表所有设备共享,当前选择的歌单和当前播放的歌曲可以存到组里,方便重启后还能记住。

设备别名

可以给每个设备设置别名,方便管理。

{
  "alias": {
    "10086": "客厅的左边小爱",
    "10087": "客厅的右边小爱"
  }
}

设置页面可以看到did,hardware,别名。可以在设置页面调整分组。

主页分组切换

主页主要是用于播放操作的,所有操作都是针对于单个分组的,所以在顶部加入一个切换分组的功能。同时为了单独修改声音,修改声音的地方可以改为多个修改条。