⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aud_audio.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 5 页
字号:
        aud_context_p->audio_param.selected_FIR_output_index = req_p->audio_param.selected_FIR_output_index;
        kal_mem_cpy(
            aud_context_p->audio_param.speech_common_para,
            req_p->audio_param.speech_common_para,
            (sizeof(kal_uint16) * 12));
        kal_mem_cpy(
            aud_context_p->audio_param.speech_mode_para,
            req_p->audio_param.speech_mode_para,
            (sizeof(kal_uint16) * 64));
        aud_context_p->audio_param.max_swing = req_p->audio_param.max_swing;

        L1SP_LoadCommonSpeechPara(aud_context_p->audio_param.speech_common_para);
        /* set audio path and volume */
        aud_set_aud_path_volume(aud_context_p->audio_mode);

        /* set max swing for sw synthesizer */
        aud_melody_set_max_swing(aud_context_p->audio_param.max_swing);

        /* write to NVRAM */
        param_p = &req_p->audio_param;
        data_p = param_data;
        kal_mem_cpy(data_p, aud_context_p->audio_param.FIR_input_coeff[0], (sizeof(kal_uint16) * 30));
        data_p += (sizeof(kal_uint16) * 30);
        kal_mem_cpy(data_p, aud_context_p->audio_param.FIR_output_coeff[0], (sizeof(kal_uint16) * 30));
        data_p += (sizeof(kal_uint16) * 30);
        kal_mem_cpy(data_p, aud_context_p->audio_param.FIR_output_coeff[1], (sizeof(kal_uint16) * 30));
        data_p += (sizeof(kal_uint16) * 30);
        kal_mem_cpy(data_p, aud_context_p->audio_param.FIR_output_coeff[2], (sizeof(kal_uint16) * 30));
        data_p += (sizeof(kal_uint16) * 30);
        kal_mem_cpy(data_p, aud_context_p->audio_param.FIR_output_coeff[3], (sizeof(kal_uint16) * 30));
        data_p += (sizeof(kal_uint16) * 30);
        kal_mem_cpy(data_p, aud_context_p->audio_param.FIR_output_coeff[4], (sizeof(kal_uint16) * 30));
        data_p += (sizeof(kal_uint16) * 30);
        kal_mem_cpy(data_p, aud_context_p->audio_param.FIR_output_coeff[5], (sizeof(kal_uint16) * 30));
        data_p += (sizeof(kal_uint16) * 30);
        kal_mem_cpy(data_p, aud_context_p->audio_param.FIR_input_coeff[1], (sizeof(kal_uint16) * 30));
        data_p += (sizeof(kal_uint16) * 30);
        kal_mem_cpy(data_p, aud_context_p->audio_param.FIR_output_coeff[6], (sizeof(kal_uint16) * 30));
        data_p += (sizeof(kal_uint16) * 30);
        kal_mem_cpy(data_p, &(aud_context_p->audio_param.selected_FIR_output_index), (sizeof(kal_uint16) * 1));
        data_p += (sizeof(kal_uint16) * 1);
        kal_mem_cpy(data_p, aud_context_p->audio_param.speech_common_para, (sizeof(kal_uint16) * 12));
        data_p += (sizeof(kal_uint16) * 12);
        kal_mem_cpy(data_p, aud_context_p->audio_param.speech_mode_para, (sizeof(kal_uint16) * 64));
        data_p += (sizeof(kal_uint16) * 64);
        kal_mem_cpy(data_p, &(aud_context_p->audio_param.max_swing), (sizeof(kal_uint16) * 1));
        data_p += (sizeof(kal_uint16) * 1);
        kal_mem_cpy(data_p, aud_context_p->audio_param.Speech_FIR_Input_Coeff_16k_Tbl1, (sizeof(kal_int16) * 62));
        data_p += sizeof(kal_int16) * 62;
        kal_mem_cpy(data_p, aud_context_p->audio_param.Speech_FIR_Output_Coeff_16k_Tbl1, (sizeof(kal_int16) * 62));
        data_p += sizeof(kal_int16) * 62;
        kal_mem_cpy(data_p, aud_context_p->audio_param.Speech_FIR_Input_Coeff_16k_Tbl2, (sizeof(kal_int16) * 62));
        data_p += sizeof(kal_int16) * 62;
        kal_mem_cpy(data_p, aud_context_p->audio_param.Speech_FIR_Output_Coeff_16k_Tbl2, (sizeof(kal_int16) * 62));
        data_p += sizeof(kal_int16) * 62;
        kal_mem_cpy(data_p, aud_context_p->audio_param.Melody_FIR_Output_Coeff_32k_Tbl1, (sizeof(kal_int16) * 45));
        data_p += sizeof(kal_int16) * 45;
        kal_mem_cpy(data_p, aud_context_p->audio_param.Melody_FIR_Output_Coeff_32k_Tbl2, (sizeof(kal_int16) * 45));
        data_p += sizeof(kal_int16) * 45;

        if (med_context_p->nvram_state == MED_POWERON_READING_NVRAM_FINISH)
        {
            aud_send_msg_to_nvram(MSG_ID_NVRAM_WRITE_REQ, NVRAM_EF_AUDIO_PARAM_LID, param_data, sizeof(param_data));
        }
        else
        {
            aud_send_set_audio_param_cnf(MED_RES_FAIL);
        }
    }

}


