Ejemplo n.º 1
0
/******************************************************************************
*   @name        process_play_button
*
*   @brief       process play button
*
*   @return      None
*
*   @comment
*
*******************************************************************************/
static void process_play_button(void)
{
   if(USB_DEVICE_INTERFACED == audio_stream.DEV_STATE)
   {
      play = 1 - play;
      /* play */
      if (TRUE == play)
      {
         printf("Playing ...\n");
         _lwevent_set(&USB_Event, USB_EVENT_RECEIVED_DATA);
#if (defined BSP_TWRMCF51JE) || (defined BSP_TWRMCF51MM)||(defined BSP_MCF51JMEVB)
         EnableCmtInterrupt();
#elif (defined BSP_TWRMCF51JF)
         EnableFTM0Interrupt();
#else
         _audio_timer_unmask_int(BSP_LAST_TIMER);
#endif
      }
      /* stop */
      else
      {
         printf("\nPaused.\n");
#if (defined BSP_TWRMCF51JE) || (defined BSP_TWRMCF51MM)||(defined BSP_MCF51JMEVB)
         DisableCmtInterrupt();
#elif (defined BSP_TWRMCF51JF)
         DisableFTM0Interrupt();
#else
         _audio_timer_mask_int(BSP_LAST_TIMER);
#endif
      }
   }
}
Ejemplo n.º 2
0
/******************************************************************************
*   @name        Shell_play
*
*   @brief       Servers the play command
*
*   @param       None
*
*   @return      None
*
******************************************************************************
* This function is used to play an audio wav file
*****************************************************************************/
int_32 Shell_play(int_32 argc, char_ptr argv[])
{
    boolean print_usage, shorthelp = FALSE;
    uint_8 bSamFreqType_index;
    print_usage = Shell_check_help_request (argc, argv, &shorthelp);

    if (!print_usage)
    {
        WAVE_FILE_HEADER header;
        if (argc > 1)
        {
            /* stop the current file playing */
            if(AUDIO_PLAYING == audio_state)
            {
                audio_state = AUDIO_IDLE;
                _audio_timer_mask_int(AUDIO_TIMER);
            }
            /* check the device is connected */
            if ((USB_DEVICE_INUSE != audio_stream.DEV_STATE)||(device_direction != USB_AUDIO_DEVICE_DIRECTION_IN))
            {
                printf("  Error: Audio Speaker is not connected\n");
                return (SHELL_EXIT_ERROR);
            }
            if (FillWaveHeader(argv[1], &header) != 0)
            {
                printf("  Error: Unable to open file: %s\n", argv[1]);
                return (SHELL_EXIT_ERROR);
            }
            if (strcmp(header.CHUNK_DESCRIPTOR.Format, "WAVE"))
            {
                printf("  Error: File is not WAVE file.\n");
                return (SHELL_EXIT_ERROR);
            }
            if (strcmp(header.FMT_SUBCHUNK.Subchunk1ID, "fmt "))
            {
                printf("  Error: File does not contain format subchunk.\n");
            }
            if (BYTESWAP16(header.FMT_SUBCHUNK.AudioFormat) != 1)
            {
                printf("  Error: File is compressed (not PCM).\n");
                return (SHELL_EXIT_ERROR);
            }
            if (strcmp(header.DATA_SUBCHUNK.Subchunk2ID, "data"))
            {
                printf("  Error: File does not contain data subchunk.\n");
                return (SHELL_EXIT_ERROR);
            }
            file_ptr = fopen(argv[1], "r");
            if (file_ptr == NULL)
            {
                printf("  Unable to open file: %s\n", argv[1]);
                return (SHELL_EXIT_ERROR);
            }
            file_open_count ++;
            printf("Audio file properties:\n");
            printf("   - Sample rate      : %d Hz\n", BYTESWAP32(header.FMT_SUBCHUNK.SampleRate));
            printf("   - Sample size      : %d bits\n", BYTESWAP16(header.FMT_SUBCHUNK.BitsPerSample));
            printf("   - Number of channels : %d channels\n", BYTESWAP16(header.FMT_SUBCHUNK.NumChannels));
            /* Compare the sample rate */
            for (bSamFreqType_index =0; bSamFreqType_index < frm_type_desc->bSamFreqType; bSamFreqType_index++)
            {
                if (((frm_type_desc->tSamFreq[3*bSamFreqType_index + 2] << 16) |
                            (frm_type_desc->tSamFreq[3*bSamFreqType_index + 1] << 8)  |
                            (frm_type_desc->tSamFreq[3*bSamFreqType_index] << 0)) == BYTESWAP32(header.FMT_SUBCHUNK.SampleRate))
                {
                    packet_size = USB_Audio_Get_Packet_Size(frm_type_desc,bSamFreqType_index);
                    break;
                }
            }
            if (bSamFreqType_index == frm_type_desc->bSamFreqType)
            {
                printf("  The audio device doesn't support that audio sample rate \n");
                return (SHELL_EXIT_ERROR);
            }
            /* Compare the bits sample number */
            if (frm_type_desc->bBitResolution != BYTESWAP16(header.FMT_SUBCHUNK.BitsPerSample))
            {
                printf("  The audio device doesn't support that audio bit sample number \n");
                return (SHELL_EXIT_ERROR);
            }
            /* Compare the channel number */
            if (frm_type_desc->bNrChannels != BYTESWAP16(header.FMT_SUBCHUNK.NumChannels))
            {
                printf("  The audio device doesn't support that audio channel number \n");
                return (SHELL_EXIT_ERROR);
            }
            fseek(file_ptr, WAVE_HEADER_SIZE, IO_SEEK_SET);
            audio_state = AUDIO_PLAYING;
            printf("  Playing...\n");
            _audio_timer_unmask_int(AUDIO_TIMER);
        }
        else
        {
            if (AUDIO_PLAYING == audio_state)
            {
                printf("  The file is playing...\n");
            }
            else if (AUDIO_PAUSE == audio_state)
            {
                audio_state = AUDIO_PLAYING;
                _audio_timer_unmask_int(AUDIO_TIMER);
                printf("  Playing...\n");
            }
            else if (AUDIO_IDLE == audio_state)
            {
                printf("  Not enough parameters.\n");
            }
        }
    }
    else
    {
        if (shorthelp)
        {
            printf("%s <filename>\n", argv[0]);
        }
        else
        {
            printf("Usage: %s <filename>\n", argv[0]);
            printf("   filename      = wav file to play\n");
        }
    }
    return(SHELL_EXIT_SUCCESS);
}