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:
Fri Apr 08 13:11:53 2016 +0000
Revision:
0:6748e3332e85
Child:
5:4a99dabc9180
1

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 0:6748e3332e85 18
MikamiUitOpen 0:6748e3332e85 19 void SaiIO_O::InitCodecOut()
MikamiUitOpen 0:6748e3332e85 20 {
MikamiUitOpen 0:6748e3332e85 21 if (BSP_AUDIO_OUT_Init(OUTPUT_DEVICE_HEADPHONE, VOLUME_OUT_, FS_) == AUDIO_ERROR)
MikamiUitOpen 0:6748e3332e85 22 ErrorTrap();
MikamiUitOpen 0:6748e3332e85 23 for (int n=0; n<bufferSize_; n++) outBuffer_[n] = 0;
MikamiUitOpen 0:6748e3332e85 24 for (int n=0; n<nData_*2; n++) tmp_[n] = 0;
MikamiUitOpen 0:6748e3332e85 25
MikamiUitOpen 0:6748e3332e85 26 NVIC_SetVector(AUDIO_OUT_SAIx_DMAx_IRQ, (uint32_t)AUDIO_OUT_SAIx_DMAx_IRQHandler);
MikamiUitOpen 0:6748e3332e85 27 BSP_AUDIO_OUT_SetAudioFrameSlot(CODEC_AUDIOFRAME_SLOT_02);
MikamiUitOpen 0:6748e3332e85 28
MikamiUitOpen 0:6748e3332e85 29 if (BSP_AUDIO_OUT_Play((uint16_t *)outBuffer_,
MikamiUitOpen 0:6748e3332e85 30 bufferSize_*AUDIODATA_SIZE) == AUDIO_ERROR)
MikamiUitOpen 0:6748e3332e85 31 ErrorTrap();
MikamiUitOpen 0:6748e3332e85 32 }
MikamiUitOpen 0:6748e3332e85 33
MikamiUitOpen 0:6748e3332e85 34 bool SaiIO_O::IsXferred()
MikamiUitOpen 0:6748e3332e85 35 {
MikamiUitOpen 0:6748e3332e85 36 if (xferred_)
MikamiUitOpen 0:6748e3332e85 37 {
MikamiUitOpen 0:6748e3332e85 38 tmpIndex_ = 0;
MikamiUitOpen 0:6748e3332e85 39 return true;
MikamiUitOpen 0:6748e3332e85 40 }
MikamiUitOpen 0:6748e3332e85 41 else
MikamiUitOpen 0:6748e3332e85 42 return false;
MikamiUitOpen 0:6748e3332e85 43 }
MikamiUitOpen 0:6748e3332e85 44
MikamiUitOpen 0:6748e3332e85 45 void SaiIO_O::Output(int16_t xL, int16_t xR)
MikamiUitOpen 0:6748e3332e85 46 {
MikamiUitOpen 0:6748e3332e85 47 tmp_[tmpIndex_++] = xL; // Left
MikamiUitOpen 0:6748e3332e85 48 tmp_[tmpIndex_++] = xR; // Right
MikamiUitOpen 0:6748e3332e85 49 }
MikamiUitOpen 0:6748e3332e85 50
MikamiUitOpen 0:6748e3332e85 51 void SaiIO_O::ErrorTrap()
MikamiUitOpen 0:6748e3332e85 52 {
MikamiUitOpen 0:6748e3332e85 53 DigitalOut led1(LED1);
MikamiUitOpen 0:6748e3332e85 54 fprintf(stderr, "\r\n### ERROR\r\n");
MikamiUitOpen 0:6748e3332e85 55 while(true)
MikamiUitOpen 0:6748e3332e85 56 {
MikamiUitOpen 0:6748e3332e85 57 led1 = !led1;
MikamiUitOpen 0:6748e3332e85 58 wait_ms(250);
MikamiUitOpen 0:6748e3332e85 59 }
MikamiUitOpen 0:6748e3332e85 60 }
MikamiUitOpen 0:6748e3332e85 61
MikamiUitOpen 0:6748e3332e85 62 void SaiIO_O::FillBuffer(uint32_t offset)
MikamiUitOpen 0:6748e3332e85 63 {
MikamiUitOpen 0:6748e3332e85 64 int k = offset;
MikamiUitOpen 0:6748e3332e85 65 for (int n=0; n<nData_*2; n++)
MikamiUitOpen 0:6748e3332e85 66 outBuffer_[k++] = tmp_[n];
MikamiUitOpen 0:6748e3332e85 67 xferred_ = true;
MikamiUitOpen 0:6748e3332e85 68 }
MikamiUitOpen 0:6748e3332e85 69
MikamiUitOpen 0:6748e3332e85 70 // Instances for static variables
MikamiUitOpen 0:6748e3332e85 71 int32_t SaiIO_O::nData_;
MikamiUitOpen 0:6748e3332e85 72 int32_t SaiIO_O::bufferSize_;
MikamiUitOpen 0:6748e3332e85 73 int16_t* SaiIO_O::outBuffer_;
MikamiUitOpen 0:6748e3332e85 74 int16_t* SaiIO_O::tmp_;
MikamiUitOpen 0:6748e3332e85 75 __IO bool SaiIO_O::xferred_;
MikamiUitOpen 0:6748e3332e85 76 }
MikamiUitOpen 0:6748e3332e85 77