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 // Reverberation generator
MikamiUitOpen 10:56f2f01df983 3 //
MikamiUitOpen 10:56f2f01df983 4 // 2017/04/10, Copyright (c) 2017 MIKAMI, Naoki
MikamiUitOpen 10:56f2f01df983 5 //--------------------------------------------------------------
MikamiUitOpen 10:56f2f01df983 6
MikamiUitOpen 10:56f2f01df983 7 #ifndef REVERBERATION_SYSTEM_HPP
MikamiUitOpen 10:56f2f01df983 8 #define REVERBERATION_SYSTEM_HPP
MikamiUitOpen 10:56f2f01df983 9
MikamiUitOpen 10:56f2f01df983 10 #include "ReverbUnit.hpp"
MikamiUitOpen 10:56f2f01df983 11 #include "ProcessingBase.hpp"
MikamiUitOpen 10:56f2f01df983 12
MikamiUitOpen 10:56f2f01df983 13 namespace Mikami
MikamiUitOpen 10:56f2f01df983 14 {
MikamiUitOpen 10:56f2f01df983 15 class Reverberator : public ProcessingBase
MikamiUitOpen 10:56f2f01df983 16 {
MikamiUitOpen 10:56f2f01df983 17 public:
MikamiUitOpen 10:56f2f01df983 18 Reverberator(float gC = 0.8f, float gA = 0.6f)
MikamiUitOpen 10:56f2f01df983 19 : G0_(1.0f - gC),
MikamiUitOpen 10:56f2f01df983 20 DELAY_INIT_(6000), variableDelay_(6000),
MikamiUitOpen 10:56f2f01df983 21 cmF1_(gC, 887+1500), cmF2_(gC, 1153+3000),
MikamiUitOpen 10:56f2f01df983 22 cmF3_(gC, 1499+6000),
MikamiUitOpen 10:56f2f01df983 23 apF1_(gA, 97), apF2_(gA, 131) {}
MikamiUitOpen 10:56f2f01df983 24
MikamiUitOpen 10:56f2f01df983 25 virtual float Execute(float sn)
MikamiUitOpen 10:56f2f01df983 26 {
MikamiUitOpen 10:56f2f01df983 27 float xn = G0_*sn;
MikamiUitOpen 10:56f2f01df983 28 float yn = cmF1_.Execute(xn, variableDelay_/4)
MikamiUitOpen 10:56f2f01df983 29 + cmF2_.Execute(xn, variableDelay_/2)
MikamiUitOpen 10:56f2f01df983 30 + cmF3_.Execute(xn, variableDelay_);
MikamiUitOpen 10:56f2f01df983 31 yn = apF2_.Execute(apF1_.Execute(yn));
MikamiUitOpen 10:56f2f01df983 32 yn = yn + xn; // add direct input signal
MikamiUitOpen 10:56f2f01df983 33 return yn;
MikamiUitOpen 10:56f2f01df983 34 }
MikamiUitOpen 10:56f2f01df983 35
MikamiUitOpen 10:56f2f01df983 36 void SetDelay(int n) { variableDelay_ = DELAY_INIT_ - n; }
MikamiUitOpen 10:56f2f01df983 37
MikamiUitOpen 10:56f2f01df983 38 private:
MikamiUitOpen 10:56f2f01df983 39 const float G0_;
MikamiUitOpen 10:56f2f01df983 40 const int DELAY_INIT_;
MikamiUitOpen 10:56f2f01df983 41 int variableDelay_;
MikamiUitOpen 10:56f2f01df983 42
MikamiUitOpen 10:56f2f01df983 43 CombFilter cmF1_, cmF2_, cmF3_;
MikamiUitOpen 10:56f2f01df983 44 AllPassFilter apF1_, apF2_;
MikamiUitOpen 10:56f2f01df983 45
MikamiUitOpen 10:56f2f01df983 46 // disallow copy constructor and assignment operator
MikamiUitOpen 10:56f2f01df983 47 Reverberator(const Reverberator&);
MikamiUitOpen 10:56f2f01df983 48 Reverberator& operator=(const Reverberator&);
MikamiUitOpen 10:56f2f01df983 49 };
MikamiUitOpen 10:56f2f01df983 50 }
MikamiUitOpen 10:56f2f01df983 51 #endif // REVERBERATION_SYSTEM_HPP