# xiaomusic [![GitHub License](https://img.shields.io/github/license/hanxi/xiaomusic)](https://github.com/hanxi/xiaomusic) [![Docker Image Version](https://img.shields.io/docker/v/hanxi/xiaomusic?sort=semver&label=docker%20image)](https://hub.docker.com/r/hanxi/xiaomusic) [![Docker Pulls](https://img.shields.io/docker/pulls/hanxi/xiaomusic)](https://hub.docker.com/r/hanxi/xiaomusic) [![PyPI - Version](https://img.shields.io/pypi/v/xiaomusic)](https://pypi.org/project/xiaomusic/) [![PyPI - Downloads](https://img.shields.io/pypi/dm/xiaomusic)](https://pypi.org/project/xiaomusic/) [![Python Version from PEP 621 TOML](https://img.shields.io/python/required-version-toml?tomlFilePath=https%3A%2F%2Fraw.githubusercontent.com%2Fhanxi%2Fxiaomusic%2Fmain%2Fpyproject.toml)](https://pypi.org/project/xiaomusic/) [![GitHub Release](https://img.shields.io/github/v/release/hanxi/xiaomusic)](https://github.com/hanxi/xiaomusic/releases) 使用小爱音箱播放音乐,音乐使用 yt-dlp 下载。 ## 最简配置运行 已经支持在 web 页面配置其他参数,docker compose 配置如下: ```yaml services: xiaomusic: image: hanxi/xiaomusic container_name: xiaomusic restart: unless-stopped ports: - 8090:8090 volumes: - ./music:/app/music environment: MI_USER: '小米账号' MI_PASS: '小米密码' XIAOMUSIC_HOSTNAME: 'docker 主机 ip' ``` 启动成功后,在 web 页面可以配置 MI_DID, MI_HARDWARE, XIAOMUSIC_SEARCH, XIAOMUSIC_PROXY 参数。 如果需要修改 8090 端口为其他端口,比如 5678,需要这样配,3个数字都需要是 5678 ```yaml services: xiaomusic: image: hanxi/xiaomusic container_name: xiaomusic restart: unless-stopped ports: - 5678:5678 volumes: - ./music:/app/music environment: MI_USER: '小米账号' MI_PASS: '小米密码' XIAOMUSIC_HOSTNAME: 'docker 主机 ip' XIAOMUSIC_PORT: 5678 ``` ## 开发环境运行 - 使用 install_dependencies.sh 下载依赖 - 使用 pdm 安装环境 - 参考 [xiaogpt](https://github.com/yihong0618/xiaogpt) 设置好环境变量 ```shell export MI_USER="xxxxx" export MI_PASS="xxxx" export MI_DID=00000 export XIAOMUSIC_SEARCH='bilisearch:' ``` 然后启动即可。默认监听了端口 8090 , 使用其他端口自行修改。 ```shell pdm run xiaomusic.py ```` ### 支持口令 - **播放歌曲** - **播放歌曲**+歌名 比如:播放歌曲周杰伦晴天 - 下一首 - 单曲循环 - 全部循环 - 随机播放 - 关机 - 停止播放 - 刷新列表 - 播放列表+列表名 比如:播放列表其他 > 隐藏玩法: 对小爱同学说播放歌曲小猪佩奇的故事,会播放小猪佩奇的故事。 ## 已测试支持的设备 ```txt - L07A - S12 - LX5A - LX05 - L16A - LX06 - LX01 ```` ## 支持音乐格式 - mp3 - flac - wav - ape > 本地音乐会搜索 mp3 和 flac 格式的文件,下载的歌曲是 mp3 格式的。 ## 其他参数 - XIAOMUSIC_ACTIVE_CMD 环境变量,配置成'play,random_play',在非播放状态下,只有这两个指令(播放歌曲和随机播放)可以触发,触发后,xiaomusic进入playing状态,其他指令则可以正常触发。 ## 在 Docker 里使用 ```shell docker run -e MI_USER='your-xiaomi-account' \ -e MI_PASS='your-xiaomi-password' \ -e MI_DID='your-xiaomi-speaker-mid' \ -e MI_HARDWARE='L07A' \ -e XIAOMUSIC_PROXY='proxy-for-yt-dlp' \ -e XIAOMUSIC_HOSTNAME=192.168.2.5 \ -e XIAOMUSIC_SEARCH='bilisearch:' \ -p 8090:8090 \ -v ./music:/app/music hanxi/xiaomusic ``` - XIAOMUSIC_SEARCH 可以配置为 'bilisearch:' 表示歌曲从哔哩哔哩下载; - 配置为 'ytsearch:' 表示歌曲从 youtube 下载。 - XIAOMUSIC_PROXY 用于配置代理,默认为空; - 当 XIAOMUSIC_SEARCH 配置为 'ytsearch:' 时在国内需要用到。 - MI_HARDWARE 是小米音箱的型号,默认为'L07A' - 注意端口必须映射为与容器内一致, XIAOMUSIC_HOSTNAME 需要设置为宿主机的 IP 地址,否则小爱无法正常播放。 - 可以把 /app/music 目录映射到本地,用于保存下载的歌曲。 XIAOMUSIC_PROXY 参数格式参考 yt-dlp 文档说明: ``` Use the specified HTTP/HTTPS/SOCKS proxy. To enable SOCKS proxy, specify a proper scheme, e.g. socks5://user:pass@127.0.0.1:1080/. Pass in an empty string (--proxy "") for direct connection ``` 见 ### 本地编译Docker Image ```shell docker build -t xiaomusic . ``` ### docker compose 示例 使用哔哩哔哩下载歌曲: ```yaml version: '3' services: xiaomusic: image: hanxi/xiaomusic container_name: xiaomusic restart: unless-stopped ports: - 8090:8090 volumes: - ./music:/app/music environment: MI_USER: '小米账号' MI_PASS: '小米密码' MI_DID: 00000 MI_HARDWARE: 'L07A' XIAOMUSIC_SEARCH: 'bilisearch:' XIAOMUSIC_HOSTNAME: '192.168.2.5' ``` 使用 youtobe 下载歌曲: ```yaml version: '3' services: xiaomusic: image: hanxi/xiaomusic container_name: xiaomusic restart: unless-stopped ports: - 8090:8090 volumes: - ./music:/app/music environment: MI_USER: '小米账号' MI_PASS: '小米密码' MI_DID: 00000 MI_HARDWARE: 'L07A' XIAOMUSIC_SEARCH: 'ytsearch:' XIAOMUSIC_PROXY: 'http://192.168.2.5:8080' XIAOMUSIC_HOSTNAME: '192.168.2.5' ``` setting.json 文件不存到 music 可以这样写,会把 setting.json 文件放到容器的 /app/conf 目录且映射到本地的 ./conf 目录: ```yaml services: xiaomusic: image: hanxi/xiaomusic container_name: xiaomusic restart: unless-stopped ports: - 8090:8090 volumes: - ./music:/app/music - ./conf:/app/conf environment: MI_USER: '小米账号' MI_PASS: '小米密码' XIAOMUSIC_HOSTNAME: 'docker 主机 ip' XIAOMUSIC_CONF_PATH: '/app/conf' ``` ## 简易的控制面板 浏览器进入 - ip 是 XIAOMUSIC_HOSTNAME 设置的 - 8090 是默认端口 - 新功能 - 显示正在播放的歌曲 - 模糊搜索本地歌曲 - 设置页面 采用新的设置页面之后,必须在启动前配置的环境变量只剩下: - MI_USER - MI_PASS - XIAOMUSIC_HOSTNAME 其他的这些可以在网页里配置: - MI_DID - MI_HARDWARE - XIAOMUSIC_SEARCH - XIAOMUSIC_PROXY ## 网络歌单功能 可以配置一个 json 格式的歌单,支持电台和歌曲,也可以直接用别人分享的链接,具体用法见 ## 更多其他可选配置 - XIAOMUSIC_ACTIVE_CMD 配置唤醒命令,具体见 - XIAOMUSIC_EXCLUDE_DIRS 配置歌曲目录里需要忽略的目录 - XIAOMUSIC_MUSIC_PATH_DEPTH 配置歌曲目录搜索深度,具体见 - XIAOMUSIC_DISABLE_HTTPAUTH 配置成 false 表示开启密码访问web控制台,具体见 - XIAOMUSIC_HTTPAUTH_USERNAME 配置 web 控制台用户 - XIAOMUSIC_HTTPAUTH_PASSWORD 配置 web 控制台密码 - XIAOMUSIC_CONF_PATH 用来存放配置文件的目录,记得把目录映射到主机,默认情况会把配置存放在music目录,具体见 - XIAOMUSIC_VERBOSE 设置为 true 时开启 debug 日志,用于排查问题 - XIAOMUSIC_DISABLE_DOWNLOAD 设为 true 时关闭下载功能,见 - XIAOMUSIC_USE_MUSIC_API 设为 true 时使用 player_play_music 接口播放音乐,用于兼容不能播放的型号 ## 讨论区 - [点击链接加入QQ频道【xiaomusic】](https://pd.qq.com/s/e2jybz0ss) - [点击链接加入群聊【xiaomusic】 604526973](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=13St5PLVcTxYlWTAs_iAawazjtdD1l-a&authKey=dJWEpaT2fDBDpdUUOWj%2FLt6NS1ePBfShDfz7a6seNURi05VvVnAGQzXF%2FM%2F5HgIm&noverify=0&group_code=604526973) - ## 感谢 - [xiaomi](https://www.mi.com/) - [PDM](https://pdm.fming.dev/latest/) - [xiaogpt](https://github.com/yihong0618/xiaogpt) - [MiService](https://github.com/yihong0618/MiService) - [yt-dlp](https://github.com/yt-dlp/yt-dlp) - [NAS部署教程](https://post.m.smzdm.com/p/avpe7n99/) - [群晖部署教程](https://post.m.smzdm.com/p/a7px7dol/) - [QNAS部署教程](https://post.smzdm.com/p/a5xz5x63/) ## Star History [![Star History Chart](https://api.star-history.com/svg?repos=hanxi/xiaomusic&type=Date)](https://star-history.com/#hanxi/xiaomusic&Date) ## 赞赏 - 爱发电 - 点个 Star ⭐ - 谢谢 ❤️