Exemplo n.º 1
0
/**
  * @brief  Play audio stream
  * @param  frequency: Audio frequency used to play the audio stream.
  * @retval Audio state.
  */
AUDIO_RECORDER_ErrorTypdef  AUDIO_RECORDER_StartRec(uint32_t frequency)
{
  uint32_t byteswritten = 0;
  
  /* Initialize header file */
  WavProcess_EncInit(DEFAULT_AUDIO_IN_FREQ, pHeaderBuff);
  

  
  /* Write header file */
  if(f_write(&wav_file, pHeaderBuff, 44, (void*)&byteswritten) == FR_OK)
  {
    if(byteswritten != 0)
    {
      BSP_AUDIO_IN_Init(INPUT_DEVICE_DIGITAL_MICROPHONE_2, haudio.in.volume, DEFAULT_AUDIO_IN_FREQ);
      BSP_AUDIO_IN_Record((uint16_t*)&haudio.buff[0], AUDIO_IN_BUFFER_SIZE/2);
      
      if(haudio.in.state == AUDIO_RECORDER_SUSPENDED)
      {
        osThreadResume(AudioThreadId);
      }
      haudio.in.state = AUDIO_RECORDER_RECORDING;
      
      
      haudio.in.fptr = byteswritten;
      return AUDIO_RECORDER_ERROR_NONE;
    }
  }
  return AUDIO_RECORDER_ERROR_IO;
  
}
/**
  * @brief  Play audio stream
  * @param  frequency: Audio frequency used to play the audio stream.
  * @retval Audio state.
  */
AUDIO_RECORDER_ErrorTypdef  AUDIO_RECORDER_StartRec(uint32_t frequency)
{
  uint32_t byteswritten = 0;
  
  /* Initialize header file */
  WavProcess_EncInit(DEFAULT_AUDIO_IN_FREQ, pHeaderBuff);
  haudio.ppcm = 0;

  
  /* Write header file */
  if(f_write(&wav_file, pHeaderBuff, 44, (void*)&byteswritten) == FR_OK)
  {
    if(byteswritten != 0)
    {
      BSP_AUDIO_IN_Init(DEFAULT_AUDIO_IN_FREQ, DEFAULT_AUDIO_IN_BIT_RESOLUTION, DEFAULT_AUDIO_IN_CHANNEL_NBR);
      BSP_AUDIO_IN_Record((uint16_t*)&haudio.pdm[0], AUDIO_IN_PDM_BUFFER_SIZE);
      
      if(haudio.in.state == AUDIO_RECORDER_SUSPENDED)
      {
        osThreadResume(AudioThreadId);
      }
      haudio.in.state = AUDIO_RECORDER_RECORDING;
      
      
      haudio.in.fptr = byteswritten;
      return AUDIO_RECORDER_ERROR_NONE;
    }
  }
  return AUDIO_RECORDER_ERROR_IO;
  
}
Exemplo n.º 3
0
/**
  * @brief  Starts Audio streaming.    
  * @param  None
  * @retval Audio error
  */ 
AUDIO_ErrorTypeDef AUDIO_REC_Start(void)
{
  uint32_t byteswritten = 0;
  uint8_t str[FILEMGR_FILE_NAME_SIZE + 20]; 
  
  uwVolume = 100;

  /* Create a new file system */
  if(f_open(&WavFile, REC_WAVE_NAME, FA_CREATE_ALWAYS | FA_WRITE) == FR_OK)
  {  
    /* Initialize header file */
    WavProcess_EncInit(DEFAULT_AUDIO_IN_FREQ, pHeaderBuff);
    
    /* Write header file */
    if(f_write(&WavFile, pHeaderBuff, 44, (void*)&byteswritten) == FR_OK)
    {
      AudioState = AUDIO_STATE_PRERECORD;
      
      BSP_LCD_SetTextColor(LCD_COLOR_WHITE); 
      sprintf((char *)str, "Recording file: %s", 
              (char *)REC_WAVE_NAME);
      BSP_LCD_ClearStringLine(4);
      BSP_LCD_DisplayStringAtLine(4, str);
      
      BSP_LCD_SetTextColor(LCD_COLOR_CYAN); 
      sprintf((char *)str,  "Sample rate : %d Hz", (int)DEFAULT_AUDIO_IN_FREQ);
      BSP_LCD_ClearStringLine(6);
      BSP_LCD_DisplayStringAtLine(6, str);
      
      sprintf((char *)str,  "Channels number : %d", (int)DEFAULT_AUDIO_IN_CHANNEL_NBR);
      BSP_LCD_ClearStringLine(7);      
      BSP_LCD_DisplayStringAtLine(7, str);
      
      sprintf((char *)str,  "Volume : %d ", (int)uwVolume);
      BSP_LCD_ClearStringLine(7);
      BSP_LCD_DisplayStringAtLine(7, str);

      sprintf((char *)str, "File Size :");
      BSP_LCD_ClearStringLine(8);
      BSP_LCD_DisplayStringAtLine(8, str);
 
      AUDIO_REC_DisplayButtons();
     
      BSP_LCD_DisplayStringAt(250, LINE(14), (uint8_t *)"  [RECORD]", LEFT_MODE);
      { 
        if(byteswritten != 0)
        {
          BSP_AUDIO_IN_Init(DEFAULT_AUDIO_IN_FREQ, DEFAULT_AUDIO_IN_BIT_RESOLUTION, DEFAULT_AUDIO_IN_CHANNEL_NBR);
          BSP_AUDIO_IN_Record((uint16_t*)&BufferCtl.pdm_buff[0], AUDIO_IN_PDM_BUFFER_SIZE);
          BufferCtl.fptr = byteswritten;
          BufferCtl.pcm_ptr = 0;
          BufferCtl.offset = 0;
          BufferCtl.wr_state = BUFFER_EMPTY;
          return AUDIO_ERROR_NONE;
        }
      }
    }
  }
  return AUDIO_ERROR_IO; 
}
Exemplo n.º 4
0
/**
  * @brief  Update the recorded data.
  * @param  None
  * @retval None
  */
