安信可离线语音VC-01/02:硬件规格书、开发资料、烧录工具、应用开发
安信可离线语音模组 VC-01、VC-02 系列教程 【基础认知篇】
安信可离线语音模组 VC-01、VC-02 系列教程 【快速上手篇】
安信可离线语音模组 VC-01、VC-02 系列教程 【中级入门篇】
安信可离线语音模组 VC-01、VC-02 系列教程 【高级进阶篇】
安信可离线语音模组 VC-01、VC-02 系列教程 【二次开发篇】虚拟开发环境搭建和分享
安信可离线语音模组 VC-01、VC-02 系列教程 【二次开发篇】事件和GPIO控制
安信可离线语音模组 VC-01、VC-02 系列教程 【二次开发篇】PWM输出
安信可离线语音模组 VC-01、VC-02 系列教程 【二次开发篇】串口输出
安信可离线语音模组 VC-01、VC-02 系列教程 【二次开发篇】SDK音频替换失败记录过程
安信可离线语音模组 VC-01、VC-02 系列教程 【二次开发篇】自定义音频播放控制
安信可离线语音模组 VC-01、VC-02 系列教程 【二次开发篇】自定义音频播放控制
简介
在本篇文章中将介绍如何使用SDK来进行自定义音频播放的功能。
在上一篇文章安信可离线语音模组 VC-01、VC-02 系列教程 【二次开发篇】自定义音频替换失败过程中,简要概述了res_build_tool.py 文件, 其主要的作用就是将音频文件进行转换,从而使编译固件的时候能够将音频文件编译到BIN中,然后在各项事件触发的时候实现播放。
虽然在上一篇文章中我们失败的尝试了替换对应的语音文件,但是还有另一种方法来实现音频数据的播放。 即使用user_player.h进行控制。
自定义音频播放
1、根据蜂鸟M的离线开发指导手册得知,其user_player.h文件可以被用户使用并且控制音频的播放。
其文件位于/home/vc02/Downloads/uni_hb_m_solution/unione_lite_app_hb_m/user/inc/user_player.h
#ifndef USER_INC_USER_PLAYER_H_ #define USER_INC_USER_PLAYER_H_ #ifdef __cplusplus extern "C" { #endif #include "unione.h" #include "user_event.h" /** @addtogroup uni_player_inf @{*/ /** *@brief 播放文件 *@param type 播放类型 *@param file 播放文件名 *@retval 0 操作成功 *@retval -1 操作失败 */ int user_player_play(AUDIO_PLAY_TYPE type, const char *file); /** *@brief 播放列表序号音频 *@param file_list 文件列表 [1, 2, 3] *@param num 列表序号 *@retval 0 操作成功 *@retval -1 操作失败 */ int user_player_reply_list_num(const char *file_list, int num); /** *@brief 随机播放列表音频 *@param file_list 文件列表 [1, 2, 3] *@retval 0 操作成功 *@retval -1 操作失败 */ int user_player_reply_list_random(const char *file_list); /** *@brief 顺序播放列表中所有音频 *@param file_list 文件列表 [1, 2, 3] *@retval 0 操作成功 *@retval -1 操作失败 */ int user_player_reply_list_in_order(const char *file_list); /** *@brief 停止播放 *@param type 播放类型 *@retval 0 操作成功 *@retval -1 操作失败 */ int user_player_stop(AUDIO_PLAY_TYPE type); /** *@brief 设置最小音量 */ int user_player_set_volume_min(void); /** *@brief 设置最大音量 */ int user_player_set_volume_max(void); /** *@brief 设置中等音量 */ int user_player_set_volume_mid(void); /** *@brief 增加音量 */ int user_player_set_volume_up(void); /** *@brief 减小音量 */ int user_player_set_volume_down(void); /** *@brief 设置喇叭静音 */ int user_player_speaker_mute(void); /** *@brief 取消设置喇叭静音 */ int user_player_speaker_unmute(void); /** *@brief 系统进入无回复播报模式 */ int user_player_shutup_mode(void); /** *@brief 系统退出无回复播报模式 */ int user_player_shutup_exit(void); /** @}*/ #ifdef __cplusplus } #endif #endif
上述为所有用户音频播放函数定义。功能相当丰富,包括了音频的播放和音量的调节,而正好对应的example中也有音频播放的示例。
2、修改
/home/vc02/Downloads/uni_hb_m_solution/unione_lite_app_hb_m/user/inc/user_config.h 中对USER_RUN_DEMO_SELECT 的宏, 指向USER_DEMO_PLAYER

