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@5:a5a4f9d7b26c, 2016-05-07 (annotated)
- 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?
User | Revision | Line number | New 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 | } |