芯步的智能语音设备原生支持 stop 命令,但“暂停后从断点续播”需要结合业务逻辑实现。以下方案基于其标准 HTTP 接口,提供前台语音通知的完整控制架构。
一、 核心挑战与设计思路
芯步的智能语音设备(如智能语音喇叭2、音柱等)官方提供的命令集中包含 stop(停止播放)命令,但通常不直接提供pause 和 resume 命令。
解决方案的核心思路是:
暂停:调用
stop命令强制中断当前语音。状态记录:在业务后台(你的服务器)记录被中断的文本内容及其播放进度(或简单记录需重播的完整文本)。
恢复:重新调用
play:gbk:16命令,将未播完的文本重新合成并下发。由于TTS合成速度极快(毫秒级),用户几乎感觉不到延迟,效果等同于“续播”。
二、 技术准备
在开始开发前,请确保具备以下信息:
AppID & AppSecret:在芯步控制台获取,用于生成接口签名 。
设备ID (Device ID):目标语音喇叭的唯一标识。
接口地址
http(s)://api.thingboot.com/{AppId}/device/control/
签名算法 (重要)所有请求需携带 sign 和 ts 参数:
将 AppSecret 进行一次 MD5 加密:
secret_md5 = md5(AppSecret)拼接时间戳:
tmp_str = secret_md5 + ts再次进行 MD5:
sign = md5(tmp_str)。
三、 详细实现流程
具体实现分为三个核心环节:后台逻辑架构、暂停功能实现、恢复功能实现。
1. 后台逻辑设计
你需要在前台系统中维护一个“语音会话状态机”。推荐使用Redis缓存或内存表来处理状态。
数据结构设计
Key:
device_{DeviceID}_statusFields:
is_playing:是否正在播放。current_text:当前正在播放的完整文本。current_offset:由于TTS流式推送难以计算精准字符进度,通常不保存offset(仅保存全量文本,恢复时重头播)。如果业务逻辑必须是“接着读”,将长文本拆分为短句队列。queue_list:待播放的语音队列。
2. 实现“暂停”功能
当前台用户点击“暂停”按钮时,你需要向设备下发停止指令,并更新后台状态。
API 调用
注: 推荐使用
"stop":"0",仅打断当前句,保留队列 。后台处理逻辑(伪代码)
3. 实现“恢复”功能
当前台用户点击“恢复”时,后台从缓存中取出被打断的文本,重新下发播报命令。
优化策略为了避免恢复时的生硬感,可以在恢复的文本前加一个极短的“提示音”或自定义前缀(可选)。示例: 原文本为“订单号1234,金额50元”,恢复时下发:“[message_1] 订单号1234,金额50元”。
API调用
4. 进阶控制:音量与时序
为了更好的用户体验,恢复播放时附带音量设置,确保用户不会漏听。
组合命令:芯步设备支持链式或组合下发,可以先调音量再播报。
注: 接口文档显示,同一请求中通常只执行一个动作或特定组合。稳妥做法是分两次调用接口,或查阅最新文档确认是否支持JSON内多命令并行 。
四、 前端交互设计
为了使用户能够自如地控制语音,前台界面设计可参考以下:
悬浮控制栏:当有语音正在播放或暂停时,在页面底部常驻控制条。显示当前播放内容摘要,提供【暂停】、【恢复】、【停止】三个按钮。
事件上报机制利用设备的上行消息功能。当用户物理按击设备上的按钮(如短按静音/恢复)时,设备会向配置的URL推送事件 。场景应用:如果在办公室吵杂,用户直接按了喇叭上的“静音键”,该事件会自动上报给你的服务器。此时你的前端界面应该监听到WebSocket消息,同步将UI状态切换为“暂停”,实现“软硬一体”的状态同步。
等待反馈:由于HTTP请求和网络传输存在约80-300ms的延迟 ,点击按钮后应立刻更新UI为“加载中”状态,防止用户重复点击导致多个
stop或play命令堆积。
五、 异常处理方案
在实施过程中,可能会遇到以下情况,提前规划处理逻辑:
断网重连
问题:设备离线期间,下发的播报指令会失败。
方案:后台需维护一个“离线指令队列”。当设备重新上线(设备上线事件会通过HTTP推送给你的业务服务器)时,自动触发队列补发。
长文本截断
问题:TTS播报长文本(如大段合同条款)耗时较长。
方案:采用“逐句队列”模式。你的后台先将长文本按句号分割。
逻辑:设备播报第一句 -> 前端点击暂停 ->
stop命令 -> 保存剩余未播的句子列表 -> 恢复时播放列表第一条。
六、 总结
通过结合芯步的 stop(停止) 基础能力与业务层的状态管理,完全可以实现媲美专业播放器的“暂停/恢复”功能。
核心实现路径可概括为:前端触发暂停 -> 后端记录现场并下发 stop 指令 -> 前端触发恢复 -> 后端重新合成并下发原文本。该方案利用了设备毫秒级响应的特性,在无需修改设备固件的前提下,成功解决了前台语音通知控制中的痛点。