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
MyClasses_Functions/DesignerDrawer.cpp@12:87f6955b5a80, 2016-07-07 (annotated)
- 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?
User | Revision | Line number | New 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 | } |