Audio singal input and output example for DISCO-F746. Input: MEMS mic, Output: CN10 OUT, Acoustic effect: echo and frequency shift. DISCO-F746 によるオーディオ信号入出力.入力:MEMS マイク,出力:CN10 OUT,音響効果:エコー,周波数変換.

Dependencies:   F746_GUI F746_SAI_IO

Committer:
MikamiUitOpen
Date:
Mon Apr 10 13:44:13 2017 +0000
Revision:
10:56f2f01df983
Parent:
5:7de034938856
11

Who changed what in which revision?

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