3、查找这个宏,检查SDK是否支持。

可以从上述user_main 的入口宏判断得知, USER_DEMO_I2C_TIME和USER_DEMO_SPI_LCD 是不被支持的,而hb_player则没问题。
4、使用TTS maker生成一段音频数据。并且命名为109放到tones目录下。

5、修改原本代码中播放的 9.MP3 ,拷贝到tones目录下的109。
#include "user_player.h"
#define TAG "player_demo"
static void _player_test_process(void *args) {
while (1) {
uni_sleep(10);
user_player_set_volume_min();
LOGT(TAG, "set min vol");
/*播放9.mp3文件*/
user_player_play(AUDIO_PLAY_REPLY, "109"); //9.mp3
uni_sleep(10);
user_player_set_volume_mid();
LOGT(TAG, "set mid vol");
/*播放列表中的101.MP3文件*/
user_player_reply_list_num("[9,101,102]", 1);
uni_sleep(10);
user_player_set_volume_max();
LOGT(TAG, "set max vol");
/*随机播放列表中的某个文件*/
user_player_reply_list_random("[9,101,102]");
uni_sleep(10);
/*顺序播放列表中的所有文件*/
user_player_reply_list_in_order("[9,101,102]");
uni_sleep(10);
}
}
static Result _create_player_test_thread(void) {
thread_param param;
uni_pthread_t pid;
uni_memset(¶m, 0, sizeof(param));
param.stack_size = STACK_SMALL_SIZE;
param.priority = OS_PRIORITY_LOW;
uni_strncpy(param.task_name, "player_test", sizeof(param.task_name) - 1);
if (0 != uni_pthread_create(&pid, ¶m,
_player_test_process, NULL)) {
LOGE(TAG, "create thread failed");
return E_FAILED;
}
uni_pthread_detach(pid);
return E_OK;
}
int hb_player(void) {
_create_player_test_thread();
return 0;
}
这段代码创建了一个独立线程,在线程中循环执行音频播放测试。它先依次设置播放器的音量为最小、中等和最大,然后分别调用接口播放单个指定文件、播放列表中的特定文件、随机播放播放列表中的文件,以及顺序播放整个播放列表。
每次操作后线程都会短暂休眠,保证播放流程有序进行。该代码用于验证播放器在不同音量和播放模式下的功能是否正常。
6、烧录和测试

实验现象
系统上电后等待初始化后 “你好我是小美”将优先被播放, 之后进行音量调整并且循环往复。 这里会存在一个问题即,SDK中所有的音频的采样率都是16000Hz。
这个采样率已经在
/home/vc02/Downloads/uni_hb_m_solution/unione_lite_app_hb_m/src/sdk/player/src/uni_media_player.c中进行了定义。

和/home/vc02/Downloads/uni_hb_m_solution/unione_lite_app_hb_m/src/sdk/audio/audio_player/src/uni_audio_player.c 中被定义。

所以自定义的音频文件最好和这个定义的采样率保持一致,否则会出现采样率不匹配出现奇怪的声音。

如上图所示,创建的音频文件的采样率为24000, 所以下载到VC-02中, 音频播放的时候会很奇怪(属于正常现象)。
附件
uni_app_release_update.zip
审核编辑 黄宇
-
音频播放
+关注
关注
0文章
14浏览量
7926 -
SDK
+关注
关注
3文章
1094浏览量
51236 -
安信可
+关注
关注
0文章
217浏览量
4964
发布评论请先 登录
【AI语音模组】自制小智管家?安信可Ai-WV01-32S测试体验
直播回顾 | 掌握车载通信核心技术,虹科CAN总线实战:PCAN二次开发技术直播助您轻松拿捏总线开发“创新引擎
安信可AI语音开发板AiPi-PalChatV1 + MCP,通过HomeAssistant自动化控制设备

【离线语音】安信可VC-01/02二次开发篇:自定义音频播放控制
评论