
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
MyFunctions.cpp
00001 //-------------------------------------------------------------- 00002 // グラフィックイコライザ付き SD オーディオプレーヤーで使う大域関数 00003 // 00004 // 2016/05/09, Copyright (c) 2016 MIKAMI, Naoki 00005 //-------------------------------------------------------------- 00006 00007 #include "MyFunctions.hpp" 00008 00009 // 1フレーム分の信号処理 (イコライザ) の実行 00010 void SignalProcessing(SD_WavReader &sdReader, SaiIO &mySai, 00011 int16_t sn[], BiquadGrEq hn[], 00012 int stages, bool on) 00013 { 00014 // 1フレーム分のデータを SD から読み込む 00015 sdReader.ReadAndToMono(sn, mySai.GetLength()); 00016 00017 while (!mySai.IsXferred()) {} // データの転送が終わるまで待つ 00018 //-------------------------------------------------------------- 00019 // 1フレーム分のイコライザ処理を行い,その結果を出力する 00020 for (int n=0; n<mySai.GetLength(); n++) 00021 { 00022 // 縦続形の IIR フィルタ実行 00023 float xn = 0.125f*sn[n]; // 0.125 の乗算はブースとしてもクリップ 00024 // されないようにするため 00025 float yn = xn; 00026 for (int k=0; k<stages; k++) yn = hn[k].Execute(yn); 00027 int16_t value = on ? (int16_t)yn : xn; 00028 mySai.Output(value, value); // 音響信号の出力 00029 } 00030 //-------------------------------------------------------------- 00031 mySai.ResetXferred(); // 次のデータ転送に備える 00032 } 00033 00034 // SD カードのファイルのオープン 00035 int32_t SD_Open(SD_WavReader &sdReader, 00036 string fileName, int32_t frameSize) 00037 { 00038 sdReader.Open(fileName); 00039 sdReader.IsWavFile(); 00040 return sdReader.GetSize()/frameSize; 00041 } 00042 00043 // ファイルの選択 00044 // selectedName: 選択されたファイル名 00045 void SelectFile(ButtonGroup &menu, FileSelector &selector, 00046 Label &msg, string fileList[], int *selected) 00047 { 00048 selector.DisplayFileList(*selected); 00049 msg.Draw("Select file"); 00050 do 00051 { 00052 if (selector.Select(fileList, selected)) 00053 menu.Activate(1); // PLAY 有効 00054 // ren: change wait timer 200 to 60 00055 wait_ms(60); 00056 } while (!menu.Touched(1)); // PLAY がタッチされるまで繰り返す 00057 } 00058 00059 // フィルタの周波数特性の変更 00060 void ModifyFilter(DesignerDrawer &drawerObj, 00061 SeekbarGroup &myBars, BiquadGrEq hn[], 00062 Button &flat, ButtonGroup &onOff, bool &on) 00063 { 00064 00065 // 周波数特性を平坦化 00066 if (flat.Touched()) 00067 { 00068 drawerObj.DrawFlat(); 00069 for (int n=0; n<drawerObj.GetStages(); n++) 00070 hn[n] = BiquadGrEq(drawerObj.GetCoefficient(n)); 00071 myBars.DrawAll(0); // ツマミの位置を 0 dB に設定する 00072 flat.Draw(); 00073 return; 00074 } 00075 00076 int sw = 0; 00077 if (onOff.GetTouchedNumber(sw)) 00078 on = (sw == 0) ? true : false; 00079 00080 static int num = 0; 00081 if (!myBars.GetSlidedNumber(num)) return; 00082 drawerObj.DesignAndRedraw(myBars.GetValue(num), num); 00083 hn[num] = BiquadGrEq(drawerObj.GetCoefficient(num)); 00084 }
Generated on Wed Jul 13 2022 09:35:21 by
