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

Committer:
MikamiUitOpen
Date:
Thu Apr 27 23:55:53 2017 +0000
Revision:
16:d60e5187fd31
Parent:
15:fac50dd1de44
17

Who changed what in which revision?

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