音频服务

更新时间:2024-04-08 08:18:04下载pdf

本文介绍蜂窝协议下音频服务相关的指令说明。

音量设置(0x72 87)

MCU 发送

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0x72
数据长度 2 0x0003
数据 3
  • 子命令:0x87
  • 类型(1 字节):1 表示本地音量,2 表示通话音量
  • 音量:0~100,其中 0 表示静音
校验和 1 从帧头开始按字节求和,得出的结果对 256 求余

模组返回

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x72
数据长度 2 0x0003
数据 3
  • 子命令:0x87
  • 类型(1 字节):1 表示本地音量,2 表示通话音量
  • 结果:0 成功,其他失败
校验和 1 从帧头开始按字节求和,得出的结果对 256 求余

SD 卡中音频播放(0x71 27)

本功能需要 SD 卡支持。

MCU 发送

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0x71
数据长度 2 0x0004+N
数据 4+N
  • 子命令:0x27
  • 端口(1 字节):0 播放到本地喇叭,1 播放到通话的上行链路
  • 控制字(1 字节):0 停止,1 播放,2 暂停,3 恢复
  • 音频文件格式:
    • 1:pcm
    • 2:wavpcm
    • 3:mp3
    • 4:amr-nb
    • 5:amr-wb
  • 音频文件所在模组的路径(N 字节),如 /sdcard0/ice_8k_16bit.pcm
校验和 1 从帧头开始按字节求和,得出的结果对 256 求余

模组返回

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x71
数据长度 2 0x0005
数据 5
  • 子命令:0x27
  • 端口(1 字节)
  • 控制字(1 字节)
  • 音频文件格式
  • 状态(0 成功,其他失败)
校验和 1 从帧头开始按字节求和,得出的结果对 256 求余

本地音频播放状态查询(0x71 28)

MCU 发送

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0x71
数据长度 2 0x0001
数据 1 子命令:0x28
校验和 1 从帧头开始按字节求和,得出的结果对 256 求余

模组返回

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x71
数据长度 2 0x0003
数据 3
  • 子命令:0x28
  • 状态
    • 0:空闲
    • 1:播放中
    • 2:播放中止
    • 3:播放完成
  • 结果:0 成功,其他失败
校验和 1 从帧头开始按字节求和,得出的结果对 256 求余

本地音频播放完成上报(0x71 2a)

在本地音乐播放完成后,模组会主动上报播放完成的状态给 MCU。

模组发送

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x71
数据长度 2 0x0002
数据 2
  • 子命令:0x2A
  • 状态:1 表示播放完成
校验和 1 从帧头开始按字节求和,得出的结果对 256 求余

设置模组静音(0x72 97)

MCU 发送

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0x72
数据长度 2 0x0003
数据 3
  • Data[0] 子命令:0x97
  • Data[1] 类型选择
    • 0:SMS 静音
    • 1:呼入静音
    • 2:电话通话静音
  • Data[2] 设置值
    • 0:非静音
    • 1:静音
校验和 1 从帧头开始按字节求和,得出的结果对 256 求余

模组返回

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x72
数据长度 2 0x0003
数据 3
  • 子命令:0x97
  • 类型选择:
    • 0:SMS 静音
    • 1:呼入静音
  • 状态:
    • 0x00:失败
    • 0x01:成功
校验和 1 从帧头开始按字节求和,得出的结果对 256 求余

在线 TTS 音频服务(0x71 45)

  • 涂鸦提供在线的 TTS(文本合成语音)的服务,对应的产品需要开通 TTS 服务。
  • 产品必须先连上涂鸦,否则无法提供本服务。
  • MCU 发送的文本编码格式必须是 UTF-8,否则不支持。
  • 由于是在线的服务,所以根据网络状况存在延时而且会消耗流量。
  • 文本越长,从云端获取的合成的音频数据越大。不建议单次文本超过 64 个字符。
  • 由于本服务是异步执行,所以从涂鸦获取音频数据超过 10 秒钟未成功,则本次服务结束。

