下面来说下LINEIN 模式,主要是用来给自己做个备份,方便以后自己查看等
我们都知道LINEIN模式有进过蓝牙芯片处理和直接输出两种情况。
1、进过蓝牙芯片:这种情况是需要我们在软件上去做处理了,下面会说应怎么在代码里实现
2、直接输出:这种情况是通过3.5mm的座子直接将音频信号输出到喇叭,中间不需要做处理,所以软件上就不需要做什么处理了。这种相对于软件来说是最简单的,软件上不需要做任何操作,只需硬件上实现就好。
一般在BES的代码中都有LINEIN 模式相关的代码,所该部分的代码都在 AUDIO_LINEIN 宏中定义着的。所以想使用LINEIN功能的时候就需要将宏打开。
嘿嘿,在打开AUDIO_LINEIN 宏的时候你会发现在 mk 文件中没有定义该宏
这样的情况我们应该怎么办呢,他原始代码都没有定义这个宏,那会不会是不支持LINEIN 的功能呢?
不要慌,我们可以自己添加一个宏定义。就像是自己添加一个宏定义一样,如下图:
添加好宏定义之后就是配置好LINEIN的输入了。
讲到输入我要提个醒,不能单端输入,LINEIN的左右声道需要分别对应一个mic+作为输入。否则会出现问题。下面说下有哪些问题:
1、在刚刚进入该模式的时候就会出现死机,死机的log就不放上来了。下面截图看下死机的部分
上图我们都可以看得出来,代码中已经将这里的通道是2。当然了你也可以将该部分修改为通道1,修改之后再进入该模式的时候是不会出现死机,但是会导致出现第二种问题了
2、输出的音质很差,人声基本上没有
好了,上面就是单端输入导致出现的问题,也就表示这LINEIN模式不能使用一个mic作为LINEIN的左右声道的输入。下面贴出正确的接线图
现在硬件上需要注意的地方已经解决了,下面就来说下 LINEIN 的输入配置了。我们在tgt_hardware.c中可以看到LINEIN相关的配置,所以我们只需配置好输入的mic口就好
以上的这些配置好之后就可以正常的使用了,代码中不需要更改一些东西都是好的。
下面就是调用了直接调用下面的函数就使用LINEIN了
#ifdef AUDIO_LINEIN
app_audio_manager_sendrequest(APP_BT_STREAM_MANAGER_START,BT_STREAM_LINEIN, BT_DEVICE_ID_1,MAX_RECORD_NUM);
#endif
通过上面的函数我们可以看出来,第二个参数就被我们设置成了LINEIN模式了。所以在进入这个模式之前会将BT或者USB模式下的音频通道关闭再打开LINEIN模式的音频通道。
如果我不想用LINEIN模式想用BT模式了,那么我们就需要怎么操作呢?
首先将LINEIN模式下的通道关闭 app_audio_manager_sendrequest(APP_BT_STREAM_MANAGER_STOP,BT_STREAM_LINEIN, BT_DEVICE_ID_1,MAX_RECORD_NUM);
然后打开BT模式下的通道
app_audio_manager_sendrequest(APP_BT_STREAM_MANAGER_START,BT_STREAM_MEDIA, BT_DEVICE_ID_1,MAX_RECORD_NUM);
当然在切换的过程中需要注意会出现死机的情况,具体出现怎么样死机需要拿到机器调试,这里就不过多的说了。
注意:默认情况下LINEIN的输入增益是根据mic的增益去设置,所以使用的时候需要自己重新更改增益
增益对应的数组如下图:
对应的值有下图中的增益决定
上面图中的增益也是通话中的。
LINEIN模式下的输入增益在哪里修改一下忘记了,只能后面做到这个功能在去找了。