| | |
| | | "type": "function", |
| | | "function": { |
| | | "name": "start_repeater", |
| | | "description": "在设备 SD 卡上复读指定 MP3。name 必须与 self.mp3.get_list 返回的 files[].name 完全一致。repeat 是整首循环次数。不要用 play_music。", |
| | | "description": "打开复读机,在设备 SD 卡上循环播放 MP3。name 与 self.mp3.get_list 的 files[].name 一致;省略 name 时设备会播放上次音频或 SD 卡第一首。repeat 是整首循环次数。speed 是播放倍率 0.5~2.0,默认由音频熟悉天数决定。不要用 play_music。播放期间不会聊天。", |
| | | "parameters": { |
| | | "type": "object", |
| | | "properties": { |
| | | "name": { |
| | | "type": "string", |
| | | "description": "SD 卡 MP3 文件名,必须与 get_list 的 files[].name 一致", |
| | | "description": "可选。SD 卡 MP3 文件名,必须与 get_list 的 files[].name 一致;省略则播上次或第一首", |
| | | }, |
| | | "repeat": { |
| | | "type": "integer", |
| | | "description": "整首循环次数,默认 1", |
| | | "description": "整首循环次数,默认 1。大于 1 且配置了 repeat_speeds 时,每一遍可以用不同倍速", |
| | | }, |
| | | "speed": { |
| | | "type": "number", |
| | | "description": "可选。播放倍率 0.5~2.0,省略则按熟悉天数自动选择", |
| | | }, |
| | | "power_off_after": { |
| | | "type": "boolean", |
| | | "description": "播完后是否软关机,默认 false", |
| | | }, |
| | | }, |
| | | "required": ["name"], |
| | | "required": [], |
| | | }, |
| | | }, |
| | | } |
| | |
| | | @register_function("start_repeater", start_repeater_function_desc, ToolType.SYSTEM_CTL) |
| | | async def start_repeater( |
| | | conn: "ConnectionHandler", |
| | | name: str, |
| | | name: str = "", |
| | | repeat: int = 1, |
| | | power_off_after: bool = False, |
| | | speed: float = None, |
| | | ): |
| | | from core.app_runtime.runtime import start_app_task |
| | | |
| | |
| | | if repeat_n < 1: |
| | | repeat_n = 1 |
| | | |
| | | params = { |
| | | "name": name, |
| | | "repeat": repeat_n, |
| | | "power_off_after": bool(power_off_after), |
| | | } |
| | | if speed is not None and speed != "": |
| | | params["speed"] = speed |
| | | |
| | | result = await start_app_task( |
| | | conn, |
| | | "english_learning", |
| | | "repeater", |
| | | { |
| | | "name": name, |
| | | "repeat": repeat_n, |
| | | "power_off_after": bool(power_off_after), |
| | | }, |
| | | params, |
| | | source="voice", |
| | | ) |
| | | if result.action in (Action.ERROR, Action.RESPONSE): |