示例#1
0
/* Private functions ---------------------------------------------------------*/
int32_t getDataCB(int16_t *pBuff, int32_t length)
{
	
	q15_t rms;
	
  UINT bytesread = 0;
  
  f_read(&FileRead, pBuff, length*sizeof(int16_t), (void *)&bytesread); 
  
  audioFilter_filter(pBuff, pBuff, bytesread/sizeof(int16_t));
	
	arm_rms_q15(pBuff,bytesread/sizeof(int16_t),&rms);
	
	printf("valor rms: %u \n",rms);
	if(rms>1000){
		if((conteo<5)&(led3on==0)){
			if(TickTock_Get() > 700000){
				TickTock_Start();
				BSP_LED_On(LED6);
				conteo++;
				primpulso=0;
			}
		}else if((conteo==5) & (TickTock_Get() > 800000)){
			TickTock_Start();
			BSP_LED_On(LED3);
			primpulso=1;
			conteo=0;
			led3on=1;
		}
	}else{
		LEDsState = LEDS_OFF;
		led3on=0;
	}
  
  return bytesread;
}
/**
  * @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);
}