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:
Sun May 01 02:44:30 2016 +0000
Revision:
2:2a5c93bf729a
Parent:
1:a5837720e14a
Child:
5:a5a4f9d7b26c
3

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 2:2a5c93bf729a 4 // 2016/05/01, 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 0:e953eb392151 10 void ProcessSignal(SD_WavReader &sdReader, SaiIO_O &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 2:2a5c93bf729a 23 float xn = 0.125f*sn[n]; // 0.125 の乗算はブースとしてもクリップされないようにするため
MikamiUitOpen 2:2a5c93bf729a 24 float yn = xn;
MikamiUitOpen 0:e953eb392151 25 for (int k=0; k<stages; k++) yn = hn[k].Execute(yn);
MikamiUitOpen 2:2a5c93bf729a 26 int16_t value = on ? (int16_t)yn : xn;
MikamiUitOpen 1:a5837720e14a 27 mySai.Output(value, value); // 音響信号の出力
MikamiUitOpen 0:e953eb392151 28 }
MikamiUitOpen 0:e953eb392151 29 //--------------------------------------------------------------
MikamiUitOpen 0:e953eb392151 30 mySai.ResetXferred(); // 次のデータ転送に備える
MikamiUitOpen 0:e953eb392151 31 }
MikamiUitOpen 0:e953eb392151 32
MikamiUitOpen 0:e953eb392151 33 // SD カードのファイルのオープン
MikamiUitOpen 0:e953eb392151 34 int32_t SD_Open(SD_WavReader &sdReader,
MikamiUitOpen 0:e953eb392151 35 string fileName, int32_t frameSize)
MikamiUitOpen 0:e953eb392151 36 {
MikamiUitOpen 0:e953eb392151 37 sdReader.Open(fileName);
MikamiUitOpen 0:e953eb392151 38 sdReader.IsWavFile();
MikamiUitOpen 0:e953eb392151 39 return sdReader.GetSize()/frameSize;
MikamiUitOpen 0:e953eb392151 40 }
MikamiUitOpen 0:e953eb392151 41
MikamiUitOpen 0:e953eb392151 42 // ファイルの選択
MikamiUitOpen 0:e953eb392151 43 // selectedName: 選択されたファイル名
MikamiUitOpen 0:e953eb392151 44 void SelectFile(ButtonGroup &menu, FileSelector &selector,
MikamiUitOpen 0:e953eb392151 45 Label &msg, string &selectedName)
MikamiUitOpen 0:e953eb392151 46 {
MikamiUitOpen 2:2a5c93bf729a 47 selector.DisplayFileList();
MikamiUitOpen 0:e953eb392151 48 msg.Draw("Select file");
MikamiUitOpen 0:e953eb392151 49 do
MikamiUitOpen 0:e953eb392151 50 {
MikamiUitOpen 0:e953eb392151 51 if (selector.Select(selectedName))
MikamiUitOpen 0:e953eb392151 52 menu.Activate(1); // PLAY 有効
MikamiUitOpen 0:e953eb392151 53 wait_ms(200);
MikamiUitOpen 0:e953eb392151 54 } while (!menu.Touched(1)); // PLAY がタッチされるまで繰り返す
MikamiUitOpen 0:e953eb392151 55 }
MikamiUitOpen 0:e953eb392151 56
MikamiUitOpen 0:e953eb392151 57 // フィルタの周波数特性の変更
MikamiUitOpen 0:e953eb392151 58 void ModifyFilter(DesignerDrawer &drawerObj,
MikamiUitOpen 0:e953eb392151 59 SeekbarGroup &myBars, BiquadGrEq hn[],
MikamiUitOpen 2:2a5c93bf729a 60 ButtonGroup &onOff, bool &on)
MikamiUitOpen 0:e953eb392151 61 {
MikamiUitOpen 2:2a5c93bf729a 62 int sw = 0;
MikamiUitOpen 2:2a5c93bf729a 63 if (onOff.GetTouchedNumber(sw))
MikamiUitOpen 2:2a5c93bf729a 64 on = (sw == 0) ? true : false;
MikamiUitOpen 2:2a5c93bf729a 65 /*
MikamiUitOpen 0:e953eb392151 66 {
MikamiUitOpen 0:e953eb392151 67 drawerObj.DesignAndRedraw();
MikamiUitOpen 0:e953eb392151 68 for (int n=0; n<drawerObj.GetStages(); n++)
MikamiUitOpen 0:e953eb392151 69 hn[n] = BiquadGrEq(drawerObj.GetCoefficient(n));
MikamiUitOpen 0:e953eb392151 70 myBars.DrawAll(0); // ツマミの位置を 0 dB に設定する
MikamiUitOpen 0:e953eb392151 71 reset.Draw();
MikamiUitOpen 0:e953eb392151 72 return;
MikamiUitOpen 0:e953eb392151 73 }
MikamiUitOpen 2:2a5c93bf729a 74 */
MikamiUitOpen 0:e953eb392151 75 static int num = 0;
MikamiUitOpen 0:e953eb392151 76 if (!myBars.GetSlidedNumber(num)) return;
MikamiUitOpen 0:e953eb392151 77 drawerObj.DesignAndRedraw(myBars.GetValue(num), num);
MikamiUitOpen 0:e953eb392151 78 hn[num] = BiquadGrEq(drawerObj.GetCoefficient(num));
MikamiUitOpen 0:e953eb392151 79 }
MikamiUitOpen 0:e953eb392151 80
MikamiUitOpen 0:e953eb392151 81