![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
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
- Committer:
- MikamiUitOpen
- Date:
- 2016-04-27
- Revision:
- 1:a5837720e14a
- Parent:
- 0:e953eb392151
- Child:
- 2:2a5c93bf729a
File content as of revision 1:a5837720e14a:
//-------------------------------------------------------------- // グラフィックイコライザ付き SD オーディオプレーヤーで使う大域関数 // // 2016/04/27, Copyright (c) 2016 MIKAMI, Naoki //-------------------------------------------------------------- #include "MyFunctions.hpp" // 1フレーム分の信号処理 (イコライザ) の実行 void ProcessSignal(SD_WavReader &sdReader, SaiIO_O &mySai, int16_t sn[], BiquadGrEq hn[], int stages) { // 1フレーム分のデータを SD から読み込む sdReader.ReadAndToMono(sn, mySai.GetLength()); while (!mySai.IsXferred()) {} // データの転送が終わるまで待つ //-------------------------------------------------------------- // 1フレーム分のイコライザ処理を行い,その結果を出力する for (int n=0; n<mySai.GetLength(); n++) { // 縦続形の IIR フィルタ実行 float yn = 0.3f*sn[n]; // 0.3 の乗算はブースとしてもクリップされないようにするため for (int k=0; k<stages; k++) yn = hn[k].Execute(yn); int16_t value = (int16_t)yn; mySai.Output(value, value); // 音響信号の出力 } //-------------------------------------------------------------- mySai.ResetXferred(); // 次のデータ転送に備える } // SD カードのファイルのオープン int32_t SD_Open(SD_WavReader &sdReader, string fileName, int32_t frameSize) { sdReader.Open(fileName); sdReader.IsWavFile(); return sdReader.GetSize()/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, SeekbarGroup &myBars, BiquadGrEq hn[], Button &reset) { if (reset.Touched()) { drawerObj.DesignAndRedraw(); for (int n=0; n<drawerObj.GetStages(); n++) hn[n] = BiquadGrEq(drawerObj.GetCoefficient(n)); myBars.DrawAll(0); // ツマミの位置を 0 dB に設定する reset.Draw(); return; } static int num = 0; if (!myBars.GetSlidedNumber(num)) return; drawerObj.DesignAndRedraw(myBars.GetValue(num), num); hn[num] = BiquadGrEq(drawerObj.GetCoefficient(num)); }