SU-03T 变量控制音乐播放指南:实现切歌与播放列表管理

前言

在使用 SU-03T 离线语音模组开发语音控制音乐播放功能时,一个常见的需求是:通过语音命令实现"上一首"、"下一首"等切歌功能。很多开发者初次接触时会疑惑------能否不借助外部 MP3 模块,直接在 SU-03T 内部实现这个功能?

答案是可以 。通过 SU-03T 平台的变量控制功能,我们可以实现音乐播放列表的管理和切换功能。本文将详细讲解实现方法。


一、应用场景分析

1.1 典型需求

用户真实反馈的需求场景:

"SU-03T这个模块可以不借助MP3模块实现切歌上一首下一首吗?"

"我想的是我这个指令里面有很多首歌,命令下一首他就实现第一首,再命令下一首就实现库里面的第二首"

核心需求拆解

  • 预设多首音频文件(如音乐、语音提示等)
  • 通过语音命令切换不同的音频
  • 记住当前播放位置,支持顺序切换
  • 无需外部 MP3 模块或复杂硬件

1.2 解决方案概述

SU-03T 平台提供了变量功能,可以存储和传递数值状态。通过结合:

  • 变量存储:记录当前播放的曲目编号
  • 命令词控制:触发切歌动作
  • 变量引用:根据变量值选择对应的回复语

即可实现完整的播放列表控制功能。


二、实现原理

2.1 变量功能简介

SU-03T 平台中的变量可以:

  • 存储整数值(0-65535)
  • 通过命令词修改变量值
  • 在回复语中引用变量值
  • 跨命令保持状态

2.2 逻辑流程图

复制代码
┌─────────────┐
│  上电初始化  │ → 变量 "track_num" = 1
└─────────────┘
       │
       ▼
┌─────────────┐    "下一首"     ┌─────────────┐
│  等待语音命令  │ ─────────────→│ track_num++ │
└─────────────┘                └─────────────┘
       │                              │
       │ "播放第一首"                   ▼
       │                        ┌─────────────┐
       └───────────────────────→│ track_num=1 │
                                  └─────────────┘
                                        │
                                        ▼
                                ┌───────────────┐
                                │ 播放对应音频  │
                                │ 根据track_num │
                                └───────────────┘

三、平台配置步骤

3.1 创建变量

  1. 进入智能公元平台,选择 离线语音 → SU-03T
  2. 在左侧导航栏找到 变量管理
  3. 点击"添加变量",创建如下变量:
变量名 类型 初始值 说明
track_num 整数 1 当前曲目编号
total_tracks 整数 5 总曲目数量(可选)

3.2 配置命令词

命令词1:播放第一首
配置项
命令词 播放第一首
控制详情 设置变量 track_num = 1
回复语 "正在播放第一首歌曲"
音频/个性化 上传第一首音频文件
命令词2:下一首
配置项
命令词 下一首
控制详情 设置变量 track_num = track_num + 1
条件判断 如果 track_num > total_tracks,则 track_num = 1(循环)
回复语 "正在播放第{track_num}首歌曲"
命令词3:上一首
配置项
命令词 上一首
控制详情 设置变量 track_num = track_num - 1
条件判断 如果 track_num < 1,则 track_num = total_tracks(循环)
回复语 "正在播放第{track_num}首歌曲"

3.3 配置变量引用播放

由于 SU-03T 平台回复语系统不支持直接根据变量值选择不同音频,需要采用多命令词的方式:

方案A:多命令词实现(推荐)

为每个曲目创建独立的命令词:

命令词 变量操作 音频文件
播放第一首 track_num=1 audio1.mp3
播放第二首 track_num=2 audio2.mp3
播放第三首 track_num=3 audio3.mp3
... ... ...

然后"下一首"命令通过跳转功能调用对应的命令词:

复制代码
下一首:
  track_num = track_num + 1
  如果 track_num > 总数,则 track_num = 1
  跳转到:播放第{track_num}首
方案B:串口控制外部播放

