流式播放示例
功能说明
本示例演示如何使用 app_player 组件的流式播放接口来播放 PCM 音频数据。
流式播放接口允许应用程序逐块写入音频数据,适用于以下场景:
- 实时音频合成(如 TTS 语音合成)
- 网络音频流播放
- 需要边生成边播放的应用
核心 API
// 1. 开始流式播放(指定音频格式)
app_player_play_stream(player, sample_rate, channels, bits);
// 2. 写入 PCM 数据(可多次调用)
app_player_write_stream(player, data, size, timeout_ms);
// 3. 结束流式播放(通知数据写入完毕)
app_player_finish_stream(player);
完整流程
// 初始化
app_player_config_t config = { .pa_ctrl_callback = pa_ctrl_callback };
app_player_init(&config);
// 创建播放器
app_player_t *player = app_player_create("stream_demo");
app_player_register_callback(player, event_callback, NULL);
// 流式播放
app_player_play_stream(player, 16000, 1, 16); // 开始:16kHz, 单声道, 16位
app_player_write_stream(player, pcm_data, size, 1000); // 写入数据
app_player_finish_stream(player); // 结束
// 清理
app_player_destroy(player);
支持的音频格式
| 参数 | 支持值 |
|---|---|
| 采样率 | 8000, 16000, 44100, 48000 Hz |
| 声道数 | 1(单声道), 2(立体声) |
| 位深度 | 8, 16, 24, 32 bits |
编译
.. include:: /sample_build.rst
烧录运行
.. include:: /sample_flash.rst
注意事项
- 必须先调用
app_player_play_stream()开启流式播放模式 - 数据写入时需注意超时设置,避免阻塞过长
- 调用
app_player_finish_stream()后会自动播放完剩余缓冲区数据 - 可通过事件回调监听
APP_PLAYER_EVENT_COMPLETED获知播放完成