Output the audio signal (*.bin) with filtering by IIR filter in the SD card using onboard CODEC. For *.wav file, F746_SD_WavPlayer and F746_SD_GraphicEqualiser are published on mbed. SD カードのオーディオ信号 (*.bin) を遮断周波数可変の IIR フィルタを通して,ボードに搭載されているCODEC で出力する.*.wav 形式のファイル用には,F746_SD_WavPlayer と F746_SD_GraphicEqualiser を mbed で公開している.
Dependencies: BSP_DISCO_F746NG_patch_fixed F746_GUI LCD_DISCO_F746NG SDFileSystem_Warning_Fixed TS_DISCO_F746NG mbed
MyClasses_Functions/sai_io_o.cpp
- Committer:
- MikamiUitOpen
- Date:
- 2016-04-17
- Revision:
- 5:4a99dabc9180
- Parent:
- 0:6748e3332e85
File content as of revision 5:4a99dabc9180:
//----------------------------------------------------------- // SiaIO class for output // 2016/02/16, Copyright (c) 2016 MIKAMI, Naoki //----------------------------------------------------------- #include "sai_io_o.hpp" namespace Mikami { SaiIO_O::SaiIO_O(int size, int fs) : FS_(fs), tmpIndex_(0) { nData_ = size; bufferSize_ = (size*2)*2; outBuffer_ = new int16_t[(size*2)*2]; tmp_ = new int16_t[size*2]; xferred_ = false; } SaiIO_O::~SaiIO_O() { delete[] tmp_; delete[] outBuffer_; } void SaiIO_O::InitCodecOut() { if (BSP_AUDIO_OUT_Init(OUTPUT_DEVICE_HEADPHONE, VOLUME_OUT_, FS_) == AUDIO_ERROR) ErrorTrap(); for (int n=0; n<bufferSize_; n++) outBuffer_[n] = 0; for (int n=0; n<nData_*2; n++) tmp_[n] = 0; NVIC_SetVector(AUDIO_OUT_SAIx_DMAx_IRQ, (uint32_t)AUDIO_OUT_SAIx_DMAx_IRQHandler); BSP_AUDIO_OUT_SetAudioFrameSlot(CODEC_AUDIOFRAME_SLOT_02); if (BSP_AUDIO_OUT_Play((uint16_t *)outBuffer_, bufferSize_*AUDIODATA_SIZE) == AUDIO_ERROR) ErrorTrap(); } bool SaiIO_O::IsXferred() { if (xferred_) { tmpIndex_ = 0; return true; } else return false; } void SaiIO_O::Output(int16_t xL, int16_t xR) { tmp_[tmpIndex_++] = xL; // Left tmp_[tmpIndex_++] = xR; // Right } void SaiIO_O::ErrorTrap() { DigitalOut led1(LED1); fprintf(stderr, "\r\n### ERROR\r\n"); while(true) { led1 = !led1; wait_ms(250); } } void SaiIO_O::FillBuffer(uint32_t offset) { int k = offset; for (int n=0; n<nData_*2; n++) outBuffer_[k++] = tmp_[n]; xferred_ = true; } // Instances for static variables int32_t SaiIO_O::nData_; int32_t SaiIO_O::bufferSize_; int16_t* SaiIO_O::outBuffer_; int16_t* SaiIO_O::tmp_; __IO bool SaiIO_O::xferred_; }