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
11

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 10:56f2f01df983 1 //--------------------------------------------------------------
MikamiUitOpen 10:56f2f01df983 2 // Base class for Reverb unit
MikamiUitOpen 10:56f2f01df983 3 // 2017/04/04, Copyright (c) 2017 MIKAMI, Naoki
MikamiUitOpen 10:56f2f01df983 4 //--------------------------------------------------------------
MikamiUitOpen 10:56f2f01df983 5
MikamiUitOpen 10:56f2f01df983 6 #ifndef REVERB_UNIT_BASE_HPP
MikamiUitOpen 10:56f2f01df983 7 #define REVERB_UNIT_BASE_HPP
MikamiUitOpen 10:56f2f01df983 8
MikamiUitOpen 10:56f2f01df983 9 #include "mbed.h"
MikamiUitOpen 10:56f2f01df983 10 #include "Array.hpp"
MikamiUitOpen 10:56f2f01df983 11
MikamiUitOpen 10:56f2f01df983 12 namespace Mikami
MikamiUitOpen 10:56f2f01df983 13 {
MikamiUitOpen 10:56f2f01df983 14 // Base class for reverb unit
MikamiUitOpen 10:56f2f01df983 15 class ReverbBase
MikamiUitOpen 10:56f2f01df983 16 {
MikamiUitOpen 10:56f2f01df983 17 public:
MikamiUitOpen 10:56f2f01df983 18 // Constructor
MikamiUitOpen 10:56f2f01df983 19 ReverbBase(int delay)
MikamiUitOpen 10:56f2f01df983 20 : ptr_(0), delay_(delay), un_(delay)
MikamiUitOpen 10:56f2f01df983 21 { Clear(); }
MikamiUitOpen 10:56f2f01df983 22
MikamiUitOpen 10:56f2f01df983 23 // Clear internal delay elements
MikamiUitOpen 10:56f2f01df983 24 void Clear()
MikamiUitOpen 10:56f2f01df983 25 { for (int n=0; n<delay_; n++) un_[n] = 0; }
MikamiUitOpen 10:56f2f01df983 26
MikamiUitOpen 10:56f2f01df983 27 protected:
MikamiUitOpen 10:56f2f01df983 28 float Get() { return un_[ptr_]; }
MikamiUitOpen 10:56f2f01df983 29
MikamiUitOpen 10:56f2f01df983 30 float Get(int n)
MikamiUitOpen 10:56f2f01df983 31 {
MikamiUitOpen 10:56f2f01df983 32 int k = ptr_ + n;
MikamiUitOpen 10:56f2f01df983 33 if (k > delay_) k -= delay_;
MikamiUitOpen 10:56f2f01df983 34 if (k < 0) k += delay_;
MikamiUitOpen 10:56f2f01df983 35 return un_[k];
MikamiUitOpen 10:56f2f01df983 36 }
MikamiUitOpen 10:56f2f01df983 37
MikamiUitOpen 10:56f2f01df983 38 void Set(float x)
MikamiUitOpen 10:56f2f01df983 39 {
MikamiUitOpen 10:56f2f01df983 40 un_[ptr_] = x;
MikamiUitOpen 10:56f2f01df983 41 if (++ptr_ >= delay_) ptr_ = 0;
MikamiUitOpen 10:56f2f01df983 42 }
MikamiUitOpen 10:56f2f01df983 43
MikamiUitOpen 10:56f2f01df983 44 private:
MikamiUitOpen 10:56f2f01df983 45 int ptr_;
MikamiUitOpen 10:56f2f01df983 46 int delay_;
MikamiUitOpen 10:56f2f01df983 47 Array<float> un_; // for delay
MikamiUitOpen 10:56f2f01df983 48
MikamiUitOpen 10:56f2f01df983 49 // disallow copy constructor and assignment operator
MikamiUitOpen 10:56f2f01df983 50 ReverbBase(const ReverbBase&);
MikamiUitOpen 10:56f2f01df983 51 ReverbBase& operator=(const ReverbBase&);
MikamiUitOpen 10:56f2f01df983 52 };
MikamiUitOpen 10:56f2f01df983 53 }
MikamiUitOpen 10:56f2f01df983 54 #endif // REVERB_UNIT_BASE_HPP