chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用SDK進行自定義音頻播放功能

安信可科技 ? 來源:安信可科技 ? 2025-09-25 15:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

簡介

在本篇文章中將介紹如何使用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

9f1c1092-921d-11f0-8c8f-92fbcf53809c.png



3、查找這個宏,檢查SDK是否支持。

9f77a1c8-921d-11f0-8c8f-92fbcf53809c.png



可以從上述user_main的入口宏判斷得知,USER_DEMO_I2C_TIMEUSER_DEMO_SPI_LCD是不被支持的,而hb_player則沒問題。

4、使用TTS maker生成一段音頻數(shù)據(jù)。并且命名為109放到tones目錄下。

9fdd66fc-921d-11f0-8c8f-92fbcf53809c.png



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、燒錄和測試

a03d6570-921d-11f0-8c8f-92fbcf53809c.png


實驗現(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中進行了定義。

a0a814a6-921d-11f0-8c8f-92fbcf53809c.png



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

a110aff2-921d-11f0-8c8f-92fbcf53809c.png



所以自定義的音頻文件最好和這個定義的采樣率保持一致,否則會出現(xiàn)采樣率不匹配出現(xiàn)奇怪的聲音。

a16fb4c0-921d-11f0-8c8f-92fbcf53809c.png



如上圖所示,創(chuàng)建的音頻文件的采樣率為24000, 所以下載到VC-02中, 音頻播放的時候會很奇怪(屬于正?,F(xiàn)象)。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 音頻
    +關注

    關注

    31

    文章

    3099

    瀏覽量

    84522
  • SDK
    SDK
    +關注

    關注

    3

    文章

    1091

    瀏覽量

    50669
  • 語音模組
    +關注

    關注

    0

    文章

    15

    瀏覽量

    1686

原文標題:【離線語音】安信可VC-01/02二次開發(fā)篇:自定義音頻播放控制

文章出處:【微信號:安信可科技,微信公眾號:安信可科技】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    HarmonyOS應用自定義鍵盤解決方案

    自定義鍵盤是一種替換系統(tǒng)默認鍵盤的解決方案,可實現(xiàn)鍵盤個性化交互。允許用戶結合業(yè)務需求與操作習慣,對按鍵布局進行可視化重構、設置多功能組合鍵位,使輸入更加便捷和舒適。在安全防護層面,自定義
    的頭像 發(fā)表于 06-05 14:19 ?1237次閱讀

    如何通過SDK功能獲取esptouch v2 apk的自定義數(shù)據(jù)?

    、SC_STATUS_GETTING_SSID_PSWD、SC_STATUS_LINK和SC_STATUS_LINK_OVER。我的問題是如何通過 SDK 功能獲取 esptouch v2 apk 的自定義數(shù)據(jù)? 非常感謝!
    發(fā)表于 07-15 07:20

    SIMULINK線的處理/SIMULINK自定義功能模塊

    SIMULINK線的處理/SIMULINK自定義功能模塊     SIMULINK模型的構建是通過用線將各種功能模塊進行連接而構成的。用鼠標可以
    發(fā)表于 06-19 12:51 ?6036次閱讀

    1602自定義字符

    1602液晶能夠顯示自定義字符,能夠根據(jù)讀者的具體情況顯示自定義字符。
    發(fā)表于 01-20 15:43 ?1次下載

    如何給EOS賬號設置自定義權限

    EOS 賬號默認有 owner 和 active 兩個權限,除了默認權限外,我們還可以給EOS賬號設置自定義權限,權限的名稱和功能都可以根據(jù)自己的需要進行自定義。
    發(fā)表于 09-03 10:29 ?1809次閱讀

    如何開發(fā)與自定義應用的音頻分類模

    在 Google I/O 大會上我們分享了一套教程,幫大家在音頻方面使用機器學習。在這篇文章中,您可找到一些相關資源,幫助開發(fā)與自定義應用的音頻分類模型,以及激發(fā)靈感的真實案例。 音頻
    的頭像 發(fā)表于 10-11 10:08 ?3642次閱讀

    C#與STM32自定義通信協(xié)議

    C#與STM32自定義通信協(xié)議功能:1.可通過C#上位機對多臺STM32下位機進行控制2.自定義上位機與下位機通信協(xié)議
    發(fā)表于 12-24 18:59 ?39次下載
    C#與STM32<b class='flag-5'>自定義</b>通信協(xié)議

    Labview自定義右鍵快捷菜單功能實用小技巧

    Labview自定義右鍵快捷菜單功能實用小技巧
    發(fā)表于 02-11 11:27 ?27次下載

    適用于鴻蒙的自定義組件框架Carbon案例教程

    單元測試或原項目api進行使用 支持功能 支持自定義progressBar功能 支持自定義RoundProgressBar
    發(fā)表于 04-07 09:49 ?5次下載

    自定義視圖組件教程案例

    自定義組件 1.自定義組件-particles(粒子效果) 2.自定義組件- pulse(脈沖button效果) 3.自定義組件-progress(progress效果) 4.
    發(fā)表于 04-08 10:48 ?15次下載

    ArkUI如何自定義彈窗(eTS)

    自定義彈窗其實也是比較簡單的,通過CustomDialogController類就可以顯示自定義彈窗。
    的頭像 發(fā)表于 08-31 08:24 ?3212次閱讀

    Arduino Nano上的自定義定時器功能

    電子發(fā)燒友網站提供《Arduino Nano上的自定義定時器功能.zip》資料免費下載
    發(fā)表于 10-26 14:26 ?0次下載
    Arduino Nano上的<b class='flag-5'>自定義</b>定時器<b class='flag-5'>功能</b>

    labview自定義控件

    labview自定義精美控件
    發(fā)表于 05-15 16:46 ?22次下載

    自定義算子開發(fā)

    一個完整的自定義算子應用過程包括注冊算子、算子實現(xiàn)、含自定義算子模型轉換和運行含自定義op模型四個階段。在大多數(shù)情況下,您的模型應該可以通過使用hb_mapper工具完成轉換并順利部署到地平線芯片上……
    的頭像 發(fā)表于 04-07 16:11 ?4450次閱讀
    <b class='flag-5'>自定義</b>算子開發(fā)

    labview超快自定義控件制作和普通自定義控件制作

    labview超快自定義控件制作和普通自定義控件制作
    發(fā)表于 08-21 10:32 ?14次下載