CATALOG

多音字和数字读法的精确控制,是语音播报场景中的常见需求。芯步的音柱通过特定的 TTS 标签语法,可以在播报文本中直接嵌入读法指令,无需额外配置。以下是具体的对接方案。

一、 对接核心逻辑与准备

芯步的智能语音音柱(包括 30W 型号,其逻辑与 10W/20W 一致)本质上是一个网络音频终端。它通过 WiFi 连接网络,并开放标准的 HTTP API 接口。

要实现自定义数字读法,核心逻辑是:你的业务系统(服务器)通过 HTTP POST 请求,向音柱的设备 ID 发送一个包含特定语法标签的 JSON 命令。

在对接开发前,你需准备以下三个参数(在芯步控制台获取):

  1. AppID: 应用唯一标识。

  2. AppSecret: 接口加密密钥(用于生成签名)。

  3. Device ID: 目标 30W 语音音柱的设备编号

二、 接口鉴权与连接方案

芯步的接口采用 Sign (签名) 机制进行安全验证,这是对接的第一步,也是确保设备不被非法控制的关键。

请求地址http(s)://api.thingboot.com/{AppId}/device/control/?sign={sign}&ts={ts}

签名生成算法(以通用逻辑为例):sign = md5( md5(AppSecret) + ts )

  • ts: 当前 Unix 时间戳(秒)。

  • 计算步骤: 先将 AppSecret 进行 MD5 哈希,再将结果字符串与时间戳拼接,最后对整个拼接字符串再次进行 MD5 哈希

请求体结构

注: order 对象里放你要执行的命令。

三、 “多音数字读法”设置详解(TTS 语法规则)

这是该解决方案的核心。你无需在后台预设词典,而是直接在播报文本中注入控制符。芯步的音柱引擎支持 SSML(语音合成标记语言)风格的嵌入式标签。

针对 30W 音柱,通过 play:gbk:16 命令配合特定文本格式,可以实现以下读法控制:

1. 数字读法设置(数值 vs 序列号)

这是最常见的需求,例如金额和电话号码的读法冲突。

  • 场景 A: 数值读法(如金额 123.5)

    • 需求: 播报“一百二十三点五”。

    • 代码写法

    • 解析: 引擎默认会将数字串按位读出(如一二三),但遇到金额上下文或特定标记,会自动转换为数值读法。

  • 场景 B: 序列号/手机号读法(如 13912345678)

    • 需求: 播报“一三九一二三四五六七八”(逐个读),而不是“一百三十九亿...”。

    • 代码写法

    • 解析: 使用 [=]: 前缀或在特定上下文中,强制设备进行单数字分离播报

2. 多音字/英文读法设置

  • 需求: “这个参数是 1:1 的”,其中“参”字读“can”而非“cen”。

  • 代码写法

  • 解析: 使用双中括号 [[文字]] 包裹多音字,并在其后紧接拼音,可以强制 TTS 引擎选择特定读音。

3. 音量与语速协同调节

为了达到最佳听觉效果,在设置播报内容的同时,调节设备状态,避免数字播报过快导致听不清

推荐组合命令示例

(注:上述示例同时设置了音量 8(较高)、语速 4(适中),并混合了数值和单数字的读法)

四、 实操对接示例(Java 语言)

以下是一个使用 Java 调用接口,向音柱下发复杂语音指令的示例,核心是多音字和数字读法的控制

五、 排查和需要注意的点

  1. 编码问题: 命令中的 play:gbk:16 中的 gbk 代表文本编码。如果你的播报内容包含生僻字或特殊符号,请确保你的代码文件编码与系统环境支持 UTF-8 转 GBK 的转换,否则可能出现乱码

  2. 数字读法的触发条件

    • 默认情况下,纯数字字符串倾向于单字节读法(如“1,2,3”)。

    • 使用 +: 前缀可以强制切换数值读法,这在播报金额和重量时尤其重要。

    • 使用 =: 前缀可以强制序列号读法。

  3. 30W 音柱的硬件差异: 虽然 API 逻辑通用,但 30W 音柱通常用于室外或大范围场景,对网络延迟较为敏感。在发送指令后增加一个 100-200ms 的重试机制或确认机制,确保网络波动时指令送达

通过上述方案,你可以灵活地利用芯步的 API 实现复杂的语音播报逻辑,完全掌控“123”究竟读作“一百二十三”还是“一二三”。