Output the audio signal with filtering by IIR filter in the *.wav file on the SD card using onboard CODEC. SD カードの *.wav ファイルのオーディオ信号を遮断周波数可変の IIR フィルタを通して,ボードに搭載されているCODEC で出力する.

Dependencies:   BSP_DISCO_F746NG F746_GUI LCD_DISCO_F746NG SDFileSystem_Warning_Fixed TS_DISCO_F746NG mbed FrequencyResponseDrawer F746_SAI_IO Array_Matrix

Revision:
11:769d986c10fa
Parent:
0:04b43b777fae
--- a/MyClasses_Functions/SD_WavReader.cpp	Wed Jun 15 13:16:49 2016 +0000
+++ b/MyClasses_Functions/SD_WavReader.cpp	Mon Jul 04 05:59:44 2016 +0000
@@ -4,7 +4,7 @@
 //      以下のフォーマット以外は扱わない
 //          PCM,16 ビットステレオ,標本化周波数 44.1 kHz
 //
-//  2016/04/19, Copyright (c) 2016 MIKAMI, Naoki
+//  2016/06/17, Copyright (c) 2016 MIKAMI, Naoki
 //--------------------------------------------------------------
 
 #include "SD_WavReader.hpp"
@@ -15,14 +15,12 @@
         : STR_("sd"), ok_(false)
     {
         sd_ = new SDFileSystem(STR_.c_str());
-        sd_->mount();
-        
-        buffer = new int16_t[bufferSize*2];
+        sd_->mount();      
+        buffer.SetSize(bufferSize*2);
     }
 
     SD_WavReader::~SD_WavReader()
     {
-        delete[] buffer;
         sd_->unmount();
         delete sd_;
     }
@@ -88,17 +86,25 @@
         return true;
     }
 
-    // ファイルからデータの取得
-    void SD_WavReader::Read(int16_t data[], uint32_t size)
+    // ファイルからステレオデータの取得
+    void SD_WavReader::ReadStereo(Array<int16_t>& dataL,
+                                  Array<int16_t>& dataR)
     {
         if (!ok_) ErrorMsg("Get data FAILED");
-        fread(data, sizeof(int16_t), size, fp_);
-    }        
+        uint32_t size = dataL.Length();
+        fread(buffer, sizeof(int16_t), size*2, fp_);       
+        for (int n=0; n<size; n++)
+        {
+            dataL[n] = buffer[2*n];
+            dataR[n] = buffer[2*n+1];
+        }
+    }
 
     // ファイルからデータをモノラルに変換しての取得
-    void SD_WavReader::ReadAndToMono(int16_t data[], uint32_t size)
+    void SD_WavReader::ReadAndToMono(Array<int16_t>& data)
     {
         if (!ok_) ErrorMsg("Get data FAILED");
+        uint32_t size = data.Length();
         fread(buffer, sizeof(int16_t), size*2, fp_);
         for (int n=0; n<size; n++)
             data[n] = (buffer[2*n] + buffer[2*n+1])/2;