网络音频播放示例
源码位置: samples/media/app_player/net_tts 查看源码
功能说明
演示如何使用 app_player 播放网络音频资源(HTTP/HTTPS),包括播放控制(播放、暂停、恢复、停止)和事件回调处理。
硬件连接
PA27: PA(功放)控制引脚,用于控制音频功放的开关
WiFi: 需要设备支持 WiFi 并连接到互联网
前置准备
网络配置
本示例需要设备连接到互联网才能播放网络音频。请根据实际情况配置 WiFi 连接参数:
编辑
src/net/net_connect.c或相关网络配置文件配置 WiFi SSID 和密码
确保网络连接成功后再播放音频
示例内容
连接网络(WiFi)
配置 PA 控制 GPIO
初始化 app_player 模块并创建播放器实例
注册播放事件回调函数
播放网络音频(HTTPS URL)
演示播放控制:
播放 1 秒后暂停
暂停 1 秒后恢复播放
恢复 1 秒后停止播放
编译
重要提示:在编译前,请先确认您使用的开发板型号。SDK 目前支持以下开发板:
arcs_evb - ARCS EVB 评估板
arcs_mini - ARCS Mini 开发板
根据您的开发板型号,选择对应的编译命令:
在示例目录下执行编译:
# 使用 arcs_evb 开发板
./build.sh -C -DBOARD=arcs_evb
# 或使用 arcs_mini 开发板
./build.sh -C -DBOARD=arcs_mini
Note
如果在 SDK 根目录执行,需要指定示例路径:
# 使用 arcs_evb 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_evb
# 或使用 arcs_mini 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_mini
Note
确保已安装对应的工具链。
烧录
编译完成后,使用 SDK tools 目录下的 cskburn 工具烧录固件:
./tools/burn/cskburn -s /dev/ttyUSB0 -b 3000000 0x0 build/arcs.bin -C arcs
Note
烧录参数说明:
-s /dev/ttyUSB0:串口设备路径,需要根据实际情况修改 - Linux 系统:通常是/dev/ttyUSB0或/dev/ttyACM0- 可通过ls /dev/tty*命令查看可用串口设备 - 不同开发板或 USB 转串口芯片可能使用不同的设备名-b 3000000:烧录波特率(3Mbps)0x0:烧录起始地址build/arcs.bin:编译生成的固件路径-C arcs:芯片类型
注意事项:
确保开发板已正确连接到电脑
如果无法识别串口设备,请检查 USB 连接线是否正常,或尝试其他 USB 端口
预期输出
[I][samples] Connecting to network...
[I][samples] Network connected
[I][samples] PA OFF
[I][samples] Playing URL: https://listenai-firmware-delivery.oss-cn-beijing.aliyuncs.com/weather.mp3
[I][samples] PA ON
[I][samples] Player prepared
[I][samples] Player playing
[I][samples] Player paused
[I][samples] Player playing
[I][samples] Player stopped
[I][samples] PA OFF
音频输出:
播放指定 URL 的网络音频
播放过程中可听到暂停和恢复的效果
核心 API
API |
说明 |
|---|---|
|
初始化 app_player 模块 |
|
创建播放器实例 |
|
注册事件回调函数 |
|
播放指定 URL 的音频 |
|
暂停播放 |
|
恢复播放 |
|
停止播放(同步接口,等待停止完成) |
|
销毁播放器实例 |
关键代码
初始化和配置
/* 连接网络 */
net_connect();
/* 初始化 app_player 模块 */
app_player_config_t app_config = {
.pa_ctrl_callback = pa_control_callback
};
ret = app_player_init(&app_config);
if (ret != APP_PLAYER_OK) {
LOGE("App player init failed: %d", ret);
return -1;
}
/* 创建播放器实例 */
app_player_t *player = app_player_create("tts");
if (player == NULL) {
LOGE("Failed to create player");
return -1;
}
/* 注册事件回调 */
app_player_register_callback(player, player_event_callback, NULL);
PA 控制回调
/**
* @brief PA控制回调函数
*/
static int pa_control_callback(int onoff)
{
LOGI("PA %s", onoff ? "ON" : "OFF");
return lisa_gpio_write_pin(lisa_device_get(PA_GPIO_DEVICE),
PA_PIN_NUM,
onoff ? LISA_GPIO_HIGH : LISA_GPIO_LOW);
}
播放网络音频
/* 播放网络音频资源 */
const char *url = "https://listenai-firmware-delivery.oss-cn-beijing.aliyuncs.com/weather.mp3";
LOGI("Playing URL: %s", url);
ret = app_player_play(player, url);
if (ret != APP_PLAYER_OK) {
LOGE("Failed to play: %d", ret);
app_player_destroy(player);
return -1;
}
播放控制
/* 暂停播放 */
app_player_pause(player);
/* 恢复播放 */
app_player_resume(player);
/* 同步停止(等待停止完成)*/
app_player_stop(player);
事件回调
static void player_event_callback(app_player_t *player,
app_player_event_t event,
void *user_data)
{
switch (event) {
case APP_PLAYER_EVENT_PREPARED:
LOGI("Player prepared");
break;
case APP_PLAYER_EVENT_PLAYING:
LOGI("Player playing");
break;
case APP_PLAYER_EVENT_PAUSED:
LOGI("Player paused");
break;
case APP_PLAYER_EVENT_COMPLETED:
LOGI("Player completed");
break;
case APP_PLAYER_EVENT_ERROR:
LOGE("Player error");
break;
case APP_PLAYER_EVENT_STOPPED:
LOGI("Player stopped");
break;
}
}
配置说明
PA 控制引脚
PA 控制引脚在代码中定义:
#define PA_PIN_NUM 27 // PA 控制引脚号
#define PA_GPIO_DEVICE "gpioa" // GPIO 设备名
根据硬件设计修改对应的引脚和设备。
网络音频 URL
示例中使用的音频 URL:
const char *url = "https://listenai-firmware-delivery.oss-cn-beijing.aliyuncs.com/weather.mp3";
可以替换为其他支持的音频格式 URL(PCM、MP3、WAV、AAC、M4A)。
注意事项
网络连接: 必须先确保设备成功连接到网络,否则无法播放网络音频
URL 格式: 支持 HTTP 和 HTTPS 协议的音频 URL
音频格式: 支持 PCM、MP3、WAV、AAC、M4A 格式,推荐使用 16kHz、16bit 的音频
PA 回调必填:
app_player_init()时必须提供pa_ctrl_callback,用于控制功放开关返回值检查: 所有 API 调用后务必检查返回值,确保操作成功
网络稳定性: 网络不稳定可能导致播放中断或失败,建议添加重试机制
资源清理: 使用完毕后记得调用
app_player_destroy()释放资源HTTPS 支持: 播放 HTTPS 音频需要确保系统支持 TLS/SSL
WiFi 连接失败
问题描述:示例程序无法连接到 WiFi 网络,或者网络连接超时。
解决方法:
本示例需要联网才能播放网络音频和在线 TTS,请按以下步骤配置 WiFi:
打开 src/net/net_connect.c 文件
修改WiFi配置为你的实际网络信息:
#define TARGET_WIFI_SSID "your_wifi_ssid" // 替换为你的 WiFi 名称
#define TARGET_WIFI_PWD "your_wifi_password" // 替换为你的 WiFi 密码