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 // Class for waveform display
MikamiUitOpen 15:fac50dd1de44 3 //
MikamiUitOpen 15:fac50dd1de44 4 // 2017/04/06, Copyright (c) 2016 MIKAMI, Naoki
MikamiUitOpen 15:fac50dd1de44 5 //-----------------------------------------------------------
MikamiUitOpen 15:fac50dd1de44 6
MikamiUitOpen 15:fac50dd1de44 7 #ifndef F746_WAVEFORM_DISPLAY_HPP
MikamiUitOpen 15:fac50dd1de44 8 #define F746_WAVEFORM_DISPLAY_HPP
MikamiUitOpen 15:fac50dd1de44 9
MikamiUitOpen 15:fac50dd1de44 10 #include "Array.hpp"
MikamiUitOpen 15:fac50dd1de44 11
MikamiUitOpen 15:fac50dd1de44 12 namespace Mikami
MikamiUitOpen 15:fac50dd1de44 13 {
MikamiUitOpen 15:fac50dd1de44 14 class WaveformDisplay
MikamiUitOpen 15:fac50dd1de44 15 {
MikamiUitOpen 15:fac50dd1de44 16 public:
MikamiUitOpen 15:fac50dd1de44 17 WaveformDisplay(LCD_DISCO_F746NG &lcd,
MikamiUitOpen 15:fac50dd1de44 18 uint16_t x0, uint16_t y0, int nData,
MikamiUitOpen 15:fac50dd1de44 19 uint16_t rShift)
MikamiUitOpen 15:fac50dd1de44 20 : X0_(x0), Y0_(y0), R_SHIFT_(rShift),
MikamiUitOpen 15:fac50dd1de44 21 H1_(Y0_+LIMIT_+1), H2_(Y0_-LIMIT_-1),
MikamiUitOpen 15:fac50dd1de44 22 lcd_(lcd) { Axis(nData); }
MikamiUitOpen 15:fac50dd1de44 23
MikamiUitOpen 15:fac50dd1de44 24 void Execute(const Array<int16_t> &xn)
MikamiUitOpen 15:fac50dd1de44 25 {
MikamiUitOpen 15:fac50dd1de44 26 lcd_.SetTextColor(GuiBase::ENUM_BACK);
MikamiUitOpen 15:fac50dd1de44 27 lcd_.FillRect(X0_, Y0_-LIMIT_-1,
MikamiUitOpen 15:fac50dd1de44 28 xn.Length(), (LIMIT_+1)*2+1);
MikamiUitOpen 15:fac50dd1de44 29 Axis(xn.Length());
MikamiUitOpen 15:fac50dd1de44 30 lcd_.SetTextColor(LINE_COLOR_);
MikamiUitOpen 15:fac50dd1de44 31 uint16_t x1 = X0_;
MikamiUitOpen 15:fac50dd1de44 32 uint16_t y1 = Clip(xn[0]);
MikamiUitOpen 15:fac50dd1de44 33 for (int n=1; n<xn.Length(); n++)
MikamiUitOpen 15:fac50dd1de44 34 {
MikamiUitOpen 15:fac50dd1de44 35 uint16_t x2 = X0_ + n;
MikamiUitOpen 15:fac50dd1de44 36 uint16_t y2 = Clip(xn[n]);
MikamiUitOpen 15:fac50dd1de44 37 lcd_.DrawLine(x1, y1, x2, y2);
MikamiUitOpen 15:fac50dd1de44 38 if ((y1 == H1_) || (y1 == H2_))
MikamiUitOpen 15:fac50dd1de44 39 lcd_.DrawPixel(x1, y1, LCD_COLOR_RED);
MikamiUitOpen 15:fac50dd1de44 40 x1 = x2;
MikamiUitOpen 15:fac50dd1de44 41 y1 = y2;
MikamiUitOpen 15:fac50dd1de44 42 }
MikamiUitOpen 15:fac50dd1de44 43 }
MikamiUitOpen 15:fac50dd1de44 44
MikamiUitOpen 15:fac50dd1de44 45 private:
MikamiUitOpen 15:fac50dd1de44 46 static const uint16_t LIMIT_ = 32;
MikamiUitOpen 15:fac50dd1de44 47 static const uint32_t LINE_COLOR_ = LCD_COLOR_CYAN;
MikamiUitOpen 15:fac50dd1de44 48 const uint16_t X0_, Y0_;
MikamiUitOpen 15:fac50dd1de44 49 const uint16_t R_SHIFT_;
MikamiUitOpen 15:fac50dd1de44 50 const uint16_t H1_, H2_;
MikamiUitOpen 15:fac50dd1de44 51
MikamiUitOpen 15:fac50dd1de44 52 LCD_DISCO_F746NG& lcd_;
MikamiUitOpen 15:fac50dd1de44 53
MikamiUitOpen 15:fac50dd1de44 54 // Clipping
MikamiUitOpen 15:fac50dd1de44 55 uint16_t Clip(int16_t xn)
MikamiUitOpen 15:fac50dd1de44 56 {
MikamiUitOpen 15:fac50dd1de44 57 int16_t x = xn >> R_SHIFT_;
MikamiUitOpen 15:fac50dd1de44 58 if (x > LIMIT_ ) x = LIMIT_ + 1;
MikamiUitOpen 15:fac50dd1de44 59 if (x < -LIMIT_ ) x = -(LIMIT_ + 1) ;
MikamiUitOpen 15:fac50dd1de44 60 return Y0_ - x;
MikamiUitOpen 15:fac50dd1de44 61 }
MikamiUitOpen 15:fac50dd1de44 62
MikamiUitOpen 15:fac50dd1de44 63 void Axis(int nData)
MikamiUitOpen 15:fac50dd1de44 64 {
MikamiUitOpen 15:fac50dd1de44 65 lcd_.SetTextColor(LCD_COLOR_WHITE);
MikamiUitOpen 15:fac50dd1de44 66 lcd_.DrawLine(X0_-5, Y0_, X0_+nData+5, Y0_);
MikamiUitOpen 15:fac50dd1de44 67 }
MikamiUitOpen 15:fac50dd1de44 68
MikamiUitOpen 15:fac50dd1de44 69 // disallow copy constructor and assignment operator
MikamiUitOpen 15:fac50dd1de44 70 WaveformDisplay(const WaveformDisplay& );
MikamiUitOpen 15:fac50dd1de44 71 WaveformDisplay& operator=(const WaveformDisplay& );
MikamiUitOpen 15:fac50dd1de44 72 };
MikamiUitOpen 15:fac50dd1de44 73 }
MikamiUitOpen 15:fac50dd1de44 74 #endif // F746_WAVEFORM_DISPLAY_HPP