void WaveRecorderProcess(void)
{
    /* Current size of the recorded buffer */
    uint32_t byteswritten = 0;

    WaveCounter = 0;
    LEDsState = LEDS_OFF;

    /* Remove Wave file if it exists on USB Flash Disk */
    f_unlink(REC_WAVE_NAME);

    /* Open the file to write on it */
    if((AppliState == APPLICATION_IDLE) || (f_open(&WavFile, REC_WAVE_NAME, FA_CREATE_ALWAYS | FA_WRITE) != FR_OK))
    {
        while(1)
        {
            /* Toggle LED5 in infinite loop to signal that: USB Flash Disk is not connected/removed
             or an issue has occurred when creating/opening Wave file */
            BSP_LED_Toggle(LED5);
        }
    }
    else
    {
        WaveRecStatus = 1;
    }
    /* Initialize header file */
    WavProcess_EncInit(DEFAULT_AUDIO_IN_FREQ, pHeaderBuff);

    /* Write the header Wave */
    f_write(&WavFile, pHeaderBuff, 44, (void *)&byteswritten);

    /* Increment the Wave counter */
    BufferCtl.fptr = byteswritten;

    BufferCtl.offset = BUFFER_OFFSET_NONE;
    BSP_AUDIO_IN_Init(DEFAULT_AUDIO_IN_FREQ, DEFAULT_AUDIO_IN_BIT_RESOLUTION, DEFAULT_AUDIO_IN_CHANNEL_NBR);
    BSP_AUDIO_IN_Record((uint16_t*)&InternalBuffer[0], INTERNAL_BUFF_SIZE);

    /* Reset the time recording base variable */
    TimeRecBase = 0;
    ITCounter = 0;
    LEDsState = LED3_TOGGLE;

    while(AppliState != APPLICATION_IDLE)
    {
        /* Wait for the recording time */
        if(TimeRecBase <= DEFAULT_TIME_REC)
        {
            /* Check if there are Data to write in Usb Key */
            if(AUDIODataReady == 1)
            {
                /* write buffer in file */
                res = f_write(&WavFile, (uint8_t*)(WrBuffer+AUDIOBuffOffset), WR_BUFFER_SIZE, (void*)&byteswritten);
                if(res != FR_OK)
                {
                    Error_Handler();
                }
                BufferCtl.fptr += byteswritten;
                AUDIODataReady = 0;
            }

            /* User button pressed */
            if(CmdIndex != CMD_RECORD)
            {
                /* Stop Audio Recording */
                WaveRecorderStop();
                /* Switch Command Index to Play */
                CmdIndex = CMD_PLAY;
                /* Toggoling LED6 to signal Play */
                LEDsState = LED6_TOGGLE;
                break;
            }
        }
        else /* End of recording time DEFAULT_TIME_REC */
        {
            /* Stop Audio Recording */
            WaveRecorderStop();
            /* Change Command Index to Stop */
            CmdIndex = CMD_STOP;
            /* Toggoling LED4 to signal Stop */
            LEDsState = LED4_TOGGLE;
            AUDIODataReady = 0;
            break;
        }
    }

    /* Update the data length in the header of the recorded Wave */
    f_lseek(&WavFile, 0);

    /* Parse the wav file header and extract required information */
    WavProcess_HeaderUpdate(pHeaderBuff, &WaveFormat);
    f_write(&WavFile, pHeaderBuff, 44, (void*)&byteswritten);

    /* Close file and unmount MyFilesystem */
    f_close (&WavFile);
    f_mount(NULL, 0, 1);

    /* Change Command Index to Play */
    CmdIndex = CMD_PLAY;
}