Bui~ LE audio完整協議公布了,可喜可賀,可喜可賀。那么這篇我們就,還是沒什么可聊的→_→。目前ADK相關完整版本還沒發布,source也沒有可用的,所以,先放著吧。
這篇我們來聊聊第三者,從前我們的mic基本上都是用模擬的或是數字的。有些廠商不滿足當前mic的功能(說人話就是不滿足cvc的功能),因此他們會叫外賣——加外置的DSP,去新增自己想要的音頻處理。外置DSP輸出方式大部分都是用i2s接口,而代碼并沒有接納這第三種接口,基本上都要自己修改代碼去實現。_(:з)∠)_ 隨著時間的推進,現實總得要接受的。在新的芯片系列中,引進了骨傳導的cvc,而對應的骨傳導音頻接口的實現代碼也被加入到ADK中,另外這部分代碼也被同步到304x系列的ADK中了?(????ω????)?。雖然默認代碼是用PCM接口,但是稍微修改下就可以適配其他類型的音頻接口。下面就帶大家怎么去使用起來。
首先,默認的接口是用INCLUDE_LIS25BA_ACCELEROMETER這個宏定義,搜索這個宏定義就知道他使用了什么東西了。其中我們先看這里面mic的配置
這里面框出來的mic type相對于以前的analog和digital,只是多加了個pcm。如果你不是pcm接口的話,可以自己添加一個定義,然后修改對應的處理,這里小編比較懶,直接用這個pcm,然后修改他的處理(建議大家勤奮點,多加一個定義)。后面兩個參數instance和channel我就不多說了,懂的都懂。
接著就是要修改對應配置的處理代碼,在獲取source的時候,pcm的類型是獲取pcm的source的,如果是別的音頻接口就需要修改getAudioSource這里
我是用i2s接口,就換成AUDIO_HARDWARE_I2S,后面的instance和channel就是沿用上面的配置。獲取到source之后,對source的配置也需要跟著修改。因為不同類型的source,對應的配置key是不一樣的,這個要在AudioPcmCommonConfigureSource中修改
(可以看到,直接修改看起來比較亂也不好管理(#^.^#),所以大家選擇添加的方式)
另外這里面用到兩個callback的函數,一個是獲取配置的,一個是初始化的。接下來我們就要說說這些callback函數怎么弄。
在EarbudInit_StartInitialisation函數中有個AudioPcmCommonRegisterUser(&Peripherals_Lis25baRegistry),這個語句就是用來注冊callback函數的,參數Peripherals_Lis25baRegistry中,我們只關注其中的callback有哪些。
AudioPcmCommonGetPcmInterfaceSetting:這個是用來獲取config的函數,這里是pcm參數的配置。如果不是pcm,可以不用,直接在代碼中固定,或者修改,或者添加別的參數格式。
AudioPcmCommonInitializeI2cInterface:這是控制接口的初始化,有些ic需要額外控制接口去寫指令,這里就需要事先把這接口初始化,還可以把外部ic也初始化。雖然變量名寫的是i2c,但是實際使用時,根據情況可以換成spi,uart等別的控制接口,或者不用也可以。
AudioPcmCommonEnableDevice和AudioPcmCommonDisableDevice:這兩個函數就是用來打開和關閉外部ic的,通過上面初始化的接口,給ic發送控制指令。注冊完這些函數之后,系統就會在通話建立時,自動初始化、配置、使能外部ic,在通話結束時,關閉外部ic。
除此之外,當外部ic的輸入采樣率和系統通話時用的不一樣的時候,例如,輸入是48k,而通話只需要16k。還可以對其進行重采樣,這個在默認代碼kymera_ConnectUserWithMic函數中也有實現的,這里輸入采樣率固定為16k,如果系統不是用16k就進行重采樣。
好了,以上是本期博文的全部內容,如有疑問就別在博文下方評論留言了,有什么疑問或想了解的當面和我說(如果你知道我是誰的話ヽ( ̄▽ ̄)?),我會盡量安排上(o′ω`o)?。謝謝大家瀏覽,我們下期再見。
-
藍牙
+關注
關注
114文章
5830瀏覽量
170469
發布評論請先 登錄
相關推薦
評論