/** * @brief Initializes audio * @param None. * @retval Audio state. */ AUDIO_RECORDER_ErrorTypdef AUDIO_RECORDER_Init(uint8_t volume) { /* Initialize internal audio structure */ haudio.in.volume = DEFAULT_REC_AUDIO_VOLUME; /* Register audio BSP drivers callbacks */ AUDIO_IF_RegisterCallbacks(AUDIO_TransferComplete_CallBack, AUDIO_HalfTransfer_CallBack, AUDIO_Error_CallBack); /* Create Audio Queue */ osMessageQDef(AUDIO_Queue, 1, uint16_t); AudioEvent = osMessageCreate (osMessageQ(AUDIO_Queue), NULL); /* Create Audio task */ osThreadDef(osAudio_Thread, Audio_Thread, osPriorityNormal, 0, 1024); AudioThreadId = osThreadCreate (osThread(osAudio_Thread), NULL); haudio.in.state = AUDIO_RECORDER_IDLE; return AUDIO_RECORDER_ERROR_NONE; }
/** * @brief Initializes audio * @param None. * @retval Audio state. */ AUDIOPLAYER_ErrorTypdef AUDIOPLAYER_Init(uint8_t volume) { #if (!defined ( __GNUC__ )) uint32_t index = 0; __IO uint32_t ldness_value; #endif /* Try to Init Audio interface in diffrent config in case of failure */ BSP_AUDIO_OUT_Init(OUTPUT_DEVICE_AUTO, volume, I2S_AUDIOFREQ_48K); BSP_AUDIO_OUT_SetAudioFrameSlot(CODEC_AUDIOFRAME_SLOT_02); /* Initialize internal audio structure */ haudio.out.state = AUDIOPLAYER_STOP; haudio.out.mute = MUTE_OFF; haudio.out.volume = volume; #if (!defined ( __GNUC__ )) /* Enable the Eq */ SpiritEQ_Init((TSpiritEq *)AUDIO_EqInstance, I2S_AUDIOFREQ_48K); /* Retreive stored settings and set band params */ SpiritEQ_FltGet((TSpiritEq *)AUDIO_EqInstance, &AUDIO_EQ_Bands[0], 0 ); AUDIO_EQ_Bands[0].gainDb = k_BkupRestoreParameter(CALIBRATION_AUDIOPLAYER_EQU1_BKP); SET_BAND_PRMS(&AUDIO_EQ_Bands[0], SPIRIT_EQ_FLT_TYPE_SHELVING_LOWPASS , 0, 1000, AUDIO_EQ_Bands[0].gainDb); SpiritEQ_FltGet((TSpiritEq *)AUDIO_EqInstance, &AUDIO_EQ_Bands[1], 1 ); AUDIO_EQ_Bands[1].gainDb = k_BkupRestoreParameter(CALIBRATION_AUDIOPLAYER_EQU2_BKP); SET_BAND_PRMS(&AUDIO_EQ_Bands[1], SPIRIT_EQ_FLT_TYPE_PEAKING , 2000, 1000, AUDIO_EQ_Bands[1].gainDb); SpiritEQ_FltGet((TSpiritEq *)AUDIO_EqInstance, &AUDIO_EQ_Bands[2], 2 ); AUDIO_EQ_Bands[2].gainDb = k_BkupRestoreParameter(CALIBRATION_AUDIOPLAYER_EQU3_BKP); SET_BAND_PRMS(&AUDIO_EQ_Bands[2], SPIRIT_EQ_FLT_TYPE_PEAKING , 5000, 3000, AUDIO_EQ_Bands[2].gainDb); SpiritEQ_FltGet((TSpiritEq *)AUDIO_EqInstance, &AUDIO_EQ_Bands[3], 3 ); AUDIO_EQ_Bands[3].gainDb = k_BkupRestoreParameter(CALIBRATION_AUDIOPLAYER_EQU4_BKP);; SET_BAND_PRMS(&AUDIO_EQ_Bands[3], SPIRIT_EQ_FLT_TYPE_PEAKING , 10000, 6000, AUDIO_EQ_Bands[3].gainDb); SpiritEQ_FltGet((TSpiritEq *)AUDIO_EqInstance, &AUDIO_EQ_Bands[4], 4 ); AUDIO_EQ_Bands[4].gainDb = k_BkupRestoreParameter(CALIBRATION_AUDIOPLAYER_EQU5_BKP); SET_BAND_PRMS(&AUDIO_EQ_Bands[4], SPIRIT_EQ_FLT_TYPE_SHELVING_HIPASS , 15000, 2000, AUDIO_EQ_Bands[4].gainDb); for (index = 0; index < SPIRIT_EQ_MAX_BANDS ; index++) { tmpEqBand = &AUDIO_EQ_Bands[index]; SpiritEQ_FltSet((TSpiritEq *)AUDIO_EqInstance, tmpEqBand, index); } /* Enable Loundness Control */ SpiritLdCtrl_Init((TSpiritLdCtrl*)AUDIO_LdCtrlPersistance, I2S_AUDIOFREQ_48K); SpiritLdCtrl_GetPrms((TSpiritLdCtrl*)AUDIO_LdCtrlPersistance, &AUDIO_LdCtrlInstanceParams); ldness_value = k_BkupRestoreParameter(CALIBRATION_AUDIOPLAYER_LOUD_BKP); AUDIO_LdCtrlInstanceParams.gainQ8 = PERC_TO_LDNS_DB(ldness_value); SpiritLdCtrl_SetPrms((TSpiritLdCtrl*)AUDIO_LdCtrlPersistance, &AUDIO_LdCtrlInstanceParams); #endif /* Register audio BSP drivers callbacks */ AUDIO_IF_RegisterCallbacks(AUDIO_TransferComplete_CallBack, AUDIO_HalfTransfer_CallBack, AUDIO_Error_CallBack); /* Create Audio Queue */ osMessageQDef(AUDIO_Queue, 1, uint16_t); AudioEvent = osMessageCreate (osMessageQ(AUDIO_Queue), NULL); /* Create Audio task */ osThreadDef(osAudio_Thread, Audio_Thread, osPriorityRealtime, 0, 256); AudioThreadId = osThreadCreate (osThread(osAudio_Thread), NULL); return AUDIOPLAYER_ERROR_NONE; }