/** * @brief Starts Wave player. * @param None * @retval None */ void WavePlayerStart(WAVE_FormatTypeDef waveformat, WavePlayer_getDataCB_type getDataCB, uint8_t volume) { int32_t bytesread = 0; int32_t length; int16_t *pBuf = NULL; uint32_t AudioRemSize = 0; uint32_t WaveDataLength = 0; /* Set WaveDataLenght to the Speech Wave length */ WaveDataLength = waveformat.FileSize; AudioRemSize = WaveDataLength - sizeof(WAVE_FormatTypeDef); /* Initialize Wave player (Codec, DMA, I2C) */ if (BSP_AUDIO_OUT_Init(OUTPUT_DEVICE_AUTO, volume, waveformat.SampleRate) != 0) { Error_Handler(); } /* Start playing Wave */ BSP_AUDIO_OUT_Play((uint16_t*)&Audio_BufferStereo[0], sizeof(Audio_BufferStereo)); LEDsState = LED6_TOGGLE; /* Toggling LED6 to signal Play */ LEDsState = LED6_TOGGLE; /* Resume playing Wave */ BSP_AUDIO_OUT_Resume(); if (CHANNEL_MONO == waveformat.NbrChannels) { length = AUDIO_BUFFER_STEREO_LENGTH/4; } else { length = AUDIO_BUFFER_STEREO_LENGTH/2; } while (AudioRemSize > 0) { if (BUFFER_OFFSET_HALF == BufferOffset) { pBuf = &Audio_BufferStereo[0]; } if (BUFFER_OFFSET_FULL == BufferOffset) { pBuf = &Audio_BufferStereo[AUDIO_BUFFER_STEREO_LENGTH/2]; } if (NULL != pBuf) { bytesread = getDataCB(pBuf, length); if (CHANNEL_MONO == waveformat.NbrChannels) { convertToStereo(pBuf, pBuf, length); } BufferOffset = BUFFER_OFFSET_NONE; pBuf = NULL; if (bytesread <= 0) { AudioRemSize = 0; } else { AudioRemSize -= bytesread; if (AudioRemSize < (length*2)) { AudioRemSize = 0; } } } } LEDsState = LEDS_OFF; BSP_AUDIO_OUT_Stop(CODEC_PDWN_HW); }
/** * @brief Starts Wave player. * @param None * @retval None */ void WavePlayerStart(WAVE_FormatTypeDef waveformat, WavePlayer_getDataCB_type getDataCB, uint8_t volume) { int32_t bytesread = 0; int32_t length; int16_t *pBuf = NULL; uint32_t AudioRemSize = 0; uint32_t WaveDataLength = 0; int16_t ValorEficaz = 0; int16_t Contador = 0; int16_t Bandera = 0; uint32_t tickcontar = 0; /* Set WaveDataLenght to the Speech Wave length */ WaveDataLength = waveformat.FileSize; AudioRemSize = WaveDataLength - sizeof(WAVE_FormatTypeDef); /* Initialize Wave player (Codec, DMA, I2C) */ if (BSP_AUDIO_OUT_Init(OUTPUT_DEVICE_AUTO, volume, waveformat.SampleRate) != 0) { Error_Handler(); } /* Start playing Wave */ BSP_AUDIO_OUT_Play((uint16_t*)&Audio_BufferStereo[0], sizeof(Audio_BufferStereo)); LEDsState = LED6_TOGGLE; /* Toggling LED6 to signal Play */ LEDsState = LED6_TOGGLE; LEDsState = LEDS_OFF; /* Resume playing Wave */ BSP_AUDIO_OUT_Resume(); if (CHANNEL_MONO == waveformat.NbrChannels) { length = AUDIO_BUFFER_STEREO_LENGTH/4; } else { length = AUDIO_BUFFER_STEREO_LENGTH/2; } while (AudioRemSize > 0) { if (BUFFER_OFFSET_HALF == BufferOffset) { pBuf = &Audio_BufferStereo[0]; } if (BUFFER_OFFSET_FULL == BufferOffset) { pBuf = &Audio_BufferStereo[AUDIO_BUFFER_STEREO_LENGTH/2]; } if (NULL != pBuf) { bytesread = getDataCB(pBuf, length); arm_rms_q15(pBuf, length, &ValorEficaz); // printf("Valor Eficaz = %d\r\n", ValorEficaz); // 0x03E8 Hexadecimal = 1000 Decimal // se comprobo con la salida printf("Valor Eficaz = %d\r\n", ValorEficaz); // que los valores de los tonos de 1 KHz tenian un valor eficaz superior // a 1000. if (ValorEficaz > 0x03E8) { Bandera = 1; Contador = Contador + 1; } else { if (Bandera == 1) { Bandera = 2; } } BSP_LED_Off(LED3); BSP_LED_Off(LED6); if (Bandera == 2) { Bandera = 0; if (Contador > 10) { BSP_LED_On(LED3); Contador = 0; if (firstfind == 0) { firstfind = 1; } } else { BSP_LED_On(LED6); Contador = 0; } } if (firstfind != 0 ) { tickcontar = HAL_GetTick(); if (firstfind == 1) { tickstart = tickcontar; firstfind = 2; } if ((tickcontar - tickstart) > T60SEG) { tickstart=tickcontar; } if ((tickcontar - tickstart) <= T1SEG) { BSP_LED_On(LED5); } else { BSP_LED_Off(LED5); } } if (CHANNEL_MONO == waveformat.NbrChannels) { convertToStereo(pBuf, pBuf, length); } BufferOffset = BUFFER_OFFSET_NONE; pBuf = NULL; if (bytesread <= 0) { AudioRemSize = 0; } else { AudioRemSize -= bytesread; if (AudioRemSize < (length*2)) { AudioRemSize = 0; } } } } BSP_LED_Off(LED3); BSP_LED_Off(LED6); // LEDsState = LEDS_OFF; BSP_AUDIO_OUT_Stop(CODEC_PDWN_HW); }