
chrisuthe/squeezelitemultiroom一台服务器。多个音频输出。搭配Music Assistant的全屋音频系统。
本项目允许您运行单个中央服务器(如NAS、树莓派或任何Docker主机),连接多个USB DAC或音频设备,在整个家庭中创建独立的音频区域。无需购买昂贵的多房间音频硬件,只需将经济实惠的USB DAC连接到中央机器,即可向每个房间流式传输同步音频。
┌─────────────────────────────────────────────────────────────────┐ │ 中央服务器 (Docker主机) │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ 多房间音频容器 │ │ │ │ │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ │ │ 播放器1 │ │ 播放器2 │ │ 播放器3 │ ... │ │ │ │ │ (厨房) │ │ (卧室) │ │ (露台) │ │ │ │ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │ │ └────────┼─────────────┼─────────────┼────────────────────┘ │ │ │ │ │ │ │ ┌────▼────┐ ┌────▼────┐ ┌────▼────┐ │ │ │USB DAC 1│ │USB DAC 2│ │声卡 │ │ │ └─────────┘ └─────────┘ └─────────┘ │ └─────────────────────────────────────────────────────────────────┘
!多房间音频控制器 !Docker !Music Assistant !.NET 8 !Sendspin
/api/health可直接部署的镜像地址:[***]
| 标签 | 描述 | 使用场景 |
|---|---|---|
latest | 最新稳定版本 | 生产环境部署 |
X.Y.Z | 版本标记发布 | 固定版本部署 |
sha-XXXXX | 提交特定构建 | 测试环境 |
bashdocker run -d \ --name multiroom-audio \ --network host \ -p 8096:8096 \ --device /dev/snd:/dev/snd \ -v audio_config:/app/config \ ghcr.io/chrisuthe/multiroom-audio:latest
通过 http://localhost:8096 访问Web界面
yamlservices: multiroom-audio: image: ghcr.io/chrisuthe/multiroom-audio:latest container_name: multiroom-audio restart: unless-stopped network_mode: host ports: - "8096:8096" devices: - /dev/snd:/dev/snd volumes: - ./config:/app/config - ./logs:/app/logs # - /etc/asound.conf:/etc/asound.conf:ro # 可选:自定义ALSA配置 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8096/api/health"] interval: 30s timeout: 10s retries: 3
使用上述Docker run命令或Docker Compose配置部署容器。
导航至 [***]
| 变量 | 默认值 | 描述 |
|---|---|---|
WEB_PORT | 8096 | Web界面端口 |
LOG_LEVEL | info | 日志详细程度(debug, info, warning, error) |
CONFIG_PATH | /app/config | 配置文件目录 |
LOG_PATH | /app/logs | 日志文件目录 |
yamlvolumes: - ./config:/app/config # 播放器配置文件 - ./logs:/app/logs # 应用程序日志 - /etc/asound.conf:/etc/asound.conf # 仅在需要访问软件定义设备时需要
yamldevices: - /dev/snd:/dev/snd # 所有音频设备(Linux系统)
如果您有自定义ALSA配置(虚拟设备、软件混音、多通道路由等),可挂载您的asound.conf文件使这些设备在容器内可用:
yamlvolumes: - ./config:/app/config - ./logs:/app/logs - /etc/asound.conf:/etc/asound.conf:ro # 自定义ALSA配置
这在以下场景中很有用:
容器重启后,您的自定义ALSA设备将出现在设备列表中。
完整API文档可在 http://localhost:8096/docs(Swagger UI)查看。
bash# 列出所有播放器 curl http://localhost:8096/api/players # 创建Sendspin播放器 curl -X POST http://localhost:8096/api/players \ -H "Content-Type: application/json" \ -d '{"name": "厨房", "device": "0"}' # 设置音量 curl -X PUT http://localhost:8096/api/players/厨房/volume \ -H "Content-Type: application/json" \ -d '{"volume": 75}' # 启动/停止播放器 curl -X POST http://localhost:8096/api/players/厨房/restart curl -X POST http://localhost:8096/api/players/厨房/stop # 健康检查 curl http://localhost:8096/api/health
Linux系统:确保音频设备可访问
bash# 检查可用设备 aplay -l # 验证设备权限 ls -la /dev/snd/
检查音频设备可用性:
bashdocker exec multiroom-audio ls /dev/snd
使用空设备测试:创建设备为null的播放器进行测试
查看日志:
bashdocker logs multiroom-audio
| 组件 | 技术 |
|---|---|
| 运行时 | .NET 8.0 / ASP.NET Core |
| 音频协议 | Sendspin via SendSpin.SDK 2.0 |
| 音频输出 | PortAudio via PortAudioSharp2 |
| 实时更新 | SignalR |
| 配置 | YAML via YamlDotNet |
| API文档 | Swagger/OpenAPI |
许可:MIT许可 - 详见LICENSE文件
致谢:
详细许可信息,请参见LICENSES.md。
本项目在AI(Anthropic的Claude)的协助下通过Claude Code开发。人类提供指导、审查输出并做出决策,但实现过程是AI辅助的。
将您的空间转变为互联音频体验
基于.NET 8.0为开源社区构建



manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务