/*****************************************************************************
 * FUNCTION
 *  aud_get_volume_gain
 * DESCRIPTION
 *  
 * PARAMETERS
 *  mode        [IN]        
 *  type        [IN]        
 *  level       [IN]        
 * RETURNS
 *  
 *****************************************************************************/
kal_uint8 aud_get_volume_gain(kal_uint8 mode, kal_uint8 type, kal_uint8 level)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
#if defined(TV_OUT_SUPPORT)
    if (type == AUD_VOLUME_TVO)
    {
        if (level >= MAX_VOL_LEVEL)
        {
            return 0;
        }
        else
        {
            return aud_context_p->acoustic_data.tv_out_volume_gain[level];
        }
    }
#endif /* TV_OUT_SUPPORT */

    if ((mode >= MAX_VOL_CATE) || (type >= MAX_VOL_TYPE) || (level >= MAX_VOL_LEVEL))
    {
        return 0;
    }

    return aud_context_p->acoustic_data.volume_gain[mode][type][level];
}


/*****************************************************************************
 * FUNCTION
 *  aud_get_volume_level
 * DESCRIPTION
 *  
 * PARAMETERS
 *  mode        [IN]        
 *  type        [IN]        
 * RETURNS
 *  
 *****************************************************************************/
kal_uint8 aud_get_volume_level(kal_uint8 mode, kal_uint8 type)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    if ((mode >= MAX_VOL_CATE) || (type >= MAX_VOL_TYPE))
    {
        return 0;
    }
    return aud_context_p->acoustic_data.volume[mode][type];
}


/*****************************************************************************
 * FUNCTION
 *  aud_set_melody_volume
 * DESCRIPTION
 *  
 * PARAMETERS
 *  mode        [IN]        
 *  level       [IN]        
 * RETURNS
 *  void
 *****************************************************************************/
void aud_set_melody_volume(kal_uint8 mode, kal_uint8 level)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_uint8 analog_gain;
    kal_int8 digital_gain;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    if (!(level & 0x80))
    {
        digital_gain = 0;

    #if defined(TV_OUT_SUPPORT)
        if (mode == VOL_TV_OUT)
        {
            analog_gain = aud_get_volume_gain(mode, AUD_VOLUME_TVO, level);
        }
        else
    #endif /* TV_OUT_SUPPORT */
        {
            analog_gain = aud_get_volume_gain(mode, AUD_VOLUME_MEDIA, level);
        }
        
        aud_melody_set_output_volume(analog_gain, digital_gain); // Adam add
    }
    else
    {
    #ifdef __MED_BT_A2DP_MOD__
    #if defined(__BTMTK__)
        if (aud_bt_a2dp_is_mute_phone())
        {
            return;
        }
    #elif defined(__BTVCSR_HCI_BCHS__)
        if (aud_bt_a2dp_is_media_output_on())
        {
            return;
        }
    #endif
    #endif /* __MED_BT_A2DP_MOD__ */ 
    #ifdef __16_LEVEL_AUDIO_VOLUME__
        level &= 0x0F;
        Media_SetLevelVolume( aud_context_p->acoustic_data.max_melody_volume_gain[mode],
            aud_context_p->acoustic_data.melody_volume_gain_step[mode],
            15 - level); 
    #else
        ASSERT(0);
    #endif /* __16_LEVEL_AUDIO_VOLUME__ */
    }
}


/*****************************************************************************
 * FUNCTION
 *  aud_set_aud_path_volume
 * DESCRIPTION
 *  
 * PARAMETERS
 *  audio_mode      [IN]        
 * RETURNS
 *  void
 *****************************************************************************/
void aud_set_aud_path_volume(kal_uint8 audio_mode)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    audio_param_struct *param_p;
    kal_uint8 volume;
    kal_uint8 gain_audio_mode;

    /* To slove mute flag cleared by speech off */
    kal_bool mute;
    kal_uint8 speech_mode;
    kal_uint8 speech_volume_level;

#ifdef __MED_CTM_MOD__
    kal_bool tty_on;
