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:
2:2a5c93bf729a
Parent:
1:a5837720e14a
Child:
4:14f401cb069a
diff -r a5837720e14a -r 2a5c93bf729a main.cpp
--- a/main.cpp	Wed Apr 27 14:24:45 2016 +0000
+++ b/main.cpp	Sun May 01 02:44:30 2016 +0000
@@ -5,7 +5,7 @@
 //                   上記以外の形式は扱わない
 //      出力:モノラル
 //
-//  2016/04/27, Copyright (c) 2016 MIKAMI, Naoki
+//  2016/05/01, Copyright (c) 2016 MIKAMI, Naoki
 //--------------------------------------------------------------
 
 #include "MyFunctions.hpp"
@@ -15,20 +15,21 @@
 
 int main()
 {
-    Label myLabel(80, 4, "SD Card Audio Player", Label::LEFT, Font16);
+    Label myLabel1(212, 2, "SD Card Audio Player", Label::CENTER, Font16);
+    Label myLabel2(212, 16, "---- Graphic equalizer ----", Label::CENTER, Font12);
 
     const int FS = AUDIO_FREQUENCY_44K;         // 標本化周波数: 44.1 kHz
     SaiIO_O mySai(2048, FS);
 
     SD_WavReader sdReader(mySai.GetLength());   // SD カード読み込み用オブジェクト
     const int MAX_FILES = 7;
-    FileSelector selector(4, 28, MAX_FILES, 38, sdReader);
+    FileSelector selector(4, 26, MAX_FILES, 37, sdReader);
     if (!selector.CreateTable())
         BlinkLabel errLabel(240, 100, "SD CARD ERROR", Label::CENTER);
 
     // ボタン用の定数
-    const uint16_t BG_LEFT = 420;
-    const uint16_t BG_WIDTH = 60;
+    const uint16_t BG_LEFT = 414;
+    const uint16_t BG_WIDTH = 66;
     const uint16_t BG_HEIGHT = 40;
 
     // ButtonGroup: "OPEN", "PLAY", "PAUSE", "RESUME", "STOP"
@@ -39,21 +40,23 @@
     menu.Activate(0);
     for (int n=1; n<5; n++) menu.Inactivate(n);
 
-    Button flatButton(BG_LEFT, 230, BG_WIDTH, BG_HEIGHT, "FLAT");
+    const string ON_OFF[2] = {"ON", "OFF"};
+    ButtonGroup onOff(BG_LEFT, 230, BG_WIDTH/2, BG_HEIGHT,
+                      2, ON_OFF, 0, 0, 2, 0);
 
     // フィルタの設計と周波数特性描画用
     const int STAGES = 9;       // バンド数
     DesignerDrawer drawerObj(
-                     30,        // グラフの左端の位置
+                     28,        // グラフの左端の位置
                      130,       // グラフの下端の位置
                      STAGES,    // バンド数
                      62.5f,     // 最低域バンドの中心周波数
                      FS,        // 標本化周波数
-                     4);        // 1 dB 当たりのピクセル数
+                     2.5f);     // 1 dB 当たりのピクセル数
 
     // 周波数特性変更用スライダ
-    SeekbarGroup myBars(drawerObj.GetX0(), 186, 66, STAGES,
-                        drawerObj.GetSpaceX(), -8, 8, 0,
+    SeekbarGroup myBars(drawerObj.GetX0(), 178, 82, STAGES,
+                        drawerObj.GetSpaceX(), -9.6f, 9.6f, 0,
                         SeekBar::Vertical);
 
     // フィルタの準備
@@ -65,6 +68,7 @@
     int32_t frameSize = mySai.GetLength();
     int16_t *sn = new int16_t[frameSize+1]; // フレームバッファ
     bool playOk = false;
+    bool on = true;
     bool whileFirst = true;
     string fileName;
     int32_t loopCount;
@@ -77,28 +81,28 @@
             {
                 whileFirst = false;
                 while (!menu.Touched(0))    // OPEN がタッチされるまで待つ
-                    ModifyFilter(drawerObj, myBars, hn, flatButton);
-                SelectFile(menu, selector, myLabel, fileName);
+                    ModifyFilter(drawerObj, myBars, hn, onOff, on);
+                SelectFile(menu, selector, myLabel1, fileName);
             }
             else
             {
                 menu.Activate(1);       // PLAY 有効
                 int touch10;
                 while (!menu.GetTouchedNumber(touch10))
-                    ModifyFilter(drawerObj, myBars, hn, flatButton);
+                    ModifyFilter(drawerObj, myBars, hn, onOff, on);
                 if (touch10 == 0)
-                    SelectFile(menu, selector, myLabel, fileName);
+                    SelectFile(menu, selector, myLabel1, fileName);
             }
 
             loopCount = SD_Open(sdReader, fileName, frameSize);
             while (!menu.Touched(1))   // PLAY がタッチされるまで待つ
-                ModifyFilter(drawerObj, myBars, hn, flatButton);
+                ModifyFilter(drawerObj, myBars, hn, onOff, on);
         }
         else
             loopCount = SD_Open(sdReader, fileName, frameSize);
 
-        selector.Erase(BG_LEFT-4, 288);
-        myLabel.Draw("9-band Graphic Equalizer");
+        selector.Erase(0, 0, BG_LEFT-4, 288);
+        myLabel1.Draw("9-band Graphic Equalizer");
         myBars.RedrawAll();
         drawerObj.DrawResponse();
         menu.Inactivate(0); // OPEN 無効
@@ -126,7 +130,7 @@
                 // PLAY か RESUME か STOP がタッチされるまで待つ
                 int touch134 = -1;
                 while (!menu.GetTouchedNumber(touch134))
-                    ModifyFilter(drawerObj, myBars, hn, flatButton);
+                    ModifyFilter(drawerObj, myBars, hn, onOff, on);
                 switch (touch134)
                 {
                     case 1: playOk = true;  // 最初から PLAY
@@ -142,9 +146,9 @@
             }
             if (playOk || stopOk) break;
 
-            ModifyFilter(drawerObj, myBars, hn, flatButton);
+            ModifyFilter(drawerObj, myBars, hn, onOff, on);
             // 1フレーム分の信号処理 (イコライザ) の実行
-            ProcessSignal(sdReader, mySai, sn, hn, STAGES);
+            ProcessSignal(sdReader, mySai, sn, hn, STAGES, on);
         }
         mySai.Stop();
         menu.Activate(0);               // OPEN 有効
@@ -154,4 +158,3 @@
         sdReader.Close();   // SD のファイルのクローズ
     }
 }
-