Output the audio signal with filtering by graphic equalizer in the *.wav file on the SD card using onboard CODEC. SD カードの *.wav ファイルのオーディオ信号をグラフィック・イコライザを通して,ボードに搭載されているCODEC で出力する.

Dependencies:   F746_GUI F746_SAI_IO SD_PlayerSkeleton FrequencyResponseDrawer

Revision:
7:be29ba9c83b2
Parent:
5:a5a4f9d7b26c
Child:
9:0d5bd1539291
--- a/main.cpp	Sat May 07 08:15:00 2016 +0000
+++ b/main.cpp	Mon May 09 08:53:23 2016 +0000
@@ -5,7 +5,7 @@
 //                   上記以外の形式は扱わない
 //      出力:モノラル
 //
-//  2016/05/07, Copyright (c) 2016 MIKAMI, Naoki
+//  2016/05/09, Copyright (c) 2016 MIKAMI, Naoki
 //--------------------------------------------------------------
 
 #include "MyFunctions.hpp"
@@ -30,7 +30,7 @@
     // ボタン用の定数
     const uint16_t BG_LEFT = 414;
     const uint16_t BG_WIDTH = 66;
-    const uint16_t BG_HEIGHT = 40;
+    const uint16_t BG_HEIGHT = 36;
 
     // ButtonGroup: "OPEN", "PLAY", "PAUSE", "RESUME", "STOP"
     const string MENU[5] = {"OPEN", "PLAY", "PAUSE", "RESUME", "STOP"};
@@ -40,8 +40,10 @@
     menu.Activate(0);
     for (int n=1; n<5; n++) menu.Inactivate(n);
 
+    Button flat(BG_LEFT, 197, BG_WIDTH, BG_HEIGHT, "FLAT");
+
     const string ON_OFF[2] = {"ON", "OFF"};
-    ButtonGroup onOff(BG_LEFT, 230, BG_WIDTH/2, BG_HEIGHT,
+    ButtonGroup onOff(BG_LEFT, 235, BG_WIDTH/2, BG_HEIGHT,
                       2, ON_OFF, 0, 0, 2, 0);
 
     // フィルタの設計と周波数特性描画用
@@ -56,7 +58,7 @@
 
     // 周波数特性変更用スライダ
     SeekbarGroup myBars(drawerObj.GetX0(), 178, 82, STAGES,
-                        drawerObj.GetSpaceX(), -9.6f, 9.6f, 0,
+                        drawerObj.GetSpaceX(), -8.0f, 8.0f, 0,
                         SeekBar::Vertical);
 
     // フィルタの準備
@@ -81,7 +83,7 @@
             {
                 whileFirst = false;
                 while (!menu.Touched(0))    // OPEN がタッチされるまで待つ
-                    ModifyFilter(drawerObj, myBars, hn, onOff, on);
+                    ModifyFilter(drawerObj, myBars, hn, flat, onOff, on);
                 SelectFile(menu, selector, myLabel1, fileName);
             }
             else
@@ -89,14 +91,14 @@
                 menu.Activate(1);       // PLAY 有効
                 int touch10;
                 while (!menu.GetTouchedNumber(touch10))
-                    ModifyFilter(drawerObj, myBars, hn, onOff, on);
+                    ModifyFilter(drawerObj, myBars, hn, flat, onOff, on);
                 if (touch10 == 0)
                     SelectFile(menu, selector, myLabel1, fileName);
             }
 
             loopCount = SD_Open(sdReader, fileName, frameSize);
             while (!menu.Touched(1))   // PLAY がタッチされるまで待つ
-                ModifyFilter(drawerObj, myBars, hn, onOff, on);
+                ModifyFilter(drawerObj, myBars, hn, flat, onOff, on);
         }
         else
             loopCount = SD_Open(sdReader, fileName, frameSize);
@@ -114,6 +116,7 @@
 
         // IIR フィルタの内部の遅延器のクリア
         for (int k=0; k<STAGES; k++) hn[k].Clear();
+        mySai.PlayOut();    // Play 開始
 
         for (int k=0; k<loopCount; k++)
         {
@@ -129,7 +132,7 @@
                 // PLAY か RESUME か STOP がタッチされるまで待つ
                 int touch134 = -1;
                 while (!menu.GetTouchedNumber(touch134))
-                    ModifyFilter(drawerObj, myBars, hn, onOff, on);
+                    ModifyFilter(drawerObj, myBars, hn, flat, onOff, on);
                 switch (touch134)
                 {
                     case 1: playOk = true;  // 最初から PLAY
@@ -145,9 +148,9 @@
             }
             if (playOk || stopOk) break;
 
-            ModifyFilter(drawerObj, myBars, hn, onOff, on);
+            ModifyFilter(drawerObj, myBars, hn, flat, onOff, on);
             // 1フレーム分の信号処理 (イコライザ) の実行
-            ProcessSignal(sdReader, mySai, sn, hn, STAGES, on);
+            SignalProcessing(sdReader, mySai, sn, hn, STAGES, on);
         }
         mySai.Stop();
         menu.Activate(0);               // OPEN 有効