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 不韋 呂

Committer:
MikamiUitOpen
Date:
Sat May 07 07:33:52 2016 +0000
Revision:
5:a5a4f9d7b26c
Parent:
2:2a5c93bf729a
6. From this revision, using class library "F746_SAI_IO".

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:e953eb392151 1 //--------------------------------------------------------------
MikamiUitOpen 0:e953eb392151 2 // グラフィックイコライザ付き SD オーディオプレーヤーで使う大域関数
MikamiUitOpen 0:e953eb392151 3 //
MikamiUitOpen 5:a5a4f9d7b26c 4 // 2016/05/07, Copyright (c) 2016 MIKAMI, Naoki
MikamiUitOpen 0:e953eb392151 5 //--------------------------------------------------------------
MikamiUitOpen 0:e953eb392151 6
MikamiUitOpen 0:e953eb392151 7 #include "MyFunctions.hpp"
MikamiUitOpen 0:e953eb392151 8
MikamiUitOpen 0:e953eb392151 9 // 1フレーム分の信号処理 (イコライザ) の実行
MikamiUitOpen 5:a5a4f9d7b26c 10 void ProcessSignal(SD_WavReader &sdReader, SaiIO &mySai,
MikamiUitOpen 2:2a5c93bf729a 11 int16_t sn[], BiquadGrEq hn[],
MikamiUitOpen 2:2a5c93bf729a 12 int stages, bool on)
MikamiUitOpen 0:e953eb392151 13 {
MikamiUitOpen 0:e953eb392151 14 // 1フレーム分のデータを SD から読み込む
MikamiUitOpen 0:e953eb392151 15 sdReader.ReadAndToMono(sn, mySai.GetLength());
MikamiUitOpen 0:e953eb392151 16
MikamiUitOpen 1:a5837720e14a 17 while (!mySai.IsXferred()) {} // データの転送が終わるまで待つ
MikamiUitOpen 0:e953eb392151 18 //--------------------------------------------------------------
MikamiUitOpen 0:e953eb392151 19 // 1フレーム分のイコライザ処理を行い,その結果を出力する
MikamiUitOpen 0:e953eb392151 20 for (int n=0; n<mySai.GetLength(); n++)
MikamiUitOpen 0:e953eb392151 21 {
MikamiUitOpen 0:e953eb392151 22 // 縦続形の IIR フィルタ実行
MikamiUitOpen 5:a5a4f9d7b26c 23 float xn = 0.125f*sn[n]; // 0.125 の乗算はブースとしてもクリップ
MikamiUitOpen 5:a5a4f9d7b26c 24 // されないようにするため
MikamiUitOpen 2:2a5c93bf729a 25 float yn = xn;
MikamiUitOpen 0:e953eb392151 26 for (int k=0; k<stages; k++) yn = hn[k].Execute(yn);
MikamiUitOpen 2:2a5c93bf729a 27 int16_t value = on ? (int16_t)yn : xn;
MikamiUitOpen 1:a5837720e14a 28 mySai.Output(value, value); // 音響信号の出力
MikamiUitOpen 0:e953eb392151 29 }
MikamiUitOpen 0:e953eb392151 30 //--------------------------------------------------------------
MikamiUitOpen 0:e953eb392151 31 mySai.ResetXferred(); // 次のデータ転送に備える
MikamiUitOpen 0:e953eb392151 32 }
MikamiUitOpen 0:e953eb392151 33
MikamiUitOpen 0:e953eb392151 34 // SD カードのファイルのオープン
MikamiUitOpen 0:e953eb392151 35 int32_t SD_Open(SD_WavReader &sdReader,
MikamiUitOpen 0:e953eb392151 36 string fileName, int32_t frameSize)
MikamiUitOpen 0:e953eb392151 37 {
MikamiUitOpen 0:e953eb392151 38 sdReader.Open(fileName);
MikamiUitOpen 0:e953eb392151 39 sdReader.IsWavFile();
MikamiUitOpen 0:e953eb392151 40 return sdReader.GetSize()/frameSize;
MikamiUitOpen 0:e953eb392151 41 }
MikamiUitOpen 0:e953eb392151 42
MikamiUitOpen 0:e953eb392151 43 // ファイルの選択
MikamiUitOpen 0:e953eb392151 44 // selectedName: 選択されたファイル名
MikamiUitOpen 0:e953eb392151 45 void SelectFile(ButtonGroup &menu, FileSelector &selector,
MikamiUitOpen 0:e953eb392151 46 Label &msg, string &selectedName)
MikamiUitOpen 0:e953eb392151 47 {
MikamiUitOpen 2:2a5c93bf729a 48 selector.DisplayFileList();
MikamiUitOpen 0:e953eb392151 49 msg.Draw("Select file");
MikamiUitOpen 0:e953eb392151 50 do
MikamiUitOpen 0:e953eb392151 51 {
MikamiUitOpen 0:e953eb392151 52 if (selector.Select(selectedName))
MikamiUitOpen 0:e953eb392151 53 menu.Activate(1); // PLAY 有効
MikamiUitOpen 0:e953eb392151 54 wait_ms(200);
MikamiUitOpen 0:e953eb392151 55 } while (!menu.Touched(1)); // PLAY がタッチされるまで繰り返す
MikamiUitOpen 0:e953eb392151 56 }
MikamiUitOpen 0:e953eb392151 57
MikamiUitOpen 0:e953eb392151 58 // フィルタの周波数特性の変更
MikamiUitOpen 0:e953eb392151 59 void ModifyFilter(DesignerDrawer &drawerObj,
MikamiUitOpen 0:e953eb392151 60 SeekbarGroup &myBars, BiquadGrEq hn[],
MikamiUitOpen 2:2a5c93bf729a 61 ButtonGroup &onOff, bool &on)
MikamiUitOpen 0:e953eb392151 62 {
MikamiUitOpen 2:2a5c93bf729a 63 int sw = 0;
MikamiUitOpen 2:2a5c93bf729a 64 if (onOff.GetTouchedNumber(sw))
MikamiUitOpen 2:2a5c93bf729a 65 on = (sw == 0) ? true : false;
MikamiUitOpen 5:a5a4f9d7b26c 66
MikamiUitOpen 0:e953eb392151 67 static int num = 0;
MikamiUitOpen 0:e953eb392151 68 if (!myBars.GetSlidedNumber(num)) return;
MikamiUitOpen 0:e953eb392151 69 drawerObj.DesignAndRedraw(myBars.GetValue(num), num);
MikamiUitOpen 0:e953eb392151 70 hn[num] = BiquadGrEq(drawerObj.GetCoefficient(num));
MikamiUitOpen 0:e953eb392151 71 }