1.makefile:定義了一系列的規則來指定哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至於進行更復雜的功能操作,因為 makefile就像一個Shell腳本一樣,也可以執行操作系統的命令。makefile文件保存了編譯器和連接器的參數選項,還表述了所有源文件之間的關系(源代碼文件需要的特定的包含文件,可執行文件要求包含的目標文件模塊及庫等).創建程序(make程序)首先讀取makefile文件,然后再激活編譯器,匯編器,資源編譯器和連接器以便產生最后的輸出,最后輸出並生成的通常是可執行文件.創建程序利用內置的推理規則來激活編譯器,以便通過對特定CPP文件的編譯來產生特定的OBJ文件。
2.cmake:是一個跨平台、開源的構建系統。它是一個集軟件構建、測試、打包於一身的軟件。它使用與平台和編譯器獨立的配置文件來對軟件編譯過程進行控制。
3. 音頻管道負責控制音頻數據流並將音頻元素與環形緩沖區連接。它將按順序連接並啟動音頻元素,負責從上一個元素中檢索數據,並將其傳遞到其后的元素。還從每個元素獲取事件,處理事件或將其傳遞到更高層。
4.音頻元素:每個元素實際上是一個Task。初始化配置參數中都有對任務棧大小、任務優先級、任務運行的core、以及輸出ringbuffer和元素使用的buffer的大小。這些任務將會執行回調(打開、讀取、處理、寫入、關閉)。
5.音頻事件:通過Event來建立管道Pipeline中各音頻元素Elements之間的通信。這是圍繞FreeRtos的隊列來建立的。Event通過listeners來監視傳入的msg並通過回調函數來通知。
6.常用命令:
idf.py set-target esp32 設置目標芯片
idf.py menuconfig 工程配置
idf.py build 編譯工程
idf.py -p COM7 [-b BAUD] flash 燒錄工程
idf.py -p COM7 monitor 監視運行情況
idf.py -p PORT flash monitor 一次性的構建、燒錄、監視
7.extern const uint8_t adf_music_mp3_start[] asm("_binary_adf_music_mp3_start"); //asm是嵌入匯編語法
esp_log_level_set("*", ESP_LOG_WARN); //重置所有日志記錄等級
esp_log_level_set(TAG, ESP_LOG_INFO); //設置tag標識日志的記錄等級
algorithm stream是回聲處理,喚醒詞處理加入到里面數據流,tone stream則是另外一種flash操作方法。
8.消息事件是通過消息隊列實現的,使用audio_event_iface_init(&evt_cfg);完成創建隊列,然后通過audio_pipeline_set_listener(pipeline, evt); 將隊列指針與pipeline中的隊列指針關聯,以達到通過獲取這個消息隊列內容就可以獲取整個pipeline的目的。在實際使用過程中,在主循環中循環調用 audio_event_iface_listen獲取當前pipeline的消息。
9.ringbuffer是一種環形緩沖區,這種緩沖區不僅用作數據緩沖同樣也用於連接 audio element ,沒element 向ringbuffer請求數據時都會導致ringbuffer任務阻塞,直到ringbufer中的數據可以使用這個任務才可以繼續執行。
10.I2S Stream:audio streams 的作用就是負責獲取音頻數據並在處理后將數據發送出去的音頻元素(audio element)稱為音頻流。
11.http stream一般作為整個管道的最后一個元素或第一個元素,用於讀取http 音頻流或者是將音頻流發送到http 服務器中。
12.audio_element對象是使用ADF開發的應用程序的基本構建塊。實際上,每個解碼器,編碼器,濾波器,輸入流或輸出流都是音頻元素。Element的一般功能是在輸入中獲取一些數據,對其進行處理,然后輸出到下一個。每個元素都作為單獨的任務運行。為了能夠控制從輸入,處理到輸出的數據生命周期的特定階段,audio_element對象提供了在每個階段觸發回調. 可用的回調函數有七種類型:打開,查找,處理,關閉,銷毀,讀取和寫入。
13.pipeline中由一個一個element組成,每個element之間由ringbuf連接在一起。音頻管道還負責將消息從元素任務轉發到應用程序,每一個元素都是一個基於freeRTOS的任務,它們直接想要完成通信就必須通過管道中的消息隊列。
14.pipeline 中的成員rb_list 是一個ringbuf鏈表,用於關聯管道中的ringbuf和el_list 的一樣,也是通過STAILQ_HEAD對其進行定義,定義一個鏈表頭和鏈表尾。
15.audio_event_iface_handle_t listener; 這是一個事件監聽接口。管道的所有事件都一個通過這個接口向外界發送,audio_event_iface_handle_t 也是esp-adf中一個比較重要的結構體。
16.
GPIO_INTR_DISABLE //禁用GPIO中斷
GPIO_INTR_POSEDGE //GPIO中斷類型:上升沿
GPIO_INTR_NEGEDGE //下降沿
GPIO_INTR_ANYEDGE //上升沿和下降沿
GPIO_INTR_LOW_LEVEL //輸入低電平觸發
GPIO_INTR_HIGH_LEVEL //輸入高電平觸發