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文章
5803浏览量
170148
发布评论请先 登录
相关推荐
评论