SAI_IO class for using CODEC (MW8994) as analog input and output. このライブラリを登録した際のプログラム:「F746_AudioIO_Demo」
Dependents: F746_SD_WavPlayer F746_SD_GraphicEqualizer_ren0620 Joerg_turbo_ede CW_Decoder_using_FFT_on_DiscoF746NG ... more
Diff: SAI_InOut.cpp
- Revision:
- 2:1aef7b703249
- Parent:
- 1:48ed86c8430a
- Child:
- 3:3bfdd8be834f
--- a/SAI_InOut.cpp Mon May 09 08:32:03 2016 +0000 +++ b/SAI_InOut.cpp Mon May 09 13:31:36 2016 +0000 @@ -22,12 +22,14 @@ inOffset_ = 0; captured_ = false; } - outBuffer_ = new int16_t[(size*2)*2]; - tmp_ = new int16_t[size*2]; - tmpIndex_ = 0; - xferred_ = false; - - ClearBuffer(); + if (ioBoth != INPUT) + { + outBuffer_ = new int16_t[(size*2)*2]; + tmp_ = new int16_t[size*2]; + tmpIndex_ = 0; + xferred_ = false; + ClearBuffer(); + } InitCodec(inputDevice); } @@ -38,11 +40,12 @@ if (IOBOTH_ != OUTPUT) delete[] inBuffer_; } - // Stop audio input - void SaiIO::StopAudioIn() + // Input start + void SaiIO::RecordIn() { - if (BSP_AUDIO_IN_Stop(CODEC_PDWN_SW) == AUDIO_ERROR) - ErrorTrap(); + if (BSP_AUDIO_IN_Record((uint16_t*)inBuffer_, + bufferSize_) == AUDIO_ERROR) + ErrorTrap(); } // Switching input device and run @@ -72,10 +75,10 @@ void SaiIO::PlayOut() { + ClearBuffer(); if (BSP_AUDIO_OUT_Play((uint16_t *)outBuffer_, bufferSize_*AUDIODATA_SIZE) == AUDIO_ERROR) ErrorTrap(); - ClearBuffer(); } bool SaiIO::IsXferred() @@ -92,21 +95,6 @@ tmp_[tmpIndex_++] = xR; // Right } - void SaiIO::Pause() - { - BSP_AUDIO_OUT_SetMute(AUDIO_MUTE_ON); - BSP_AUDIO_IN_Pause(); - BSP_AUDIO_OUT_Pause(); - ClearBuffer(); - } - - void SaiIO::Resume() - { - BSP_AUDIO_IN_Resume(); - BSP_AUDIO_OUT_Resume(); - BSP_AUDIO_OUT_SetMute(AUDIO_MUTE_OFF); - } - void SaiIO::ErrorTrap() { DigitalOut led1(LED1); @@ -149,10 +137,6 @@ { NVIC_SetVector(AUDIO_IN_SAIx_DMAx_IRQ, (uint32_t)AUDIO_IN_SAIx_DMAx_IRQHandler); - - if (BSP_AUDIO_IN_Record((uint16_t*)inBuffer_, - bufferSize_) == AUDIO_ERROR) - ErrorTrap(); } void SaiIO::InitOutput() @@ -166,8 +150,6 @@ // AUDIO_I2C_ADDRESS is defined in "stm32746g_discovery.h" AUDIO_IO_Write(AUDIO_I2C_ADDRESS, 0x1C, 0x17F); // 0x1C: R28 of WM8994 AUDIO_IO_Write(AUDIO_I2C_ADDRESS, 0x1D, 0x17F); // 0x1D: R29 of WM8994 - - PlayOut(); } void SaiIO::ClearBuffer() @@ -202,3 +184,4 @@ int16_t* SaiIO::tmp_; __IO bool SaiIO::xferred_; } +