如果需要灵活控制更多音频,可以使用 SU-03T 的串口输出功能,配合 MCU 或外部模块:

  1. SU-03T 通过串口发送曲目编号

  2. 外部 MCU 接收后控制音频播放

    SU-03T 串口输出格式示例:
    CMD_PLAY_TRACK:1\n
    CMD_PLAY_TRACK:2\n


四、完整配置示例

4.1 五首歌曲播放列表配置

假设有5首歌曲,配置如下:

初始化配置

事件触发开机播报中设置:

复制代码
变量 track_num = 1
命令词配置表
命令词 变量操作 跳转目标 音频
下一首 track_num+1, 若>5则=1 播放第N首 -
上一首 track_num-1, 若<1则=5 播放第N首 -
播放第一首 track_num=1 - song1.mp3
播放第二首 track_num=2 - song2.mp3
播放第三首 track_num=3 - song3.mp3
播放第四首 track_num=4 - song4.mp3
播放第五首 track_num=5 - song5.mp3

4.2 添加随机播放功能

如果需要"随机播放"功能,可以添加:

命令词 变量操作 说明
随机播放 track_num = 随机数(1-5) 跳转到播放第N首

五、高级应用技巧

5.1 播放模式切换

可以添加"循环模式"、"单曲循环"等状态变量:

c 复制代码
// 变量定义
play_mode = 0  // 0:顺序播放 1:循环播放 2:随机播放
is_repeat = 0  // 0:不重复 1:单曲重复

5.2 音量记忆

记录用户设置的音量:

命令词 变量操作 说明
音量大一点 volume = volume + 10 限制最大100
音量小一点 volume = volume - 10 限制最小0
恢复默认音量 volume = 50 恢复默认

5.3 播放进度记忆(需外部配合)

如果需要断点续播,需要:

  1. MCU 记录播放进度
  2. SU-03T 发送播放/暂停指令时传递进度信息

六、常见问题解答

Q1:为什么不直接用 MP3 模块?

A:使用 SU-03T 内置音频功能的优点:

  • 硬件更简单,减少外部模块
  • 成本更低
  • 功耗更小
  • 系统集成度更高

Q2:可以支持多少首音频?

A

  • 受限于 SU-03T 的 Flash 存储空间(2MB)
  • 一般可存储 5-10 首短音频或提示音
  • 如需更多音频,建议使用外部存储或串口控制方案

Q3:如何实现无缝切换?

A

  • 设置音频的"退出回复"为立即执行
  • 在下一首命令中先停止当前播放
  • 或使用串口通知外部 MCU 处理切换逻辑

Q4:变量断电后会保存吗?

A

  • SU-03T 的普通变量断电后不保存
  • 如需记忆功能,需要通过串口将状态保存到外部 MCU

七、完整代码示例

7.1 变量初始化(平台配置)

复制代码
变量名: track_num
类型: 整数
初始值: 1
变量名: total_tracks
类型: 整数
初始值: 5

7.2 命令词JSON配置示例

json 复制代码
{
  "commands": [
    {
      "name": "下一首",
      "words": ["下一首", "播放下一首", "切歌"],
      "actions": [
        {
          "type": "variable_set",
          "variable": "track_num",
          "operation": "add",
          "value": 1,
          "condition": "track_num <= total_tracks"
        },
        {
          "type": "variable_set",
          "variable": "track_num",
          "operation": "set",
          "value": 1,
          "condition": "track_num > total_tracks"
        },
        {
          "type": "jump",
          "target": "播放第{track_num}首"
        }
      ]
    }
  ]
}

八、总结

通过 SU-03T 的变量功能,我们可以完全依靠模组内部实现音乐播放的切歌控制,无需额外的 MP3 模块。关键点是:

  1. 合理使用变量:记录当前状态(曲目编号、播放模式等)
  2. 善用跳转功能:通过条件跳转实现复杂逻辑
  3. 考虑存储限制:2MB Flash 限制了音频数量和时长
  4. 必要时结合串口:复杂播放控制可配合 MCU 实现

希望本指南能帮助您快速实现 SU-03T 音乐播放控制功能!


参考资源