Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: F746_GUI F746_SAI_IO SD_PlayerSkeleton FrequencyResponseDrawer
GraphicEqualizer.cpp
00001 //-------------------------------------------------------------- 00002 // グラフィックイコライザ用のクラス 00003 // (SD_PlayerSkeleton の派生クラス) 00004 // 00005 // 2017/04/10, Copyright (c) 2017 MIKAMI, Naoki 00006 //-------------------------------------------------------------- 00007 00008 #include "GraphicEqualizer.hpp" 00009 00010 namespace Mikami 00011 { 00012 GraphicEqualizer::GraphicEqualizer(string str, 00013 GrEqDesignerDrawer &obj) 00014 : SD_PlayerSkeleton(str), 00015 flat_(BG_LEFT_, 197, BG_WIDTH_, BG_HEIGHT_, "FLAT"), 00016 onOff_(BG_LEFT_, 235, BG_WIDTH_/2, BG_HEIGHT_, 00017 2, (string[]){"ON", "OFF"}, 0, 0, 2, 0), 00018 // 利得の範囲:-8 dB ~ +8 dB 00019 myBars_(obj.GetX0(), 178, 82, 00020 obj.GetBands(), obj.GetSpaceX(), 00021 -8.0f, 8.0f, 0, SeekBar::Vertical), 00022 drawerObj_(obj), 00023 BANDS_(drawerObj_.GetBands()), hn_(BANDS_) 00024 { 00025 // 周波数特性の描画 00026 drawerObj_.DrawResponse(); 00027 00028 // フィルタの準備 00029 for (int k=0; k<BANDS_; k++) 00030 hn_[k] = BiquadGrEq(drawerObj_.GetCoefficient(k)); 00031 00032 on_ = true; 00033 } 00034 00035 // 1ブロック分の信号処理の実行 00036 void GraphicEqualizer::SignalProcessing() 00037 { 00038 // 1ブロック分のステレオデータを SD から読み込みモノラルにする 00039 sdReader_.ReadAndToMono(sn_); 00040 00041 while (!mySai_.IsXferred()) {} // データの転送が終わるまで待つ 00042 //------------------------------------------------------------ 00043 // 1ブロック分のイコライザ処理を行い,その結果を出力する 00044 for (int n=0; n<BUFF_SIZE_; n++) 00045 { 00046 // 縦続形の IIR フィルタ実行 00047 float xn = 0.125f*sn_[n]; // 0.125 の乗算はブーストしても 00048 // クリップされないようにするため 00049 float yn = xn; 00050 for (int k=0; k<BANDS_; k++) yn = hn_[k].Execute(yn); 00051 00052 int16_t value = on_ ? (int16_t)yn : xn; 00053 // 音響信号の出力,左右チャンネルに同じものを出力 00054 mySai_.Output(value, value); 00055 } 00056 //------------------------------------------------------------ 00057 } 00058 00059 // グラフィックイコライザのパラメータ変更 00060 void GraphicEqualizer::Modefy() 00061 { 00062 // 周波数特性を平坦化 00063 if (flat_.Touched()) 00064 { 00065 drawerObj_.DrawFlat(); 00066 for (int n=0; n<BANDS_; n++) 00067 hn_[n] = BiquadGrEq(drawerObj_.GetCoefficient(n)); 00068 myBars_.DrawAll(0); // ツマミの位置を 0 dB に設定する 00069 flat_.Draw(); 00070 return; 00071 } 00072 00073 // グラフィックイコライザの有効/無効切り替え 00074 if (onOff_.Touched(0)) on_ = true; 00075 if (onOff_.Touched(1)) on_ = false; 00076 00077 static int num = 0; 00078 if (!myBars_.GetSlidedNumber(num)) return; 00079 drawerObj_.DesignAndRedraw(myBars_.GetValue(num), num); 00080 hn_[num] = BiquadGrEq(drawerObj_.GetCoefficient(num)); 00081 } 00082 00083 // 曲の再生中に表示する 00084 void GraphicEqualizer::Display() 00085 { 00086 myBars_.RedrawAll(); 00087 drawerObj_.DrawResponse(); 00088 } 00089 }
Generated on Tue Jul 12 2022 22:59:37 by