#endif 

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    param_p = &aud_context_p->audio_param;

    /* for all audio mode */
    Media_SetFilter(MEDIA_FIR_SPEECH_OUTPUT1_16K, 62, param_p->Speech_FIR_Output_Coeff_16k_Tbl1);
    Media_SetFilter(MEDIA_FIR_SPEECH_INPUT1_16K, 62, param_p->Speech_FIR_Input_Coeff_16k_Tbl1);
    Media_SetFilter(MEDIA_FIR_SPEECH_OUTPUT2_16K, 62, param_p->Speech_FIR_Output_Coeff_16k_Tbl2);
    Media_SetFilter(MEDIA_FIR_SPEECH_INPUT2_16K, 62, param_p->Speech_FIR_Input_Coeff_16k_Tbl2);
    Media_SetFilter(MEDIA_FIR_MELODY_OUTPUT1_32K, 45, param_p->Melody_FIR_Output_Coeff_32k_Tbl1);
    Media_SetFilter(MEDIA_FIR_MELODY_OUTPUT2_32K, 45, param_p->Melody_FIR_Output_Coeff_32k_Tbl2);

#ifdef __MED_BT_HFP_MOD__
    if (aud_bt_hfp_is_audio_path_on())
    {
        speech_mode = SPH_MODE_BT_EARPHONE;
    }
    else
#endif /* __MED_BT_HFP_MOD__ */ 
        speech_mode = audio_mode;
    speech_volume_level = aud_get_volume_level(audio_mode, AUD_VOLUME_SPH);

#ifdef __MED_CTM_MOD__
    tty_on = aud_ctm_set_speech_vol_and_path(audio_mode);
#endif 

    switch (audio_mode)
    {
        /*----------------------- Normal Mode -------------------------*/
        case AUD_MODE_NORMAL:
        {
            /* Set output device */
        #ifndef __MED_CTM_MOD__
            aud_speech_set_output_device(custom_cfg_hw_aud_output_path(AUDIO_DEVICE_SPEAKER));
        #endif 
            aud_keytone_set_output_device(custom_cfg_hw_aud_output_path(AUDIO_DEVICE_SPEAKER));
            aud_tone_set_output_device(custom_cfg_hw_aud_output_path(AUDIO_DEVICE_SPEAKER));
        #ifdef __MED_BT_A2DP_MOD__
        #if defined(__BTMTK__)
            if (!aud_bt_a2dp_is_mute_phone())
        #elif defined(__BTVCSR_HCI_BCHS__)
            if (!aud_bt_a2dp_is_media_output_on())
        #endif
        #endif 
            {
            #if defined(TV_OUT_SUPPORT)
                if (audio_tv_cable_in)
                {
                    if(audio_tv_loud_speaker)  /* Set output path to both TV out and mobile device */
                    {
                        aud_melody_set_output_device(custom_cfg_hw_aud_output_path(AUDIO_DEVICE_SPEAKER_BOTH));
                    }
                    else  /* Set output path to earphone to let it play through TV only. */
                    {
                        aud_melody_set_output_device(custom_cfg_hw_aud_output_path(AUDIO_DEVICE_SPEAKER2));
                    }
                }
                else
            #endif /* TV_OUT_SUPPORT */
                {
                    aud_melody_set_output_device(custom_cfg_hw_aud_output_path(AUDIO_DEVICE_LOUDSPEAKER));
                }
            }

        #if defined(TV_OUT_SUPPORT)
            if (audio_tv_cable_in)
            {
                if(audio_tv_loud_speaker)  /* Set output path to both TV out and mobile device */
                {
                    aud_fmr_set_output_device(custom_cfg_hw_aud_output_path(AUDIO_DEVICE_SPEAKER_BOTH));
                }
                else  /* Set output path to earphone to let it play through TV only. */
                {
                    aud_fmr_set_output_device(custom_cfg_hw_aud_output_path(AUDIO_DEVICE_SPEAKER2));
                }            
            }
            else
        #endif /* TV_OUT_SUPPORT */
            {
                aud_fmr_set_output_device(custom_cfg_hw_aud_output_path(AUDIO_DEVICE_LOUDSPEAKER));
            }

        #ifdef __MED_SND_MOD__
            #if defined(TV_OUT_SUPPORT)
                if (audio_tv_cable_in)
                {
                    if(audio_tv_loud_speaker)  /* Set output path to both TV out and mobile device */
                    {
                        aud_snd_set_output_device(custom_cfg_hw_aud_output_path(AUDIO_DEVICE_SPEAKER_BOTH));
                    }
                    else  /* Set output path to earphone to let it play through TV only. */
                    {
                        aud_snd_set_output_device(custom_cfg_hw_aud_output_path(AUDIO_DEVICE_SPEAKER2));
                    }            
                }
                else
            #endif /* TV_OUT_SUPPORT */
                {
                    aud_snd_set_output_device(custom_cfg_hw_aud_output_path(AUDIO_DEVICE_LOUDSPEAKER));
                }
        #endif /* __MED_SND_MOD__ */

            /* For FM record, not use default input device during record phase, so don't apply input path right away */
            if ((AUD_IN_STATE(AUD_MEDIA_RECORD) || AUD_IN_STATE(AUD_MEDIA_RECORD_PAUSED))
                && !aud_context_p->use_default_input)
            {
                aud_mic_set_device_no_apply(custom_cfg_hw_aud_input_path(AUDIO_DEVICE_MIC1));
            }
            else
            {
            #ifndef __MED_CTM_MOD__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -