revised version of F746_SD_GraphicEqualizer

Dependencies:   BSP_DISCO_F746NG F746_GUI F746_SAI_IO FrequencyResponseDrawer LCD_DISCO_F746NG SDFileSystem_Warning_Fixed TS_DISCO_F746NG mbed

Fork of F746_SD_GraphicEqualizer by 不韋 呂

Committer:
edamame22
Date:
Thu Jul 07 05:58:52 2016 +0000
Revision:
12:87f6955b5a80
Parent:
8:12aa05f3cc24
added highlighted line for track selection

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 8:12aa05f3cc24 1 //------------------------------------------------------------------------------
MikamiUitOpen 8:12aa05f3cc24 2 // イコライザ用フィルタのパラメータを設定し,その周波数特性を描画するためのクラス
MikamiUitOpen 8:12aa05f3cc24 3 //
MikamiUitOpen 8:12aa05f3cc24 4 // 2016/05/09, Copyright (c) 2016 MIKAMI, Naoki
MikamiUitOpen 8:12aa05f3cc24 5 //------------------------------------------------------------------------------
MikamiUitOpen 8:12aa05f3cc24 6
MikamiUitOpen 8:12aa05f3cc24 7 #include "DesignerDrawer.hpp"
MikamiUitOpen 8:12aa05f3cc24 8
MikamiUitOpen 8:12aa05f3cc24 9 namespace Mikami
MikamiUitOpen 8:12aa05f3cc24 10 {
MikamiUitOpen 8:12aa05f3cc24 11 // Constructor
MikamiUitOpen 8:12aa05f3cc24 12 DesignerDrawer::DesignerDrawer(uint16_t x0, uint16_t y0,
MikamiUitOpen 8:12aa05f3cc24 13 int bands, float f0, int fs, float db1)
MikamiUitOpen 8:12aa05f3cc24 14 : lcd_(GuiBase::GetLcdPtr()), ts_(GuiBase::GetTsPtr()),
MikamiUitOpen 8:12aa05f3cc24 15 X0_(x0), Y0_(y0), BANDS_(bands), Q_VAL_(1.0f/sqrtf(2.0f))
MikamiUitOpen 8:12aa05f3cc24 16 {
MikamiUitOpen 8:12aa05f3cc24 17 drawerObj_ = new FrqRespDrawer(x0, 50.0f, 20000.0f, 142,
MikamiUitOpen 8:12aa05f3cc24 18 y0, -18, 18, db1, 6, fs);
MikamiUitOpen 8:12aa05f3cc24 19
MikamiUitOpen 8:12aa05f3cc24 20 calculator_ = new GrEqParams(bands, fs);
MikamiUitOpen 8:12aa05f3cc24 21 f0_ = new float[bands];
MikamiUitOpen 8:12aa05f3cc24 22 for (int n=0; n<bands; n++)
MikamiUitOpen 8:12aa05f3cc24 23 f0_[n] = f0*powf(2, n);
MikamiUitOpen 8:12aa05f3cc24 24
MikamiUitOpen 8:12aa05f3cc24 25 ck_ = new BiquadGrEq::Coefs[bands];
MikamiUitOpen 8:12aa05f3cc24 26 for (int n=0; n<bands; n++)
MikamiUitOpen 8:12aa05f3cc24 27 ck_[n] = calculator_->Execute(n, f0_[n], 0, Q_VAL_);
MikamiUitOpen 8:12aa05f3cc24 28 frqResp_ = new GrEqualizerFrqResp(bands);
MikamiUitOpen 8:12aa05f3cc24 29 frqResp_->SetParams(ck_);
MikamiUitOpen 8:12aa05f3cc24 30
MikamiUitOpen 8:12aa05f3cc24 31 // 周波数特性の描画
MikamiUitOpen 8:12aa05f3cc24 32 DrawResponse();
MikamiUitOpen 8:12aa05f3cc24 33 }
MikamiUitOpen 8:12aa05f3cc24 34
MikamiUitOpen 8:12aa05f3cc24 35 DesignerDrawer::~DesignerDrawer()
MikamiUitOpen 8:12aa05f3cc24 36 {
MikamiUitOpen 8:12aa05f3cc24 37 delete[] frqResp_;
MikamiUitOpen 8:12aa05f3cc24 38 delete[] ck_;
MikamiUitOpen 8:12aa05f3cc24 39 delete[] f0_;
MikamiUitOpen 8:12aa05f3cc24 40 delete calculator_;
MikamiUitOpen 8:12aa05f3cc24 41 delete drawerObj_;
MikamiUitOpen 8:12aa05f3cc24 42 }
MikamiUitOpen 8:12aa05f3cc24 43
MikamiUitOpen 8:12aa05f3cc24 44 // 周波数特性の描画
MikamiUitOpen 8:12aa05f3cc24 45 void DesignerDrawer::DrawResponse()
MikamiUitOpen 8:12aa05f3cc24 46 {
MikamiUitOpen 8:12aa05f3cc24 47 drawerObj_->DrawAxis(); // 目盛線の描画
MikamiUitOpen 8:12aa05f3cc24 48 FrqRespDrawer::AxisX_Char numX[] = // 横軸の目盛値を描画する際に使う構造体の配列
MikamiUitOpen 8:12aa05f3cc24 49 {{ 50, "50"}, { 100, "100"}, { 200, "200"}, { 500, "500"}, { 1000, "1k"},
MikamiUitOpen 8:12aa05f3cc24 50 { 2000, "2k"}, { 5000, "5k"}, {10000, "10k"}, {20000, "20k"}};
MikamiUitOpen 8:12aa05f3cc24 51 drawerObj_->DrawNumericX(numX, 9, 6, "Frequency [Hz]"); // 横軸の目盛
MikamiUitOpen 8:12aa05f3cc24 52 drawerObj_->DrawNumericY(-24, -6, 6, "%3d"); // 縦軸の目盛値は 6 dB 間隔
MikamiUitOpen 8:12aa05f3cc24 53 drawerObj_->DrawGraph(frqResp_); // 周波数特性のカーブの描画
MikamiUitOpen 8:12aa05f3cc24 54 }
MikamiUitOpen 8:12aa05f3cc24 55
MikamiUitOpen 8:12aa05f3cc24 56 // 周波数特性の平坦化と描画
MikamiUitOpen 8:12aa05f3cc24 57 void DesignerDrawer::DrawFlat()
MikamiUitOpen 8:12aa05f3cc24 58 {
MikamiUitOpen 8:12aa05f3cc24 59 for (int n=0; n<BANDS_; n++)
MikamiUitOpen 8:12aa05f3cc24 60 ck_[n] = calculator_->Execute(n, f0_[n], 0, Q_VAL_);
MikamiUitOpen 8:12aa05f3cc24 61 frqResp_->SetParams(ck_);
MikamiUitOpen 8:12aa05f3cc24 62 drawerObj_->Erase();
MikamiUitOpen 8:12aa05f3cc24 63 drawerObj_->DrawAxis(); // 目盛線の描画
MikamiUitOpen 8:12aa05f3cc24 64 drawerObj_->DrawGraph(frqResp_); // 周波数特性のグラフのカーブを描画する
MikamiUitOpen 8:12aa05f3cc24 65 }
MikamiUitOpen 8:12aa05f3cc24 66
MikamiUitOpen 8:12aa05f3cc24 67 // 特定のバンドのイコライザ用フィルタのパラメータの設定と周波数特性の再描画
MikamiUitOpen 8:12aa05f3cc24 68 void DesignerDrawer::DesignAndRedraw(float gainDb, int n)
MikamiUitOpen 8:12aa05f3cc24 69 {
MikamiUitOpen 8:12aa05f3cc24 70 ck_[n] = calculator_->Execute(n, f0_[n], gainDb, Q_VAL_);
MikamiUitOpen 8:12aa05f3cc24 71 frqResp_->SetParam(ck_[n], n);
MikamiUitOpen 8:12aa05f3cc24 72 drawerObj_->Erase();
MikamiUitOpen 8:12aa05f3cc24 73 drawerObj_->DrawAxis(); // 目盛線の描画
MikamiUitOpen 8:12aa05f3cc24 74 drawerObj_->DrawGraph(frqResp_); // 周波数特性のグラフのカーブを描画する
MikamiUitOpen 8:12aa05f3cc24 75 }
MikamiUitOpen 8:12aa05f3cc24 76 }