audio_element:html
開發基於ADF的程序軟件最基本的模塊就是audio_element對象。全部的編碼、解碼、過濾、輸入流、輸出流實際上都是audio_element。(這個是官方的文件我翻譯過來的,講了個什麼玩意我也搞不明白,反正就是說audio_element很重要,是玩ADF的最廣泛存在)api
ADF的API就是用來執行audio_element的;服務器
Element的通用功能就是從input得到數據,而後處理數據,而後輸出到下一級Element;(這個地方輸出到下一級element是我根據語境猜想的,不知道對不對,反正人家英文就說輸出到next,沒有具體說輸出給誰)。每一個Element就像一個單獨的任務;爲了在數據的全週期(包括輸入、處理、輸出)上實現徹底控制,audio_element提供了在數據週期各個階段的回調函數。回調函數的類型包括:打開、處理、關閉、銷燬、讀寫,這些回調函數均可以在audio_element_cfg_t中找到;有些特別的Element甚至用到了全部的可用的回調函數,好比:MP3_Decoder就採用了打開、處理、關閉、銷燬等等回調函數;app
audio_element的類型都在audio_common.h頭文件中audio_element_type_t這個枚舉變量中包括了;函數
Every decoder, encoder, filter, input stream, or output stream is in fact an Audio Element(感受這句話比較形象,直接粘貼過來),翻譯:實際上編碼器、解碼器、過濾器、輸入流、輸出流實際上都是音頻元素;編碼
audio_pipeline:spa
audio_pipeline能夠將一組audio_element組合到一塊兒,用戶是用audio_pipeline的形式來處理數據而不是用單個的audio_element。每一個audio_element都鏈接了一個環形緩衝區。audio_pipeline也負責處理從audio_element到application的信息傳遞;翻譯
Event_Interfacecode
在同一個pipeline裏面的audio_elenment之間的交流是經過Event_Interface的API實現的;這些API創建在free-rtos隊列的基礎上;用listeners監聽數據,用回調函數通知這些數據信息;htm
audio stream:
audio_element把數據引進來,而後處理,最後發出去。這整個的過程就叫作audio_stream。audio_stream類型以下:
舉例:用結構體來定義audio_stream的類型,好比I2S stream就用i2s_stream_dfg_t來定義,還須要audio_stream_type_t配合才能完成定義;
audio_processing:
ADF提供了一些處理音頻的API:
Downmix:把兩條音頻組合到一塊兒;
Equalizer:均衡器(我也沒看懂);
resample filter: 改變音頻的頻率和單雙通道轉換;
Sonic:處理音頻毛刺和速度;
services:
ADF提供了services用於語音硬件和服務器的交互,或者和外界藍牙的交互;
Speech Recogniton:
喚醒詞詞庫加上語音識別接口能夠識別喚醒命令。大多數喚醒命令是中文的,有一個英文喚醒命令是:Alexa
speech recognition 包括自主語音識別,好比:voice activity detection 和 speech recording engine.