天天看點

語音服務适配指南

1. 概述

語音服務元件提供關鍵詞識别和語音資料的處理控制。輸入麥克風的語音資料經過回音消除降噪和關鍵詞識别處理後再輸出到應用層使用。YoC在語音服務接口和算法實作之間增加了适配層,友善多種語音算法的接入,保持了應用代碼的統一。

下圖以SC5654晶片雙核架構為例,适配層利用核間通訊,實作應用與DSP算法的資料互動。

語音服務适配指南

2. 适配接口

2.1 語音服務适配接口

語音服務适配接口注冊在mic_ops結構體中,詳細資訊如下:

元件:mic

頭檔案:

語音服務的适配接口如下:

語音服務适配指南

2.2 應用接口映射

應用通過調用應用層API,操作對應語音服務适配接口,語音服務開發者隻需實作适配接口定義。使用者無需修改代碼,即可遷移至對應語音服務上。

應用API與語音服務适配接口映射如下:

語音服務适配指南

3. 接口說明

2.2 init

函數原型

int (*init) (mic_t *mic, mic_event_t mic_event);           

功能描述

語音服務初始化,在應用調用aui_mic_start時會調用該接口。若有私有資料需要儲存,可通過函數mic_set_privdata将其儲存在mic->priv私有成員指針中。設定後,其他适配函數就可以通過函數mic_get_privdata擷取該指針。語音服務層通過應用注冊的mic_event回調函數将語音事件傳遞給應用層。

參數描述

語音服務适配指南

相關定義

語音服務适配指南

傳回值

語音服務适配指南

2.3 deinit

int (*deinit) (mic_t *mic);           

應用接口aui_mic_stop執行時會調用該适配接口釋放資源。

語音服務适配指南

2.3 kws_control

int (*kws_control) (mic_t *mic, int flag);           

關鍵詞識别使能控制。

語音服務适配指南

2.4 kws_wake

int (*kws_wake) (mic_t *mic, int flag);
           

強制算法發出一個模拟喚醒事件。

語音服務适配指南

2.5 pcm_data_control

int (*pcm_data_control) (mic_t *mic, int flag);
           

控制算法輸出的音頻流的開關。

語音服務适配指南

2.6 pcm_aec_control

int (*pcm_aec_control) (mic_t *mic, int flag);
           

控制算法是否使能回音消除。

語音服務适配指南

2.7 pcm_set_param

int (*pcm_set_param) (mic_t *mic, void *param);
           

初始化語音算法參數。

語音服務适配指南
語音服務适配指南

2.8 mic_set_privdata

int mic_set_privdata(void *priv);
           

設定适配私有資料到mic對象。

語音服務适配指南

2.9 mic_get_privdata

void *mic_get_privdata(void);
           

擷取mic對象中的私有資料指針。

語音服務适配指南

2.10 mic_ops_register

int mic_ops_register(mic_ops_t *ops);
           

注冊适配層,一般增加一個适配需要實作一個新的函數封裝該函數,提供一個簡單的注冊函數供應用使用。

語音服務适配指南

3 适配示例

适配完成所有接口函數後,定義适配接口結構體,完成函數注冊。

示例如下:

/* 适配接口結構體 */
static mic_ops_t mic_adp_ops = {
    .init = mic_adaptor_init,
    .deinit = mic_adaptor_deinit,
    .kws_control = mic_adaptor_kws_control,
    .kws_wake = mic_adaptor_kws_wake,
    .pcm_data_control = mic_adaptor_pcm_data_control,
    .pcm_aec_control = mic_adaptor_pcm_aec_control,
    .pcm_set_param = mic_adaptor_set_param,
    .pcm_get_param = mic_adaptor_get_param,
};

/* 注冊函數 */
void mic_thead_v1_register(void)
{
    mic_ops_register(&mic_adp_ops);
}           

文章來源:晶片開放社群

文章連結:

https://occ.t-head.cn/community/post/detail?spm=a2cl5.14300636.0.0.1b87180flWxVN5&id=3772275121524969472

繼續閱讀