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 "VariableIirFilter.hpp"
MikamiUitOpen 15:fac50dd1de44 9
MikamiUitOpen 15:fac50dd1de44 10 namespace Mikami
MikamiUitOpen 15:fac50dd1de44 11 {
MikamiUitOpen 15:fac50dd1de44 12 VariableIirFilter::VariableIirFilter(string str,
MikamiUitOpen 15:fac50dd1de44 13 BtwthDesignerDrawer &obj)
MikamiUitOpen 15:fac50dd1de44 14 : SD_PlayerSkeleton(str, true), // 第2引数は true にする
MikamiUitOpen 15:fac50dd1de44 15 lpHp_(BG_LEFT_, 197, BG_WIDTH_/2, BG_HEIGHT_,
MikamiUitOpen 15:fac50dd1de44 16 2, (string[]){"LPF", "HPF"}, 0, 0, 2, 0),
MikamiUitOpen 15:fac50dd1de44 17 onOff_(BG_LEFT_, 235, BG_WIDTH_/2, BG_HEIGHT_,
MikamiUitOpen 15:fac50dd1de44 18 2, (string[]){"ON", "OFF"}, 0, 0, 2, 0),
MikamiUitOpen 15:fac50dd1de44 19 drawerObj_(obj),
MikamiUitOpen 15:fac50dd1de44 20 ORDER2_(drawerObj_.GetOrder()/2),
MikamiUitOpen 15:fac50dd1de44 21 ck_(ORDER2_), hn_(ORDER2_),
MikamiUitOpen 15:fac50dd1de44 22 typeLH_(BilinearDesign::LPF), on_(true)
MikamiUitOpen 15:fac50dd1de44 23 {
MikamiUitOpen 15:fac50dd1de44 24 // 周波数特性の描画
MikamiUitOpen 15:fac50dd1de44 25 drawerObj_.DrawResponse();
MikamiUitOpen 15:fac50dd1de44 26
MikamiUitOpen 15:fac50dd1de44 27 // フィルタの準備
MikamiUitOpen 15:fac50dd1de44 28 drawerObj_.GetCoefficients(ck_, g0_);
MikamiUitOpen 15:fac50dd1de44 29 for (int k=0; k<ORDER2_; k++) hn_[k] = Biquad(ck_[k]);
MikamiUitOpen 15:fac50dd1de44 30 }
MikamiUitOpen 15:fac50dd1de44 31
MikamiUitOpen 15:fac50dd1de44 32 // 1ブロック分の信号処理の実行
MikamiUitOpen 15:fac50dd1de44 33 void VariableIirFilter::SignalProcessing()
MikamiUitOpen 15:fac50dd1de44 34 {
MikamiUitOpen 15:fac50dd1de44 35 // 1ブロック分のデータを SD から読み込む
MikamiUitOpen 15:fac50dd1de44 36 sdReader_.ReadAndToMono(sn_);
MikamiUitOpen 15:fac50dd1de44 37
MikamiUitOpen 15:fac50dd1de44 38 while (!mySai_.IsXferred()) {} // データの転送が終わるまで待つ
MikamiUitOpen 15:fac50dd1de44 39 //--------------------------------------------------------------
MikamiUitOpen 15:fac50dd1de44 40 // 1ブロック分の信号処理を行い,その結果を出力する
MikamiUitOpen 15:fac50dd1de44 41 for (int n=0; n<BUFF_SIZE_; n++)
MikamiUitOpen 15:fac50dd1de44 42 {
MikamiUitOpen 15:fac50dd1de44 43 // 縦続形の IIR フィルタ
MikamiUitOpen 15:fac50dd1de44 44 float yn = g0_*sn_[n];
MikamiUitOpen 15:fac50dd1de44 45 for (int k=0; k<ORDER2_; k++) yn = hn_[k].Execute(yn);
MikamiUitOpen 15:fac50dd1de44 46
MikamiUitOpen 15:fac50dd1de44 47 // 音響信号の出力,左右チャンネルに同じものを出力する
MikamiUitOpen 15:fac50dd1de44 48 int16_t value = on_ ? (int16_t)yn : sn_[n];
MikamiUitOpen 15:fac50dd1de44 49 mySai_.Output(value, value);
MikamiUitOpen 15:fac50dd1de44 50 }
MikamiUitOpen 15:fac50dd1de44 51 //--------------------------------------------------------------
MikamiUitOpen 15:fac50dd1de44 52 }
MikamiUitOpen 15:fac50dd1de44 53
MikamiUitOpen 15:fac50dd1de44 54 // 可変フィルタの遮断周波数変更
MikamiUitOpen 15:fac50dd1de44 55 void VariableIirFilter::Modefy()
MikamiUitOpen 15:fac50dd1de44 56 {
MikamiUitOpen 15:fac50dd1de44 57 // フィルタ処理の有効/無効切り替え
MikamiUitOpen 15:fac50dd1de44 58 if (onOff_.Touched(0)) on_ = true;
MikamiUitOpen 15:fac50dd1de44 59 if (onOff_.Touched(1)) on_ = false;
MikamiUitOpen 15:fac50dd1de44 60
MikamiUitOpen 15:fac50dd1de44 61 // フィルタの周波数特性の変更
MikamiUitOpen 15:fac50dd1de44 62 int num = 0;
MikamiUitOpen 15:fac50dd1de44 63 if (lpHp_.GetTouchedNumber(num))
MikamiUitOpen 15:fac50dd1de44 64 {
MikamiUitOpen 15:fac50dd1de44 65 Clear();
MikamiUitOpen 15:fac50dd1de44 66 typeLH_ = (BilinearDesign::Type)num;
MikamiUitOpen 15:fac50dd1de44 67 }
MikamiUitOpen 15:fac50dd1de44 68 if (drawerObj_.ReDesignAndDraw(ck_, g0_, typeLH_))
MikamiUitOpen 15:fac50dd1de44 69 for (int k=0; k<ORDER2_; k++)
MikamiUitOpen 15:fac50dd1de44 70 hn_[k].SetCoefficients(ck_[k]);
MikamiUitOpen 15:fac50dd1de44 71 }
MikamiUitOpen 15:fac50dd1de44 72 }