revised version of F746_SD_GraphicEqualizer

Dependencies:   BSP_DISCO_F746NG F746_GUI F746_SAI_IO FrequencyResponseDrawer LCD_DISCO_F746NG SDFileSystem_Warning_Fixed TS_DISCO_F746NG mbed

Fork of F746_SD_GraphicEqualizer by 不韋 呂

Revision:
8:12aa05f3cc24
Child:
10:fc6367c2ffcf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MyClasses_Functions/MyFunctions.cpp	Mon May 09 08:54:09 2016 +0000
@@ -0,0 +1,83 @@
+//--------------------------------------------------------------
+//  グラフィックイコライザ付き SD オーディオプレーヤーで使う大域関数
+//
+//  2016/05/09, Copyright (c) 2016 MIKAMI, Naoki
+//--------------------------------------------------------------
+
+#include "MyFunctions.hpp"
+
+// 1フレーム分の信号処理 (イコライザ) の実行
+void SignalProcessing(SD_WavReader &sdReader, SaiIO &mySai,
+                      int16_t sn[], BiquadGrEq hn[],
+                      int stages, bool on)
+{
+    // 1フレーム分のデータを SD から読み込む
+    sdReader.ReadAndToMono(sn, mySai.GetLength());
+
+    while (!mySai.IsXferred()) {}   // データの転送が終わるまで待つ
+    //--------------------------------------------------------------
+    // 1フレーム分のイコライザ処理を行い,その結果を出力する
+    for (int n=0; n<mySai.GetLength(); n++)
+    {
+        // 縦続形の IIR フィルタ実行
+        float xn = 0.125f*sn[n];    // 0.125 の乗算はブースとしてもクリップ
+                                    // されないようにするため
+        float yn = xn;
+        for (int k=0; k<stages; k++) yn = hn[k].Execute(yn);
+        int16_t value = on ? (int16_t)yn : xn;
+        mySai.Output(value, value); // 音響信号の出力
+    }
+    //--------------------------------------------------------------
+    mySai.ResetXferred();   // 次のデータ転送に備える
+}
+
+// SD カードのファイルのオープン
+int32_t SD_Open(SD_WavReader &sdReader,
+                string fileName, int32_t frameSize)
+{
+    sdReader.Open(fileName);
+    sdReader.IsWavFile();
+    return sdReader.GetSize()/frameSize;
+}
+
+// ファイルの選択
+//      selectedName:   選択されたファイル名
+void SelectFile(ButtonGroup &menu, FileSelector &selector,
+                Label &msg, string &selectedName)
+{
+    selector.DisplayFileList();   
+    msg.Draw("Select file");
+    do
+    {
+        if (selector.Select(selectedName))
+            menu.Activate(1);   // PLAY 有効
+        wait_ms(200);
+    } while (!menu.Touched(1)); // PLAY がタッチされるまで繰り返す
+}
+
+// フィルタの周波数特性の変更
+void ModifyFilter(DesignerDrawer &drawerObj,
+                  SeekbarGroup &myBars, BiquadGrEq hn[],
+                  Button &flat, ButtonGroup &onOff, bool &on)
+{
+
+    // 周波数特性を平坦化
+    if (flat.Touched())
+    {
+        drawerObj.DrawFlat();
+        for (int n=0; n<drawerObj.GetStages(); n++)
+            hn[n] = BiquadGrEq(drawerObj.GetCoefficient(n));
+        myBars.DrawAll(0);  // ツマミの位置を 0 dB に設定する
+        flat.Draw();
+        return;
+    }
+
+    int sw = 0;
+    if (onOff.GetTouchedNumber(sw))
+        on = (sw == 0) ? true : false;
+
+    static int num = 0;
+    if (!myBars.GetSlidedNumber(num)) return;
+    drawerObj.DesignAndRedraw(myBars.GetValue(num), num);
+    hn[num] = BiquadGrEq(drawerObj.GetCoefficient(num));
+}