名称: roon-controller
描述: 通过 Roon API 控制 Roon 音乐播放器,支持自动发现 Core 和区域筛选。提供播放/暂停、上一曲/下一曲、当前曲目查询等功能。自动识别 Muspi 区域,支持中文语音指令。
通过中文指令控制 Roon 音乐播放器。
pip install roonapi
from roon_controller import RoonController
# 创建控制器(令牌会自动保存)
controller = RoonController(verbose=True)
# 播放/暂停
result = controller.play_pause()
# 下一曲
result = controller.next()
# 获取当前曲目
track_info = controller.get_current_track()
print(f"正在播放:{track_info['track']}")
~/clawd/roon_config.jsonset_zone() 以编程方式切换区域切换区域
result = controller.set_zone("客厅")
# {"success": True, "message": "已切换至区域:客厅", "zone": "客厅"}
获取当前区域
zone = controller.get_current_zone()
# 返回包含 zone_id 和 zone_data 的区域信息字典
播放
result = controller.play()
# {"success": True, "message": "开始播放", "zone": "客厅 Muspi"}
暂停
result = controller.pause()
# {"success": True, "message": "已暂停", "zone": "客厅 Muspi"}
播放/暂停切换
result = controller.play_pause()
上一曲
result = controller.previous()
下一曲
result = controller.next()
track_info = controller.get_current_track()
# 返回:
# {
# "success": True,
# "is_playing": True,
# "zone": "客厅 Muspi",
# "track": "Bohemian Rhapsody",
# "artist": "Queen",
# "album": "A Night at the Opera",
# "seek_position": 12345, # 毫秒
# "length": 354000 # 毫秒
# }
zones = controller.list_zones()
# ["客厅 Muspi", "厨房", "卧室"]
本脚本也可作为命令行工具使用:
# 播放
python roon_controller.py play
# 暂停
python roon_controller.py pause
# 上一曲
python roon_controller.py prev
# 下一曲
python roon_controller.py next
# 查看当前曲目
python roon_controller.py status
# 列出所有区域
python roon_controller.py zones -v
# 切换区域
python roon_controller.py switch 区域名称
本技能支持以下中文触发词:
| 指令 | 含义 | 示例 |
|---|---|---|
| 音乐播放 / 播放音乐 | 开始播放 | "音乐播放" |
| 暂停 / 暂停播放 | 暂停播放 | "暂停一下" |
| 下一曲 / 切歌 | 下一曲 | "下一曲" |
| 上一曲 | 上一曲 | "上一曲" |
| 当前曲目 / 正在放什么 | 查看当前曲目 | "当前曲目" |
所有方法均返回统一的字典结构:
{
"success": True/False,
"message": "操作结果描述",
"zone": "区域名称(可选)"
}
~/clawd/roon_config.json,请确保文件权限安全roonapi>=0.1.6:官方 Roon API Python 库~/clawd/roon_config.json# 查找所有区域
zones = roon.zones
# 筛选带有 muspi 后缀的区域
muspi_zones = [
(zone_id, zone_data)
for zone_id, zone_data in zones.items()
if zone_data['display_name'].lower().endswith('muspi')
]
# 使用第一个匹配的区域
zone_id, zone_data = muspi_zones[0]