Output the audio signal (*.bin) with filtering by IIR filter in the SD card using onboard CODEC. For *.wav file, F746_SD_WavPlayer and F746_SD_GraphicEqualiser are published on mbed. SD カードのオーディオ信号 (*.bin) を遮断周波数可変の IIR フィルタを通して,ボードに搭載されているCODEC で出力する.*.wav 形式のファイル用には,F746_SD_WavPlayer と F746_SD_GraphicEqualiser を mbed で公開している.

Dependencies:   BSP_DISCO_F746NG_patch_fixed F746_GUI LCD_DISCO_F746NG SDFileSystem_Warning_Fixed TS_DISCO_F746NG mbed

Revision:
0:6748e3332e85
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MyClasses_Functions/MyFunctions.cpp	Fri Apr 08 13:11:53 2016 +0000
@@ -0,0 +1,81 @@
+//--------------------------------------------------------------
+//  フィルタ処理付き SD オーディオプレーヤーで使う大域関数(ヘッダ)
+//
+//  2016/04/07, Copyright (c) 2016 MIKAMI, Naoki
+//--------------------------------------------------------------
+
+#include "MyFunctions.hpp"
+
+// 1フレーム分の信号処理 (IIR フィルタ) の実行
+void ProcessSignal(SD_BinaryReader &sdReader, SaiIO_O &mySai,
+                   int16_t sn[], float g0, Biquad hn[],
+                   int order, bool filterOn)
+{
+    sdReader.Read(sn, mySai.GetLength());   // 1フレーム分のデータを SD から読み込む
+
+    while (!mySai.IsXferred()) {}  // データの転送が終わるまで待つ
+    //--------------------------------------------------------------
+    // 1フレーム分の信号処理を行い,その結果を出力する
+    for (int n=0; n<mySai.GetLength(); n++)
+    {
+        int16_t value;
+        if (filterOn)       // フィルタ処理実行
+        {
+            // 縦続形の IIR フィルタ
+            float yn = g0*sn[n];
+            for (int k=0; k<order/2; k++) yn = hn[k].Execute(yn);
+            value = (int16_t)yn;
+        }
+        else
+            value = sn[n];  // フィルタ処理なし
+        mySai.Output(value, value);    // 音響信号の出力
+    }
+    //--------------------------------------------------------------
+    mySai.ResetXferred();   // 次のデータ転送に備える
+}
+
+// SD カードのファイルのオープン
+int32_t SD_Open(SD_BinaryReader &sdReader,
+                string fileName, int32_t frameSize)
+{
+    sdReader.Open(fileName);
+    return sdReader.ReadSize()/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,
+                   ButtonGroup &lpHp, ButtonGroup &onOff,
+                   Biquad hn[], Biquad::Coefs ck[],
+                   float &g0, bool &filterOn)
+{
+    // フィルタ処理の有効/無効切り替え
+    int sw = 0;
+    if (onOff.GetTouchedNumber(sw))
+        filterOn = (sw == 0) ? true : false;
+
+    // フィルタの周波数特性の変更
+    static int num = 0;
+    lpHp.GetTouchedNumber(num);
+    BilinearDesign::Type typeLH = (BilinearDesign::Type)num;
+    if (drawerObj.ReDesignAndDraw(ck, g0, typeLH))
+        for (int k=0; k<drawerObj.GetOrder()/2; k++)
+        {
+            hn[k].SetCoefficients(ck[k]);
+            hn[k].Clear();
+        }
+}