CATALOG

一、写在前面

大家好,今天我们来聊一聊芯步智能硬件的一个实用场景——如何通过开放接口,对40W远程TTS语音壁挂音箱进行播放暂停控制。

先说明一下:芯步官网目前列出的壁挂音箱产品功率主要是10W-30W区间,40W规格在第三方厂商产品中较为常见(如GFP-SH9607E等型号)。不过好消息是,芯步同一品类的设备命令是完全统一的,无论10W还是40W,接口调用方式都一样。所以这篇方案对40W设备同样适用,大家放心参考。

二、整体思路:你要做什么?

简单来说,就三步:

  1. 拿到设备凭证:获取你的AppID、AppSecret和设备ID

  2. 计算签名:这是芯步的鉴权机制,防止接口被乱调

  3. 发HTTP请求:向指定URL POST一条JSON命令,设备就听话了

整个流程走下来,从命令发出到音箱响起来,大概80-120毫秒,基本感觉不到延迟。

三、准备工作:先拿钥匙

在开始写代码之前,你需要准备好三样东西:

参数在哪里找说明
AppID控制台 → 开发设置应用唯一标识
AppSecret控制台 → 开发设置相当于“密码”,别泄露
设备ID控制台 → 设备列表你的那个40W音箱的编号

这三样就好比你家门锁的钥匙,没有它们,接口调不了。

四、核心:签名怎么算?

这是很多朋友第一次对接时容易卡住的地方。芯步的签名算法是:

其中ts是当前的时间戳(秒级),+表示字符串拼接,不是数学加法。

举个栗子(只是例子,别直接复制):

假设你的AppSecret = "abc123",当前ts = 1704067200

  • 第一步:MD5("abc123") → 假设得到 "202cb962ac59075b964b07152d234b70"

  • 第二步:拼接时间戳 → "202cb962ac59075b964b07152d234b70" + "1704067200" = "202cb962ac59075b964b07152d234b701704067200"

  • 第三步:再对整个字符串做一次MD5 → 得到最终的Sign

注意:时间戳每次请求都要用最新的,签名也会跟着变。这是为了防止请求被重放攻击。

五、实现“播放”:让音箱开口说话

播放是基础功能,核心命令是{"play:gbk:16":"你要说的话"}

请求地址

请求体示例

其中"play:gbk:16"里的16代表音量级别(0-9级,数字越大越响,16可能是特殊档位),gbk表示文本编码格式

如果嫌干巴巴的播报没感觉,还可以加点佐料:

效果命令示例说明
加提示音{"play:gbk:16":"[message_3]欢迎光临"}message_1到message_5可选
加铃声{"play:gbk:16":"[ring_2]上课时间到了"}ring_1到ring_5可选
男声/女声切换{"voice":"1"}0女声/1男声,单独发命令
调整语速{"speed":"5"}0-9级,5是正常

六、实现“暂停”和“恢复”:控制播放节奏

6.1 暂停当前播放

命令

"0"表示只停止当前正在播的这一条,队列里还有的话不会清掉

6.2 全部停止(杀个干净)

命令

"1"表示把所有还没播的都清了,彻底闭嘴。

6.3 重点来了:暂停后怎么恢复?

芯步的公开文档里没有直接的“resume”命令,这是因为芯片层面的逻辑是:每个播报任务是一次性的,一旦被stop打断就结束了,不能原地续播。

那怎么办? 方案有两种:

方案A:重新发起播放(推荐)

把上次被打断的文本再发一遍就行了。反正TTS合成快得很,重新播一遍用户基本感觉不到是“续播”还是“重播”。

方案B:前端/业务层自己做状态管理

你的系统里维护一个“当前播放内容”的变量。用户点“暂停”时,你记住播到哪了(或者简单粗暴记整段文本);点“恢复”时,把整段文本重新推给设备。

这个方法更灵活,你可以做到真正的“断点续播”效果——比如记住长文本的段落位置。

七、完整代码示例(Python版)

把上面讲的东西串起来,一个完整的控制脚本长这样: