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:
0:e953eb392151
Child:
1:a5837720e14a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MyClasses_Functions/MyFunctions.cpp	Wed Apr 27 13:56:39 2016 +0000
@@ -0,0 +1,75 @@
+//--------------------------------------------------------------
+//  グラフィックイコライザ付き SD オーディオプレーヤーで使う大域関数
+//
+//  2016/04/27, Copyright (c) 2016 MIKAMI, Naoki
+//--------------------------------------------------------------
+
+#include "MyFunctions.hpp"
+
+// 1フレーム分の信号処理 (イコライザ) の実行
+void ProcessSignal(SD_WavReader &sdReader, SaiIO_O &mySai,
+                   int16_t sn[], BiquadGrEq hn[], int stages)
+{
+    // 1フレーム分のデータを SD から読み込む
+    sdReader.ReadAndToMono(sn, mySai.GetLength());
+
+    while (!mySai.IsXferred()) {}  // データの転送が終わるまで待つ
+    //--------------------------------------------------------------
+    // 1フレーム分のイコライザ処理を行い,その結果を出力する
+    for (int n=0; n<mySai.GetLength(); n++)
+    {
+        // 縦続形の IIR フィルタ実行
+        float yn = sn[n];
+        for (int k=0; k<stages; k++) yn = hn[k].Execute(yn);
+        int16_t value = (int16_t)yn;
+        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)
+{
+    msg.Draw("Select file");
+    selector.DisplayFileList();   
+    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 &reset)
+{
+    if (reset.Touched())
+    {
+        drawerObj.DesignAndRedraw();
+        for (int n=0; n<drawerObj.GetStages(); n++)
+            hn[n] = BiquadGrEq(drawerObj.GetCoefficient(n));
+        myBars.DrawAll(0);  // ツマミの位置を 0 dB に設定する
+        reset.Draw();
+        return;
+    }
+    static int num = 0;
+    if (!myBars.GetSlidedNumber(num)) return;
+    drawerObj.DesignAndRedraw(myBars.GetValue(num), num);
+    hn[num] = BiquadGrEq(drawerObj.GetCoefficient(num));
+}
+
+