MCU 发送

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0x71
数据长度 2 0x0002
数据 2
  • 子命令:0x45
  • {“opt”:“play”,
    “timeout”:xxx,
    “context”:“xxx”}
校验和 1 从帧头开始按字节求和,得出的结果对 256 求余

opt:表示模式选择。支持 playquery 两种模式。

  • play 模式:蜂窝模组获取到音频后,直接由蜂窝模组播放。

    • timeout 字段表示从云端获取音频的超时时间。音频播放时间不包含在内。默认为 10s,最低不能低于 5s。
  • query 模式:查询当前的 TTS 播放状态。当选择 query 的时候,contexttimeout 字段可以不填。

模组返回

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x71
数据长度 2 2
数据 2
  • 子命令:0x45
  • data[1]:result
校验和 1 从帧头开始按字节求和,得出的结果对 256 求余

result 含义
-7 语音服务器未连接
-6 参数错误
-5 文本编码错误
-4 网络异常
-3 设备忙
-2 获取失败
-1 超时
0 请求成功
1 TTS 服务空闲中
2 TTS 信息获取成功
3 TTS 音频数据请求中
4 TTS 音频数据下载中
5 TTS 音频数据播放中
6 TTS 音频数据请求失败
7 TTS 音频数据下载失败
8 TTS 请求超时
9 TTS 音频数据播放完成

内存音频播放播放(0x71 49)

  • 本功能是用来传输和控制一段内存音频数据。当前模组支持最多 4 个音频 ID,每个音频 ID 最多 16K 字节。

  • 音频数据保存在模组的内存中,设备重启就会丢失。随后,MCU 需要重新传输内存数据给模组。

  • 增加音频数据的时候,单个传输包音频数据长度不能超过 1024 字节。

MCU 发送:

字段 长度(byte) 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0x71
数据长度 2
  • 00009+N:增加音频数据
  • 0004:播放
  • 0003:删除、停止
  • 0002:查询
数据 Data
  • 子命令:0x49
  • 控制字:1 字节
    • 1:音频数据增加
    • 2:音频 ID 删除
    • 3:播放一个音频 ID
    • 4:停止一个音频 ID
    • 5:查询已经保存在内存中的音频 ID
  • 音频 ID:1 字节,针对控制字 1234 有效
  • 端口:1 字节,针对控制字 3 有效
    • 0:播放到本地喇叭
    • 1:播放到通话的上行链路
  • 音频文件格式:1 字节,针对控制字 1 有效
    • 1:pcm
    • 2:wavpcm
    • 3:mp3
    • 4:amr-nb
    • 5:amr-wb
  • total_size:2 字节,针对控制字 1 有效
  • offset:2 字节,针对控制字 1 有效
  • 音频数据:N 字节,针对控制字 1 有效
校验和 1 从帧头开始按字节求和得出的结果对 256 求余

控制字

控制字 组合内容
1 音频 ID、音频格式、total_sizeoffset 和音频数据
2 音频 ID
3 音频 ID 和端口
4 音频 ID
5

模组返回

字段 长度(byte) 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x71
数据长度 2 0x0004/0x0005
数据 4/5
  • 子命令:0x49
  • 控制字:1 字节
    • 控制字为 1~4 模式下:
      状态:1 字节,0 表示成功,其他表示失败。
    • 控制字为 5 模式下
      • 音频数量:1 字节
      • 音频 ID:1 字节
校验和 1 从帧头开始按字节求和得出的结果对 256 求余

状态值 含义
0 成功
1 超过限制 16K
2 音频 ID 忙
3 内存音频 ID 存储已满
4 该音频 ID 不存在
5 该音频 ID 数据不完整
6 音频设备忙
7 该音频 ID 播放失败
8 单个数据包超过 1024 字节

示例

播放音频 ID:55 AA 03 71 00 04 49 03 01 00 C