Xiaomusic深度解析:3大核心功能与进阶配置实战指南
【免费下载链接】xiaomusic 使用小爱音箱播放音乐,音乐使用 yt-dlp 下载。 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaomusic
Xiaomusic是一款基于Python和FastAPI构建的开源智能音乐播放器,专为小爱音箱用户设计,通过语音控制实现本地和网络音乐的智能播放。这款音乐播放器不仅支持yt-dlp技术从网络下载音乐,还提供了丰富的插件系统、定时任务和网络歌单功能,让用户能够打造个性化的智能音乐体验。
🔧 核心架构与部署方案
技术栈概览
Xiaomusic采用现代化的技术架构,确保系统的稳定性和扩展性:
| 组件 | 技术选择 | 功能说明 |
|---|---|---|
| 后端框架 | FastAPI + Python | 提供高性能的Web API接口 |
| 容器化 | Docker | 简化部署和运行环境管理 |
| 前端界面 | jQuery + 多主题支持 | 提供友好的Web控制界面 |
| 音乐处理 | yt-dlp + FFmpeg | 支持多种音乐格式下载和转换 |
| 设备通信 | MiService库 | 与小爱音箱设备进行通信 |
快速部署指南
Xiaomusic支持多种部署方式,Docker Compose是最推荐的生产环境部署方案:
# docker-compose.yml
version: '3'
services:
xiaomusic:
image: hanxi/xiaomusic
container_name: xiaomusic
restart: always
ports:
- "58090:8090"
volumes:
- /path/to/music:/app/music
- /path/to/conf:/app/conf
environment:
- MI_USER=你的小米账号
- MI_PASS=你的小米密码
配置说明:
/app/music:音乐文件存储目录,容器内路径/app/conf:配置文件存储目录,容器内路径58090:8090:将容器内的8090端口映射到主机的58090端口- 环境变量支持小米账号认证和基础配置
🎵 语音控制系统的深度定制
默认语音口令体系
Xiaomusic内置了完整的语音控制口令系统,支持丰富的播放控制命令:
# 基础播放控制命令
"下一首": "play_next",
"上一首": "play_prev",
"关机": "stop",
"暂停": "stop",
"停止播放": "stop",
# 播放模式控制
"单曲循环": "set_play_type_one",
"全部循环": "set_play_type_all",
"随机播放": "set_play_type_rnd",
"单曲播放": "set_play_type_sin",
"顺序播放": "set_play_type_seq",
# 歌单与收藏管理
"加入收藏": "add_to_favorites",
"收藏歌曲": "add_to_favorites",
"取消收藏": "del_from_favorites",
"播放列表第": "play_music_list_index",
"刷新列表": "gen_music_list"
自定义口令配置
用户可以通过环境变量或配置文件扩展语音口令:
# 环境变量配置示例
export XIAOMUSIC_KEYWORDS_PLAY="播放歌曲,放歌曲,我想听"
export XIAOMUSIC_KEYWORDS_STOP="关机,暂停,停止,关掉音乐"
export XIAOMUSIC_KEYWORDS_PLAYLIST="播放列表,播放歌单,我想听歌单"
高级语音功能
- 模糊搜索匹配:支持相似度匹配,提高语音识别准确率
- 多结果选择:当搜索到多个结果时,支持随机或顺序播放
- TTS语音反馈:可自定义播放模式切换的语音提示
🌐 网络歌单与在线音乐集成
网络歌单配置方法
Xiaomusic支持从外部JSON格式的歌单源获取音乐:
// custom_play_list.json 示例
{
"歌单名称": [
{
"name": "歌曲名称",
"artist": "歌手",
"url": "https://音乐源地址"
}
],
"电台列表": [
{
"name": "电台名称",
"url": "https://电台流地址.m3u8"
}
]
}
环境变量配置
# 网络歌单URL配置
export XIAOMUSIC_MUSIC_LIST_URL="https://your-playlist-server.com/playlist.json"
# 本地歌单JSON文件配置
export XIAOMUSIC_CUSTOM_PLAY_LIST_JSON="/path/to/custom_play_list.json"
# 搜索前缀配置(支持bilisearch和ytsearch)
export XIAOMUSIC_SEARCH="bilisearch:"
M3U格式转换工具
项目内置了M3U文件转换工具,可将M3U电台文件转换为Xiaomusic支持的JSON格式:
# 转换示例
# 原始M3U文件格式:
# #EXTM3U
# #EXTINF:-1,电台名称
# http://radio.stream/url
# 转换后JSON格式:
{
"电台名称": [
{
"name": "电台名称",
"url": "http://radio.stream/url"
}
]
}
⏰ 智能定时任务系统
定时任务配置语法
Xiaomusic的定时任务系统支持Cron表达式和特殊日期标记:
// crontab.json 配置示例
[
{
"name": "早晨唤醒音乐",
"cron": "0 7 * * *",
"command": "play_music_list",
"args": ["早晨歌单"]
},
{
"name": "工作日午休音乐",
"cron": "0 12 * * * #workday",
"command": "play_music_list",
"args": ["午休放松"]
},
{
"name": "周末背景音乐",
"cron": "0 9 * * 6,0 #offday",
"command": "play",
"args": ["轻音乐"]
}
]
特殊日期标记
#workday:仅在工作日执行#offday:仅在休息日执行- 支持节假日智能识别,自动跳过法定节假日
环境变量配置
# 启用定时任务
export XIAOMUSIC_CRONTAB_JSON="/path/to/crontab.json"
# 定时清理临时文件(默认启用)
export XIAOMUSIC_ENABLE_AUTO_CLEAN_TEMP="true"
🔌 插件系统扩展能力
插件架构设计
Xiaomusic采用模块化的插件系统,支持Python和JavaScript两种插件类型:
plugins/
├── __init__.py
├── code1.py # Python插件示例
├── httpget.py # HTTP GET请求插件
├── httppost.py # HTTP POST请求插件
└── setmyvolume.py # 音量控制插件
Python插件开发示例
# plugins/code1.py
def code1(message):
"""简单的插件示例"""
log.info(f"收到消息: {message}")
return f"插件响应: {message}"
# 配置自定义口令
# 在配置文件中添加:
# "user_key_word_dict": {
# "测试插件": "exec#code1('hello world')"
# }
JavaScript插件支持
Xiaomusic还支持JavaScript插件,通过JS插件管理器实现动态加载:
// JavaScript插件示例
module.exports = {
name: "天气插件",
version: "1.0.0",
description: "获取天气信息的插件",
execute: async function(params) {
const weather = await fetchWeather(params.city);
return `今天${params.city}的天气是:${weather}`;
}
};
插件配置管理
通过Web界面或配置文件管理插件:
# 启用插件系统
export XIAOMUSIC_ENABLE_PLUGINS="true"
# 插件目录配置
export XIAOMUSIC_PLUGIN_DIR="plugins"
🎨 多主题界面与设备兼容性
内置主题系统
Xiaomusic提供多种Web界面主题,满足不同用户需求:
图:Xiaomusic控制面板功能区域划分
界面功能区域详解:
- 左侧导航区:设备控制、播放列表、账号设置、系统配置
- 顶部搜索区:支持本地和网络歌曲搜索
- 播放列表区:显示当前歌单,支持双击快速播放
- 播放控制区:进度条、播放模式切换、上一首/下一首控制
- 右侧功能区:音量调节、全屏歌词显示
设备兼容性矩阵
Xiaomusic支持广泛的小爱音箱设备:
| 设备型号 | 设备名称 | 支持状态 |
|---|---|---|
| L06A | 小爱音箱 | ✅ 完全支持 |
| L07A | Redmi小爱音箱 Play | ✅ 完全支持 |
| S12/S12A | 小米AI音箱 | ✅ 完全支持 |
| LX5A | 小爱音箱 万能遥控版 | ✅ 完全支持 |
| LX06 | 小爱音箱Pro | ✅ 完全支持 |
| L16A | Xiaomi Sound | ✅ 完全支持 |
| L17A | Xiaomi Sound Pro | ✅ 完全支持 |
音乐格式支持
- 本地支持格式:MP3、FLAC、WAV、APE、OGG、M4A
- 下载格式:MP3(默认,兼容性最佳)
- 格式转换:支持FLAC等无损格式转换为MP3
⚙️ 高级配置与性能优化
缓存与存储配置
# 缓存目录配置
export XIAOMUSIC_CACHE_DIR="music/cache"
export XIAOMUSIC_CACHE_MAX_SIZE_MB="500"
# 临时文件清理
export XIAOMUSIC_ENABLE_AUTO_CLEAN_TEMP="true"
# 音乐目录深度
export XIAOMUSIC_MUSIC_PATH_DEPTH="10"
网络与代理设置
# 代理服务器配置
export XIAOMUSIC_PROXY="http://proxy.example.com:8080"
# 网络歌曲代理
export XIAOMUSIC_WEB_MUSIC_PROXY="true"
# 主机名配置(用于生成音乐URL)
export XIAOMUSIC_HOSTNAME="http://your-server-ip"
安全与认证配置
# HTTP基础认证
export XIAOMUSIC_DISABLE_HTTPAUTH="false"
export XIAOMUSIC_HTTPAUTH_USERNAME="admin"
export XIAOMUSIC_HTTPAUTH_PASSWORD="secure_password"
# 小米账号安全
export MI_USER="your_xiaomi_account"
export MI_PASS="your_xiaomi_password"
🔧 故障排查与性能调优
常见问题解决方案
问题1:音乐下载失败
# 检查网络连接
export XIAOMUSIC_PROXY="http://proxy:port"
# 启用yt-dlp cookies
export XIAOMUSIC_ENABLE_YT_DLP_COOKIES="true"
# 检查磁盘空间
df -h /path/to/music
问题2:设备连接失败
# 检查设备DID配置
export MI_DID="设备DID1,设备DID2"
# 启用详细日志
export XIAOMUSIC_VERBOSE="true"
# 查看日志文件
tail -f xiaomusic.log.txt
问题3:播放卡顿或中断
# 调整缓存大小
export XIAOMUSIC_CACHE_MAX_SIZE_MB="1000"
# 启用音量均衡
export XIAOMUSIC_LOUDNORM="loudnorm=I=-16:LRA=11:TP=-1.5"
# 检查网络延迟
ping your-xiaomi-device.local
性能优化建议
-
存储优化
- 使用SSD存储音乐文件
- 定期清理临时目录
- 启用文件监控减少扫描开销
-
网络优化
- 配置本地DNS解析
- 启用HTTP持久连接
- 使用CDN加速音乐下载
-
内存优化
- 调整缓存大小根据实际内存
- 限制并发下载任务
- 启用内存缓存机制
🚀 最佳实践与进阶技巧
生产环境部署建议
Docker优化配置:
# docker-compose.prod.yml
version: '3'
services:
xiaomusic:
image: hanxi/xiaomusic
container_name: xiaomusic
restart: unless-stopped
ports:
- "58090:8090"
volumes:
- /data/xiaomusic/music:/app/music
- /data/xiaomusic/conf:/app/conf
- /data/xiaomusic/logs:/app/logs
environment:
- MI_USER=${MI_USER}
- MI_PASS=${MI_PASS}
- XIAOMUSIC_HOSTNAME=${SERVER_HOSTNAME}
- XIAOMUSIC_CACHE_MAX_SIZE_MB=1000
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8090/health"]
interval: 30s
timeout: 10s
retries: 3
多设备管理策略
- 设备分组管理
# 按房间分组
export XIAOMUSIC_GROUP_LIST="did1:客厅,did2:卧室,did3:书房"
# 语音控制指定设备
"小爱同学,在客厅播放周杰伦的歌"
- 播放同步配置
# 启用连续播放
export XIAOMUSIC_CONTINUE_PLAY="true"
# 设置播放延迟
export XIAOMUSIC_DELAY_SEC="2"
自动化运维脚本
定时备份脚本:
#!/bin/bash
# backup_xiaomusic.sh
BACKUP_DIR="/backup/xiaomusic"
DATE=$(date +%Y%m%d_%H%M%S)
# 备份配置文件
cp /data/xiaomusic/conf/setting.json $BACKUP_DIR/setting_${DATE}.json
# 备份歌单数据
cp /data/xiaomusic/music/playlists/*.json $BACKUP_DIR/playlists_${DATE}.tar.gz
# 清理旧备份(保留最近7天)
find $BACKUP_DIR -name "*.json" -mtime +7 -delete
监控告警脚本:
#!/bin/bash
# check_xiaomusic.sh
SERVICE_URL="http://localhost:58090/health"
LOG_FILE="/var/log/xiaomusic_monitor.log"
if curl -s --max-time 10 $SERVICE_URL | grep -q "healthy"; then
echo "$(date): Xiaomusic服务正常" >> $LOG_FILE
else
echo "$(date): Xiaomusic服务异常,尝试重启" >> $LOG_FILE
docker-compose -f /path/to/docker-compose.yml restart xiaomusic
# 发送告警通知
send_alert "Xiaomusic服务异常,已尝试重启"
fi
📊 监控与日志分析
日志配置优化
# 自定义日志格式
import logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler('xiaomusic.log'),
logging.StreamHandler()
]
)
关键指标监控
- 设备连接状态:定期检查设备在线情况
- 音乐下载成功率:监控yt-dlp下载成功率
- 内存使用情况:防止内存泄漏
- 磁盘空间监控:确保有足够存储空间
性能分析工具
# 使用htop监控进程
htop -p $(pgrep -f xiaomusic)
# 网络连接监控
netstat -an | grep :8090
# 磁盘IO监控
iotop -o -d 5
🔮 未来发展方向
社区生态建设
Xiaomusic拥有活跃的开源社区,未来发展方向包括:
- 插件市场:建立官方插件仓库,方便用户分享和下载插件
- 主题商店:支持更多第三方主题和UI定制
- API标准化:提供统一的第三方应用接入标准
技术路线图
- AI语音增强:集成更智能的语音识别和自然语言处理
- 多协议支持:扩展支持更多音乐源协议
- 边缘计算:在边缘设备上部署轻量级版本
- 区块链技术:探索音乐版权和去中心化存储
💡 实用技巧总结
快速上手建议
- 从简单配置开始:先使用Docker Compose部署基础版本
- 逐步添加功能:先配置网络歌单,再尝试定时任务
- 测试语音控制:确保设备连接正常后再进行复杂配置
性能调优顺序
- 优化存储路径和缓存设置
- 配置网络代理和DNS
- 调整并发下载数量
- 启用文件监控减少扫描
安全配置要点
- 启用HTTP基础认证
- 定期更新小米账号密码
- 配置防火墙限制访问
- 启用日志审计和监控
通过本文的详细指南,您应该能够充分发挥Xiaomusic的全部潜力,打造个性化的智能音乐播放系统。无论是家庭娱乐还是商业场景,Xiaomusic都提供了强大的功能和灵活的配置选项,让音乐播放变得更加智能和便捷。
下一步行动建议:
- 使用Docker Compose快速部署基础环境
- 配置网络歌单,体验在线音乐功能
- 设置定时任务,实现自动化音乐播放
- 尝试开发自定义插件,扩展系统功能
- 参与开源社区,贡献代码或分享配置经验
【免费下载链接】xiaomusic 使用小爱音箱播放音乐,音乐使用 yt-dlp 下载。 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaomusic
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




