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