版本:0.1 | 日期:2026-07-03 | 路径: platforms/components/xtiny/xt_audio/
一、概述
xt_audio_svc 是音频服务层,封装了 TTS 合成、文件解码和音频设备写入的完整链路。用户只需一行调用即可完成 TTS 播放或音频文件播放,无需关心底层 TTS 回调、写入重试、格式匹配等细节。
1.1 设计原则
1.2 依赖
1.3 与其他模块的关系
xt_audio_svc (统一入口)
├── 内部管理 xt_audio_tts (TTS 合成)
├── 内部管理文件解码器(支持 .amr/.mp3/.wav/.opus)
└── 内部调用 xt_audio_dev_write() (写入设备)
二、核心概念
2.1 服务类型
2.2 服务事件
2.3 回调机制
支持两种回调注册方式:
2.4 文件格式支持
xt_audio_svc_file_play() 支持以下音频格式:
| 格式 | 扩展名 | 说明 |
| AMR | .amr | 8kHz 单声道 |
| MP3 | .mp3 | 16kHz 单声道 |
| WAV | .wav | 16kHz 单声道 |
| OPUS | .opus | 16kHz 单声道 |
设备采样率需与文件格式匹配(如 AMR 用 8kHz,其他用 16kHz)。
三、API 参考
以下为函数签名大纲,完整的参数说明、返回值、注意事项请查看 xt_audio_svc(音频服务) 。
3.1 回调注册
3.2 TTS 播放
3.3 文件播放
3.4 停止
3.5 类型
四、常见模式
4.1 TTS 服务播放
{
s_last_evt = evt;
}
void svc_tts_example(void)
{
.drv_name = "codec",
.sample_freq = 8000,
.sample_bits = 16,
.channel_num = 1,
.frame_size = 640,
.write_wq_num = 20,
};
const char *text = "你好,这是音频服务层 T T S 播放例程";
}
osDelay(50);
}
}
xt_err_t xt_audio_dev_setup(struct xt_audio_dev_config *cfg, xt_audio_t *hdl)
初始化音频设备
xt_err_t xt_audio_dev_close(xt_audio_t hdl)
关闭音频设备
xt_err_t xt_audio_svc_register_evt_cb(xt_audio_svc_evt_cb_t cb, void *user_data)
注册全局事件回调
#define xt_audio_svc_tts_play(_dev, _text, _size, _level)
void * xt_audio_t
音频设备句柄类型
完整示例见: examples/platform_specific/lm620/audio_svc/src/test_tts_play.c
4.2 文件播放
void svc_file_example(void)
{
.drv_name = "codec",
.sample_freq = 8000,
.sample_bits = 16,
.channel_num = 1,
.frame_size = 640,
.write_wq_num = 20,
};
osDelay(50);
}
}
#define xt_audio_svc_file_play(_dev, _path, _level)
完整示例见: examples/platform_specific/lm620/audio_svc/src/test_file_play.c
4.3 中途停止
osDelay(3000);
osDelay(100);
osDelay(2500);
osDelay(50);
}
xt_err_t xt_audio_svc_stop(xt_audio_t dev, enum xt_audio_svc_type type)
停止指定类型的服务
完整示例见: examples/platform_specific/lm620/audio_test/src/test_svc_tts.c
4.4 局部回调(覆盖全局回调)
.cb = _local_cb,
.user_data = &some_data,
};
xt_err_t xt_audio_svc_tts_play_ext(xt_audio_t dev, const char *text, uint32_t size, uint8_t level, struct xt_audio_svc_tts_info *info)
TTS 播放(扩展版本)
五、已知行为与限制
| 行为 | 说明 |
| 互斥执行 | 同一时间只允许一个服务运行,再次调用返回 XT_EBUSY |
| stop 异步 | xt_audio_svc_stop() 返回后服务仍在终止中,需等待回调 _ABORT 事件 |
| stop 后需等待 | 必须在回调确认后才能发起下一次播放 |
| 文件格式需匹配采样率 | AMR 用 8kHz ,MP3/WAV/OPUS 用 16kHz ,否则解码异常 |
| 设备句柄需预先 setup | 传入的 dev 必须是 xt_audio_dev_setup() 返回的有效句柄 |
| 全局回调作用全部服务 | 注册一次即可监听 TTS 和 FILE 的所有事件 |