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
MyClasses_Functions/MyFunctions.cpp@2:2a5c93bf729a, 2016-05-01 (annotated)
- 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?
User | Revision | Line number | New 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 |