简介
在本篇文章中我将介绍如何使用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
上述为所有的用户音频播放函数定义。 功能相当丰富,包括了音频的播放和音量的调节。 而正好对应的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, 所以下载到VC02中, 音频播放的时候会很奇怪(属于正常现象。)
附件
|