在“语音播报场景”中,仅仅让设备“开口说话”往往不够。很多时候,我们需要在播报正文前加上“叮咚”或者“注意啦”这样的提示音,用来先引起听者注意。芯步的开放接口设计得比较灵活,无论是直接通过内置的提示音参数,还是通过下发特殊指令,都能很优雅地实现这个需求。
下面是一套比较详细的解决方案,包含几种不同的实现方式,你可以根据实际场景选择。
一、 场景痛点与需求
假设你有一个叫“小友”的智能语音音柱。如果直接让它干巴巴地播报“张三扫码支付5元”,员工可能根本没听见。但如果先来一声“叮咚”,大家耳朵竖起来了,再听“张三扫码支付5元”,感觉完全不一样。
我们需要解决的核心问题是:在播报正经文本之前,如何通过接口“顺便”让硬件响一下?
二、 方案一:使用“前置提示音”参数(最推荐)
这是最简单、也是最推荐的做法。经过查阅资料,芯步的智能语音类产品(如音柱、喇叭、吸顶音箱)在底层命令中支持 “播报文本/前置提示音” 这种模式。
1. 原理解析
在构造 order 指令时,标准播报命令通常是以 play:gbk:16 为 Key。但为了增加提示音,系统允许在文本前直接拼接特定的控制符,或者利用设备内置的 “提示音” 独立命令。
实际上,芯步设备支持独立的 message 命令(提示音)和 play 命令(播报)。既然是“内置提示音播放”,我们可以利用 先发提示音,再发播报 的组合逻辑,或者利用设备自带的前缀能力。
但在实际高并发场景下,为了稳定性,更采用“链式组合”逻辑:
2. 实施步骤
我们可以通过发两次指令来实现最完美的效果,但为了减少网络开销,芯步的设备其实支持在一条指令里做文章。
操作示例:如果你希望先响铃(提示音),再说话。我们可以这样下发指令:
场景:厨房备餐提醒。需求:先响一声急促的“滴”,然后播报“凉菜订单,请加一份拍黄瓜”。
下发 JSON:
特别说明:芯步的设备内置了 5种提示音 和 5种警示音。如果不确定是否支持一条指令同时播放,可以采用 “背靠背”下发 的方式(间隔50-100ms):
第一帧下发:
{"order":{"message":1}}(滴)第二帧下发:
{"order":{"play:gbk:16":"凉菜订单..."}}(说话)
由于设备响应极快(80-120ms),这种微小的间隔在人耳听起来几乎是连续的。
三、 方案二:手动拼接“特殊字符/铃声”命令
如果你的业务场景里,提示音和文本是严格绑定的事务(比如支付成功),不想发两条指令增加代码复杂度,可以利用 铃声 或 警示音 的独立命令。
1. 接口调用逻辑
可以先下发一条 铃声(ring) 或 警示音(alert) 指令,紧接着下发播报指令。
代码逻辑示例(伪代码):
2. 为什么要分两次?
芯步的开放接口设计是原子性的,即一个 order 主要做一件事。虽然设备处理速度极快,但为了代码逻辑清晰,且方便统计(比如统计提示音播放次数 vs 语音播报次数),分开发送是微服务架构里比较稳健的做法。
四、 方案三:自定义 TTS 合成(巧妙办法)
如果设备不支持上述的独立提示音字段,或者你想让提示音更有个性(比如“嗖”的一声音效),可以利用 TTS 的一个小技巧。
实现原理
利用文本转语音(TTS)的多音字或停顿功能,或者直接在文本里加入拟声词。
弊端:这不算“内置提示音”,而是让喇叭念出“滴”这个字,听感不如内置电子音清脆。
示例:
这时候设备会念出“叮~”,虽然不如电子音标准,但胜在不用记任何命令参数。
五、 针对不同场景的实战
在集成到你的业务系统时,可以参考以下流程:
初始化(音量/音色预设):在系统启动或设备上电时,先下发一次音量设置命令,避免提示音太吵或听不见。
核心播报逻辑封装:封装一个函数
playWithBeep(deviceId, text)。内部逻辑:先调用
alert或message接口。等待回调成功(或直接 sleep 50ms,因为芯步的接口是异步返回 200 仅代表接收成功),再调用
play接口。
处理异常(防吞字):有些设备如果在上一条音频没播完就接新指令,可能会切断前一条。芯步设备支持 停止(stop) 命令。如果你发现提示音被切掉了,可以在发提示音前先发一条
{"order":{"stop":1}},清空队列,再发提示音和播报。
六、 接口调试小贴士
你在调试时,直接用浏览器或 Postman 模拟请求。芯步的接口对新手比较友好,请求方式很简单:
URL:
https://api.thingboot.com/{你的AppID}/device/control/?sign={签名}&ts={时间戳}Method: POST
Body (JSON):
如果设备没反应,记得检查一下 ts(时间戳) 和 sign(签名),这是最容易出错的地方。签名规则是把开发者密码 MD5 一次,再拼上时间戳 MD5 一次。
总结一下:如果你想在语音播报里加内置提示音,最简单有效的方式就是连续发两条指令:先发 {"order":{"message":1}},再发播报文本。芯步的硬件处理速度够快,足以保证人耳听上去是连贯的一声“滴+语音”。