Integrated program of 4 different kinds of application programs for processing sound signal. 4種類のサウンド信号処理を統合したプログラム.
Dependencies: F746_GUI F746_SAI_IO FrequencyResponseDrawer SD_PlayerSkeleton UIT_FFT_Real
MyGraphicEqualizer/GraphicEqualizer.cpp@2:fcba17e3d573, 2016-09-26 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Mon Sep 26 07:07:05 2016 +0000
- Revision:
- 2:fcba17e3d573
- Parent:
- 0:224dccbc4edd
- Child:
- 8:f294d7a7c4e0
3
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:224dccbc4edd | 1 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:224dccbc4edd | 2 | // グラフィックイコライザ用のクラス |
MikamiUitOpen | 0:224dccbc4edd | 3 | // (SD_PlayerSkeleton の派生クラス) |
MikamiUitOpen | 0:224dccbc4edd | 4 | // |
MikamiUitOpen | 0:224dccbc4edd | 5 | // 2016/08/15, Copyright (c) 2016 MIKAMI, Naoki |
MikamiUitOpen | 0:224dccbc4edd | 6 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:224dccbc4edd | 7 | |
MikamiUitOpen | 0:224dccbc4edd | 8 | #include "GraphicEqualizer.hpp" |
MikamiUitOpen | 0:224dccbc4edd | 9 | |
MikamiUitOpen | 0:224dccbc4edd | 10 | namespace Mikami |
MikamiUitOpen | 0:224dccbc4edd | 11 | { |
MikamiUitOpen | 0:224dccbc4edd | 12 | GraphicEqualizer::GraphicEqualizer(string str, int fs, |
MikamiUitOpen | 0:224dccbc4edd | 13 | GrEqDesignerDrawer &obj) |
MikamiUitOpen | 0:224dccbc4edd | 14 | : SD_PlayerSkeleton(str, fs, true), |
MikamiUitOpen | 0:224dccbc4edd | 15 | flat_(BG_LEFT_, 197, BG_WIDTH_, BG_HEIGHT_, "FLAT"), |
MikamiUitOpen | 0:224dccbc4edd | 16 | onOff_(BG_LEFT_, 235, BG_WIDTH_/2, BG_HEIGHT_, |
MikamiUitOpen | 0:224dccbc4edd | 17 | 2, (string[]){"ON", "OFF"}, 0, 0, 2, 0), |
MikamiUitOpen | 2:fcba17e3d573 | 18 | // 利得の範囲:-8 dB ~ +8 dB |
MikamiUitOpen | 0:224dccbc4edd | 19 | myBars_(obj.GetX0(), 178, 82, |
MikamiUitOpen | 0:224dccbc4edd | 20 | obj.GetBands(), obj.GetSpaceX(), |
MikamiUitOpen | 0:224dccbc4edd | 21 | -8.0f, 8.0f, 0, SeekBar::Vertical), |
MikamiUitOpen | 0:224dccbc4edd | 22 | drawerObj_(obj), |
MikamiUitOpen | 0:224dccbc4edd | 23 | BANDS_(drawerObj_.GetBands()), hn_(BANDS_) |
MikamiUitOpen | 0:224dccbc4edd | 24 | { |
MikamiUitOpen | 0:224dccbc4edd | 25 | // 周波数特性の描画 |
MikamiUitOpen | 0:224dccbc4edd | 26 | drawerObj_.DrawResponse(); |
MikamiUitOpen | 0:224dccbc4edd | 27 | |
MikamiUitOpen | 0:224dccbc4edd | 28 | // フィルタの準備 |
MikamiUitOpen | 0:224dccbc4edd | 29 | for (int k=0; k<BANDS_; k++) |
MikamiUitOpen | 0:224dccbc4edd | 30 | hn_[k] = BiquadGrEq(drawerObj_.GetCoefficient(k)); |
MikamiUitOpen | 0:224dccbc4edd | 31 | |
MikamiUitOpen | 0:224dccbc4edd | 32 | on_ = true; |
MikamiUitOpen | 0:224dccbc4edd | 33 | } |
MikamiUitOpen | 0:224dccbc4edd | 34 | |
MikamiUitOpen | 0:224dccbc4edd | 35 | // 1フレーム分の信号処理の実行 |
MikamiUitOpen | 0:224dccbc4edd | 36 | void GraphicEqualizer::SignalProcessing() |
MikamiUitOpen | 0:224dccbc4edd | 37 | { |
MikamiUitOpen | 0:224dccbc4edd | 38 | // 1フレーム分のステレオデータを SD から読み込みモノラルにする |
MikamiUitOpen | 0:224dccbc4edd | 39 | sdReader_.ReadAndToMono(sn_); |
MikamiUitOpen | 0:224dccbc4edd | 40 | |
MikamiUitOpen | 0:224dccbc4edd | 41 | while (!mySai_.IsXferred()) {} // データの転送が終わるまで待つ |
MikamiUitOpen | 0:224dccbc4edd | 42 | //------------------------------------------------------------ |
MikamiUitOpen | 0:224dccbc4edd | 43 | // 1フレーム分のイコライザ処理を行い,その結果を出力する |
MikamiUitOpen | 0:224dccbc4edd | 44 | for (int n=0; n<FRAME_SIZE_; n++) |
MikamiUitOpen | 0:224dccbc4edd | 45 | { |
MikamiUitOpen | 0:224dccbc4edd | 46 | // 縦続形の IIR フィルタ実行 |
MikamiUitOpen | 0:224dccbc4edd | 47 | float xn = 0.125f*sn_[n]; // 0.125 の乗算はブーストしても |
MikamiUitOpen | 0:224dccbc4edd | 48 | // クリップされないようにするため |
MikamiUitOpen | 0:224dccbc4edd | 49 | float yn = xn; |
MikamiUitOpen | 0:224dccbc4edd | 50 | for (int k=0; k<BANDS_; k++) yn = hn_[k].Execute(yn); |
MikamiUitOpen | 0:224dccbc4edd | 51 | |
MikamiUitOpen | 0:224dccbc4edd | 52 | float value = on_ ? yn : xn; |
MikamiUitOpen | 0:224dccbc4edd | 53 | // 音響信号の出力,左右チャンネルに同じものを出力 |
MikamiUitOpen | 0:224dccbc4edd | 54 | mySai_.Output((int16_t)value, (int16_t)value); |
MikamiUitOpen | 0:224dccbc4edd | 55 | } |
MikamiUitOpen | 0:224dccbc4edd | 56 | //------------------------------------------------------------ |
MikamiUitOpen | 0:224dccbc4edd | 57 | mySai_.ResetXferred(); // 次のデータ転送に備える |
MikamiUitOpen | 0:224dccbc4edd | 58 | } |
MikamiUitOpen | 0:224dccbc4edd | 59 | |
MikamiUitOpen | 0:224dccbc4edd | 60 | // サウンドエフェクタのパラメータ変更 |
MikamiUitOpen | 0:224dccbc4edd | 61 | void GraphicEqualizer::Modefy() |
MikamiUitOpen | 0:224dccbc4edd | 62 | { |
MikamiUitOpen | 0:224dccbc4edd | 63 | // 周波数特性を平坦化 |
MikamiUitOpen | 0:224dccbc4edd | 64 | if (flat_.Touched()) |
MikamiUitOpen | 0:224dccbc4edd | 65 | { |
MikamiUitOpen | 0:224dccbc4edd | 66 | drawerObj_.DrawFlat(); |
MikamiUitOpen | 0:224dccbc4edd | 67 | for (int n=0; n<BANDS_; n++) |
MikamiUitOpen | 0:224dccbc4edd | 68 | hn_[n] = BiquadGrEq(drawerObj_.GetCoefficient(n)); |
MikamiUitOpen | 0:224dccbc4edd | 69 | myBars_.DrawAll(0); // ツマミの位置を 0 dB に設定する |
MikamiUitOpen | 0:224dccbc4edd | 70 | flat_.Draw(); |
MikamiUitOpen | 0:224dccbc4edd | 71 | return; |
MikamiUitOpen | 0:224dccbc4edd | 72 | } |
MikamiUitOpen | 0:224dccbc4edd | 73 | |
MikamiUitOpen | 0:224dccbc4edd | 74 | int sw = 0; |
MikamiUitOpen | 0:224dccbc4edd | 75 | if (onOff_.GetTouchedNumber(sw)) |
MikamiUitOpen | 0:224dccbc4edd | 76 | on_ = (sw == 0) ? true : false; |
MikamiUitOpen | 0:224dccbc4edd | 77 | |
MikamiUitOpen | 0:224dccbc4edd | 78 | static int num = 0; |
MikamiUitOpen | 0:224dccbc4edd | 79 | if (!myBars_.GetSlidedNumber(num)) return; |
MikamiUitOpen | 0:224dccbc4edd | 80 | drawerObj_.DesignAndRedraw(myBars_.GetValue(num), num); |
MikamiUitOpen | 0:224dccbc4edd | 81 | hn_[num] = BiquadGrEq(drawerObj_.GetCoefficient(num)); |
MikamiUitOpen | 0:224dccbc4edd | 82 | } |
MikamiUitOpen | 0:224dccbc4edd | 83 | |
MikamiUitOpen | 0:224dccbc4edd | 84 | // 曲の再生中に表示する |
MikamiUitOpen | 0:224dccbc4edd | 85 | void GraphicEqualizer::Display() |
MikamiUitOpen | 0:224dccbc4edd | 86 | { |
MikamiUitOpen | 0:224dccbc4edd | 87 | myBars_.RedrawAll(); |
MikamiUitOpen | 0:224dccbc4edd | 88 | drawerObj_.DrawResponse(); |
MikamiUitOpen | 0:224dccbc4edd | 89 | } |
MikamiUitOpen | 0:224dccbc4edd | 90 | } |