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

Committer:
MikamiUitOpen
Date:
Sun Apr 17 08:44:43 2016 +0000
Revision:
5:4a99dabc9180
Parent:
0:6748e3332e85
6

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:6748e3332e85 1 //-----------------------------------------------------------
MikamiUitOpen 0:6748e3332e85 2 // SiaIO class for output
MikamiUitOpen 0:6748e3332e85 3 // 2016/02/16, Copyright (c) 2016 MIKAMI, Naoki
MikamiUitOpen 0:6748e3332e85 4 //-----------------------------------------------------------
MikamiUitOpen 0:6748e3332e85 5
MikamiUitOpen 0:6748e3332e85 6 #include "sai_io_o.hpp"
MikamiUitOpen 0:6748e3332e85 7
MikamiUitOpen 0:6748e3332e85 8 namespace Mikami
MikamiUitOpen 0:6748e3332e85 9 {
MikamiUitOpen 0:6748e3332e85 10 SaiIO_O::SaiIO_O(int size, int fs) : FS_(fs), tmpIndex_(0)
MikamiUitOpen 0:6748e3332e85 11 {
MikamiUitOpen 0:6748e3332e85 12 nData_ = size;
MikamiUitOpen 0:6748e3332e85 13 bufferSize_ = (size*2)*2;
MikamiUitOpen 0:6748e3332e85 14 outBuffer_ = new int16_t[(size*2)*2];
MikamiUitOpen 0:6748e3332e85 15 tmp_ = new int16_t[size*2];
MikamiUitOpen 0:6748e3332e85 16 xferred_ = false;
MikamiUitOpen 0:6748e3332e85 17 }
MikamiUitOpen 5:4a99dabc9180 18 SaiIO_O::~SaiIO_O()
MikamiUitOpen 5:4a99dabc9180 19 {
MikamiUitOpen 5:4a99dabc9180 20 delete[] tmp_;
MikamiUitOpen 5:4a99dabc9180 21 delete[] outBuffer_;
MikamiUitOpen 5:4a99dabc9180 22 }
MikamiUitOpen 0:6748e3332e85 23
MikamiUitOpen 0:6748e3332e85 24 void SaiIO_O::InitCodecOut()
MikamiUitOpen 0:6748e3332e85 25 {
MikamiUitOpen 0:6748e3332e85 26 if (BSP_AUDIO_OUT_Init(OUTPUT_DEVICE_HEADPHONE, VOLUME_OUT_, FS_) == AUDIO_ERROR)
MikamiUitOpen 0:6748e3332e85 27 ErrorTrap();
MikamiUitOpen 0:6748e3332e85 28 for (int n=0; n<bufferSize_; n++) outBuffer_[n] = 0;
MikamiUitOpen 0:6748e3332e85 29 for (int n=0; n<nData_*2; n++) tmp_[n] = 0;
MikamiUitOpen 0:6748e3332e85 30
MikamiUitOpen 0:6748e3332e85 31 NVIC_SetVector(AUDIO_OUT_SAIx_DMAx_IRQ, (uint32_t)AUDIO_OUT_SAIx_DMAx_IRQHandler);
MikamiUitOpen 0:6748e3332e85 32 BSP_AUDIO_OUT_SetAudioFrameSlot(CODEC_AUDIOFRAME_SLOT_02);
MikamiUitOpen 0:6748e3332e85 33
MikamiUitOpen 0:6748e3332e85 34 if (BSP_AUDIO_OUT_Play((uint16_t *)outBuffer_,
MikamiUitOpen 0:6748e3332e85 35 bufferSize_*AUDIODATA_SIZE) == AUDIO_ERROR)
MikamiUitOpen 0:6748e3332e85 36 ErrorTrap();
MikamiUitOpen 0:6748e3332e85 37 }
MikamiUitOpen 0:6748e3332e85 38
MikamiUitOpen 0:6748e3332e85 39 bool SaiIO_O::IsXferred()
MikamiUitOpen 0:6748e3332e85 40 {
MikamiUitOpen 0:6748e3332e85 41 if (xferred_)
MikamiUitOpen 0:6748e3332e85 42 {
MikamiUitOpen 0:6748e3332e85 43 tmpIndex_ = 0;
MikamiUitOpen 0:6748e3332e85 44 return true;
MikamiUitOpen 0:6748e3332e85 45 }
MikamiUitOpen 0:6748e3332e85 46 else
MikamiUitOpen 0:6748e3332e85 47 return false;
MikamiUitOpen 0:6748e3332e85 48 }
MikamiUitOpen 0:6748e3332e85 49
MikamiUitOpen 0:6748e3332e85 50 void SaiIO_O::Output(int16_t xL, int16_t xR)
MikamiUitOpen 0:6748e3332e85 51 {
MikamiUitOpen 0:6748e3332e85 52 tmp_[tmpIndex_++] = xL; // Left
MikamiUitOpen 0:6748e3332e85 53 tmp_[tmpIndex_++] = xR; // Right
MikamiUitOpen 0:6748e3332e85 54 }
MikamiUitOpen 0:6748e3332e85 55
MikamiUitOpen 0:6748e3332e85 56 void SaiIO_O::ErrorTrap()
MikamiUitOpen 0:6748e3332e85 57 {
MikamiUitOpen 0:6748e3332e85 58 DigitalOut led1(LED1);
MikamiUitOpen 0:6748e3332e85 59 fprintf(stderr, "\r\n### ERROR\r\n");
MikamiUitOpen 0:6748e3332e85 60 while(true)
MikamiUitOpen 0:6748e3332e85 61 {
MikamiUitOpen 0:6748e3332e85 62 led1 = !led1;
MikamiUitOpen 0:6748e3332e85 63 wait_ms(250);
MikamiUitOpen 0:6748e3332e85 64 }
MikamiUitOpen 0:6748e3332e85 65 }
MikamiUitOpen 0:6748e3332e85 66
MikamiUitOpen 0:6748e3332e85 67 void SaiIO_O::FillBuffer(uint32_t offset)
MikamiUitOpen 0:6748e3332e85 68 {
MikamiUitOpen 0:6748e3332e85 69 int k = offset;
MikamiUitOpen 0:6748e3332e85 70 for (int n=0; n<nData_*2; n++)
MikamiUitOpen 0:6748e3332e85 71 outBuffer_[k++] = tmp_[n];
MikamiUitOpen 0:6748e3332e85 72 xferred_ = true;
MikamiUitOpen 0:6748e3332e85 73 }
MikamiUitOpen 0:6748e3332e85 74
MikamiUitOpen 0:6748e3332e85 75 // Instances for static variables
MikamiUitOpen 0:6748e3332e85 76 int32_t SaiIO_O::nData_;
MikamiUitOpen 0:6748e3332e85 77 int32_t SaiIO_O::bufferSize_;
MikamiUitOpen 0:6748e3332e85 78 int16_t* SaiIO_O::outBuffer_;
MikamiUitOpen 0:6748e3332e85 79 int16_t* SaiIO_O::tmp_;
MikamiUitOpen 0:6748e3332e85 80 __IO bool SaiIO_O::xferred_;
MikamiUitOpen 0:6748e3332e85 81 }
MikamiUitOpen 0:6748e3332e85 82
MikamiUitOpen 5:4a99dabc9180 83