簡介
在本篇文章中將介紹如何使用SDK來進行自定義音頻播放的功能。
在上一篇文章安信可離線語音模組 VC-01、VC-02 系列教程 【二次開發(fā)篇】自定義音頻替換失敗過程中,簡要概述了res_build_tool.py文件, 其主要的作用就是將音頻文件進行轉換,從而使編譯固件的時候能夠將音頻文件編譯到BIN中,然后在各項事件觸發(fā)的時候實現(xiàn)播放。
雖然在上一篇文章中我們失敗的嘗試了替換對應的語音文件,但是還有另一種方法來實現(xiàn)音頻數(shù)據(jù)的播放。 即使用user_player.h進行控制。
自定義音頻播放
1、根據(jù)蜂鳥M的離線開發(fā)指導手冊得知,其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" /**@addtogroupuni_player_inf @{*/ /** *@brief播放文件 *@paramtype 播放類型 *@paramfile 播放文件名 *@retval0 操作成功 *@retval-1 操作失敗 */ intuser_player_play(AUDIO_PLAY_TYPE type,constchar *file); /** *@brief播放列表序號音頻 *@paramfile_list 文件列表 [1, 2, 3] *@paramnum 列表序號 *@retval0 操作成功 *@retval-1 操作失敗 */ intuser_player_reply_list_num(constchar *file_list,intnum); /** *@brief隨機播放列表音頻 *@paramfile_list 文件列表 [1, 2, 3] *@retval0 操作成功 *@retval-1 操作失敗 */ intuser_player_reply_list_random(constchar *file_list); /** *@brief順序播放列表中所有音頻 *@paramfile_list 文件列表 [1, 2, 3] *@retval0 操作成功 *@retval-1 操作失敗 */ intuser_player_reply_list_in_order(constchar *file_list); /** *@brief停止播放 *@paramtype 播放類型 *@retval0 操作成功 *@retval-1 操作失敗 */ intuser_player_stop(AUDIO_PLAY_TYPE type); /** *@brief設置最小音量 */ intuser_player_set_volume_min(void); /** *@brief設置最大音量 */ intuser_player_set_volume_max(void); /** *@brief設置中等音量 */ intuser_player_set_volume_mid(void); /** *@brief增加音量 */ intuser_player_set_volume_up(void); /** *@brief減小音量 */ intuser_player_set_volume_down(void); /** *@brief設置喇叭靜音 */ intuser_player_speaker_mute(void); /** *@brief取消設置喇叭靜音 */ intuser_player_speaker_unmute(void); /** *@brief系統(tǒng)進入無回復播報模式 */ intuser_player_shutup_mode(void); /** *@brief系統(tǒng)退出無回復播報模式 */ intuser_player_shutup_exit(void); /** @}*/ #ifdef __cplusplus } #endif #endif
上述為所有用戶音頻播放函數(shù)定義。功能相當豐富,包括了音頻的播放和音量的調節(jié),而正好對應的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生成一段音頻數(shù)據(jù)。并且命名為109放到tones目錄下。
5、修改原本代碼中播放的 9.MP3 ,拷貝到tones目錄下的109。
#include"user_player.h" #defineTAG"player_demo" staticvoid_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); } } staticResult _create_player_test_thread(void) { thread_param param; uni_pthread_tpid; 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"); returnE_FAILED; } uni_pthread_detach(pid); returnE_OK; } inthb_player(void){ _create_player_test_thread(); return0; }
這段代碼創(chuàng)建了一個獨立線程,在線程中循環(huán)執(zhí)行音頻播放測試。它先依次設置播放器的音量為最小、中等和最大,然后分別調用接口播放單個指定文件、播放列表中的特定文件、隨機播放播放列表中的文件,以及順序播放整個播放列表。
每次操作后線程都會短暫休眠,保證播放流程有序進行。該代碼用于驗證播放器在不同音量和播放模式下的功能是否正常。
6、燒錄和測試
實驗現(xiàn)象
系統(tǒng)上電后等待初始化后 “你好我是小美”將優(yōu)先被播放, 之后進行音量調整并且循環(huán)往復。 這里會存在一個問題即,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 中被定義。
所以自定義的音頻文件最好和這個定義的采樣率保持一致,否則會出現(xiàn)采樣率不匹配出現(xiàn)奇怪的聲音。
如上圖所示,創(chuàng)建的音頻文件的采樣率為24000, 所以下載到VC-02中, 音頻播放的時候會很奇怪(屬于正?,F(xiàn)象)。
-
音頻
+關注
關注
31文章
3099瀏覽量
84522 -
SDK
+關注
關注
3文章
1091瀏覽量
50669 -
語音模組
+關注
關注
0文章
15瀏覽量
1686
原文標題:【離線語音】安信可VC-01/02二次開發(fā)篇:自定義音頻播放控制
文章出處:【微信號:安信可科技,微信公眾號:安信可科技】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
HarmonyOS應用自定義鍵盤解決方案
如何通過SDK功能獲取esptouch v2 apk的自定義數(shù)據(jù)?
SIMULINK線的處理/SIMULINK自定義功能模塊
如何給EOS賬號設置自定義權限
如何開發(fā)與自定義應用的音頻分類模
C#與STM32自定義通信協(xié)議

適用于鴻蒙的自定義組件框架Carbon案例教程
自定義視圖組件教程案例
自定義算子開發(fā)

評論