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:
13:728576fffe65
Parent:
11:f4929315bc9f
Child:
14:ed252615db80
--- a/main.cpp	Sun Jul 03 05:30:26 2016 +0000
+++ b/main.cpp	Sat Jul 23 09:32:33 2016 +0000
@@ -1,161 +1,31 @@
-//--------------------------------------------------------------
+//----------------------------------------------------------------
 //  グラフィックイコライザ付き SD オーディオプレーヤー
 //      SD のファイル: *.wav
 //                   PCM,16 ビットステレオ,標本化周波数 44.1 kHz
 //                   上記以外の形式は扱わない
 //      出力:モノラル(L+R,左チャンネルのみ,右チャンネルには出力しない)
 //
-//  2016/07/03, Copyright (c) 2016 MIKAMI, Naoki
-//--------------------------------------------------------------
+//  2016/07/23, Copyright (c) 2016 MIKAMI, Naoki
+//----------------------------------------------------------------
 
-#include "MyFunctions.hpp"
-#include "BlinkLabel.hpp"
+#include "GraphicEqualizer.hpp"
 
 using namespace Mikami;
 
 int main()
 {
-    const uint16_t X_CENTER = 214;
-    Label myLabel1(X_CENTER,  4, "9-band Graphic Equalizer", Label::CENTER, Font16);
-    Label myLabel2(X_CENTER, 20, "---- Source: microSD card ----", Label::CENTER);
-
-    const int FS = AUDIO_FREQUENCY_44K;         // 標本化周波数: 44.1 kHz
-    SaiIO mySai(SaiIO::OUTPUT, 2048, FS);
-
-    SD_WavReader sdReader(mySai.GetLength());   // SD カード読み込み用オブジェクト
-    const int MAX_FILES = 7;
-    FileSelector selector(4, 22, MAX_FILES, 37, sdReader);
-    if (!selector.CreateTable())
-        BlinkLabel errLabel(240, 100, "SD CARD ERROR", Label::CENTER);
-
-    // ボタン用の定数
-    const uint16_t BG_LEFT = 414;
-    const uint16_t BG_WIDTH = 66;
-    const uint16_t BG_HEIGHT = 36;
-    
-    // ButtonGroup: "OPEN", "PLAY", "PAUSE", "RESUME", "STOP"
-    const string MENU[5] = {"OPEN", "PLAY", "PAUSE", "RESUME", "STOP"};
-    ButtonGroup menu(BG_LEFT, 2, BG_WIDTH, BG_HEIGHT,
-                     5, MENU, 0, 2, 1);
-    menu.InactivateAll();
-
-    menu.Activate(0);
-    Button flat(BG_LEFT, 197, BG_WIDTH, BG_HEIGHT, "FLAT");
-
-    const string ON_OFF[2] = {"ON", "OFF"};
-    ButtonGroup onOff(BG_LEFT, 235, BG_WIDTH/2, BG_HEIGHT,
-                      2, ON_OFF, 0, 0, 2, 0);
+    const int FS = AUDIO_FREQUENCY_44K; // 標本化周波数
 
     // フィルタの設計と周波数特性描画用
-    const int BANDS = 9;        // バンド数
     DesignerDrawer drawerObj(
-                     28,        // グラフの左端の位置
-                     130,       // グラフの下端の位置
-                     BANDS,     // バンド数
-                     62.5f,     // 最低域バンドの中心周波数
-                     FS,        // 標本化周波数
-                     2.5f);     // 1 dB 当たりのピクセル数
-
-    // 周波数特性変更用スライダ
-    SeekbarGroup myBars(drawerObj.GetX0(), 178, 82, BANDS,
-                        drawerObj.GetSpaceX(), -8.0f, 8.0f, 0,
-                        SeekBar::Vertical);
-
-    // フィルタの準備
-    BiquadGrEq::Coefs ck[BANDS];
-    drawerObj.GetCoefficients(ck);
-    BiquadGrEq hn[BANDS];
-    for (int k=0; k<BANDS; k++) hn[k] = BiquadGrEq(ck[k]);
-
-    int32_t frameSize = mySai.GetLength();
-    bool playOk = false;
-    bool on = true;
-    bool whileFirst = true;
-    string fileName;
-    int32_t loopCount;
-
-    while (true)
-    {
-        if (!playOk)
-        {
-            if (whileFirst)
-            {
-                whileFirst = false;
-                while (!menu.Touched(0))    // OPEN がタッチされるまで待つ
-                    ModifyFilter(drawerObj, myBars, hn, flat, onOff, on);
-                SelectFile(menu, selector, myLabel1, fileName);
-            }
-            else
-            {
-                menu.Activate(1);       // PLAY 有効
-                int touch10;
-                while (!menu.GetTouchedNumber(touch10))
-                    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, flat, onOff, on);
-        }
-        else
-            loopCount = SD_Open(sdReader, fileName, frameSize);
+        28,     // グラフの左端の位置
+        130,    // グラフの下端の位置
+        9,      // バンド数
+        62.5f,  // 最低域バンドの中心周波数
+        FS,     // 標本化周波数
+        2.5f);  // 1 dB 当たりのピクセル数
 
-        selector.Erase(0, 0, BG_LEFT-4, 288);
-        myLabel1.Draw();
-        myBars.RedrawAll();
-        drawerObj.DrawResponse();
-        menu.Inactivate(0); // OPEN 無効
-        menu.Activate(2);   // PAUSE 有効
-        menu.Activate(4);   // STOP 有効
-
-        playOk = false;
-        bool stopOk = false;
-
-        // IIR フィルタの内部の遅延器のクリア
-        for (int k=0; k<BANDS; k++) hn[k].Clear();
-        mySai.PlayOut();    // Play 開始
-
-        for (int k=0; k<loopCount; k++)
-        {
-            int touch42 = -1;
-            menu.GetTouchedNumber(touch42);
-            if (touch42 == 4) break;    // STOP
-            if (touch42 == 2)           // PAUSE
-            {
-                menu.Inactivate(2); // PAUSE 無効
-                menu.Activate(3);   // RESUME 有効
-                mySai.PauseOut();
-
-                // PLAY か RESUME か STOP がタッチされるまで待つ
-                int touch134 = -1;
-                while (!menu.GetTouchedNumber(touch134))
-                    ModifyFilter(drawerObj, myBars, hn, flat, onOff, on);
-                switch (touch134)
-                {
-                    case 1: playOk = true;      // 最初から PLAY
-                            break;
-                    case 3: mySai.ResumeOut();  // PAUSE したところから PLAY 再開
-                            menu.Activate(2);
-                            menu.Inactivate(3);
-                            menu.TouchedColor(1);
-                            break;
-                    case 4: stopOk = true;      // STOP
-                            break;
-                }
-            }
-            if (playOk || stopOk) break;
-
-            ModifyFilter(drawerObj, myBars, hn, flat, onOff, on);
-            // 1フレーム分の信号処理 (イコライザ) の実行
-            SignalProcessing(sdReader, mySai, hn, BANDS, on);
-        }
-        mySai.StopOut();
-        menu.Activate(0);               // OPEN 有効
-        if (!playOk) menu.Activate(1);  // PLAY 有効
-        for (int n=2; n<5; n++)         // その他は無効
-            menu.Inactivate(n);
-        sdReader.Close();   // SD のファイルのクローズ
-    }
+    GraphicEqualizer myPlayer("9-band Graphic Equalizer",
+                              FS, drawerObj);
+    myPlayer.Execute();
 }