6. MT6580 android6.0平台上的喇叭听筒二合一的实现

 

 

MT6580 android6.0平台上的喇叭听筒二合一的实现

参考文档:https://onlinesso.mediatek.com/Pages/FAQ.aspx?List=SW&FAQID=FAQ14283

当前V118上使用的喇叭听筒二合一接法是:听筒的声音从PMU MT6350的AU_HPR输出到外置功放,再由外置功放输出HSP_OUT和HSN_OUT,最后输出到喇叭听筒二合一器件上,如图(1)、图(2)、图(3)

 

图(1)

 

图(2)

 

图(3)

软件实现

(一)   通路的切换

80_c_m\update\alps\vendor\mediatek\proprietary\hardware\audio\mt6580\aud_drv\AudioALSAHardwareResourceManager.cpp

status_t AudioALSAHardwareResourceManager::OpenReceiverPath(const uint32_t SampleRate)

{

    #ifdef ENABLE_XMLCONFIG

    if (IsAudioSupportFeature(AUDIO_SUPPORT_2IN1_SPEAKER))

    {

        mDeviceConfigManager->ApplyDeviceTurnonSequenceByName(AUDIO_DEVICE_2IN1_SPEAKER);

    }

    else

    {

             #ifndef KST_AUDIO_SUPPORT_2IN1_SPEAKER

        mDeviceConfigManager->ApplyDeviceTurnonSequenceByName(AUDIO_DEVICE_RECEIVER);

        #else

                   mDeviceConfigManager->ApplyDeviceTurnonSequenceByName(AUDIO_DEVICE_HEADPHONE);       //声音从耳机通路输出

                   mDeviceConfigManager->ApplyDeviceTurnonSequenceByName(AUDIO_DEVICE_EXT_SPEAKER);     //打开外置功放使能

                   #endif

    }

    #else

    AudioALSACodecDeviceOutReceiverPMIC::getInstance()->open();

    #endif

    return NO_ERROR;

}

status_t AudioALSAHardwareResourceManager::CloseReceiverPath()

{

    ALOGD("%s(), AUDIO_DEVICE_OUT_EARPIECE", __FUNCTION__);

    #ifdef ENABLE_XMLCONFIG

    if (IsAudioSupportFeature(AUDIO_SUPPORT_2IN1_SPEAKER))

    {

        mDeviceConfigManager->ApplyDeviceTurnoffSequenceByName(AUDIO_DEVICE_2IN1_SPEAKER);

    }

    else

    {

             #ifndef KST_AUDIO_SUPPORT_2IN1_SPEAKER

        mDeviceConfigManager->ApplyDeviceTurnoffSequenceByName(AUDIO_DEVICE_RECEIVER);

        #else

                   mDeviceConfigManager->ApplyDeviceTurnoffSequenceByName(AUDIO_DEVICE_EXT_SPEAKER);    //声音从耳机通路输出

                   mDeviceConfigManager->ApplyDeviceTurnoffSequenceByName(AUDIO_DEVICE_HEADPHONE);     //打开外置功放使能

                   #endif

    }

    #else

    AudioALSACodecDeviceOutReceiverPMIC::getInstance()->close();

    #endif

    return NO_ERROR;

}

(二)   声音的调节

(1)把听筒的参数值调低,把喇叭的参数值调高

80_c_m\update\alps\kst\drv\audio_para\v118_p3_audio_para\audio_ver1_volume_custom_default.h

--- a/update/alps/kst/drv/audio_para/v118_p3_audio_para/audio_ver1_volume_custom_default.h

+++ b/update/alps/kst/drv/audio_para/v118_p3_audio_para/audio_ver1_volume_custom_default.h

@@ -129,10 +129,10 @@

     32,48,64,80,96,112,128,144,160,176,192,208,224,255,255

 

 #define VER1_AUD_VOLUME_SPH \

-    40,60,80,100,120,130,148,0,0,0,0,0,0,0,0,\

-    40,52,64,76,88,100,112,0,0,0,0,0,0,0,0,\

-    48,60,72,84,96,108,120,0,0,0,0,0,0,0,0,\

-    40,52,64,76,88,100,112,0,0,0,0,0,0,0,0

+    10,15,20,25,30,35,40,0,0,0,0,0,0,0,0,\

+    10,15,20,25,30,35,40,0,0,0,0,0,0,0,0,\

+    100,110,120,130,140,150,160,0,0,0,0,0,0,0,0,\

+    10,15,20,25,30,35,40,0,0,0,0,0,0,0,0

 

(2)把SetReceiverGain改为SetHeadPhoneRGain,设置听筒的改为设置HeadPhoneR的,否则听筒的声音会时大时小

80_c_m\update\alps\vendor\mediatek\proprietary\hardware\audio\mt6580\aud_drv\AudioALSAVolumeController.cpp

status_t AudioALSAVolumeController::ApplyVoiceGain(int degradeDb, audio_mode_t mode, uint32_t device)

{

……

    if (device & AUDIO_DEVICE_OUT_EARPIECE)

    {

        ALOGD("DigitalgradeDb = %d Enh1degradeDb = %d VoiceAnalogRange = %d ", DigitalgradeDb, Enh1degradeDb, VoiceAnalogRange);

       

        if (IsAudioSupportFeature(AUDIO_SUPPORT_2IN1_SPEAKER))

        {

            ApplyMdDlGain(DigitalgradeDb);

            ApplyMdDlEhn1Gain(Enh1degradeDb);

            SetReceiverGain(VoiceAnalogRange);

        }

        else

        {

            ApplyMdDlGain(DigitalgradeDb);

            ApplyMdDlEhn1Gain(Enh1degradeDb);

            #ifndef KST_AUDIO_SUPPORT_2IN1_SPEAKER

            SetReceiverGain(VoiceAnalogRange);

            #else

            SetHeadPhoneRGain(VoiceAnalogRange);

            SetHeadPhoneLGain(VoiceAnalogRange);

            #endif

        }

        if (AudioALSASpeechPhoneCallController::getInstance()->checkTtyNeedOn() == false)

        {

            ApplyMicGain(Normal_Mic, mode); // set incall mic gain

        }

    }

……

}

 

int AudioALSAVolumeController::ApplyAudioGainTuning(int Gain, uint32_t mode, uint32_t device)

{

……

    switch (device)

    {

        case Audio_Earpiece:

        {

            if (VoiceAnalogRange >= (_countof(DL_PGA_Handset_GAIN) - 1))

            {

                VoiceAnalogRange = _countof(DL_PGA_Handset_GAIN) - 1;

            }

            if (IsAudioSupportFeature(AUDIO_SUPPORT_2IN1_SPEAKER))

            {

                SetReceiverGain(VoiceAnalogRange);

            }

            else

            {

                     #ifndef KST_AUDIO_SUPPORT_2IN1_SPEAKER

                SetReceiverGain(VoiceAnalogRange);

              #else

                               SetHeadPhoneRGain(VoiceAnalogRange);

                               SetHeadPhoneLGain(VoiceAnalogRange);

              #endif

            }

            break;

        }

……

}

 

备注:如果听筒的声音从PMU MT6350的内置功放的AU_SPKP和AU_SPKN输出到HSP_OUT和HSN_OUT,最后输出到喇叭听筒二合一器件上的,也可以参考以上方法更改通路来实现。

转载于:https://www.cnblogs.com/f888/p/8041803.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值