Synthesizer based on the Unzen / Nucleo F746ZG

Dependencies:   amakusa mbed-dsp mbed shimabara ukifune unzen_nucleo_f746

Fork of skeleton_unzen_nucleo_f746 by seiichi horie

雲仙フレームワークのテストとして作っているプロジェクトです。中身はどんどん変っていきます。 説明はDSP空挺団の「シンセサイザー」カテゴリーを参照してください。初回は「ドッグフードを食べる」です。

Revision:
28:547f19ed6f67
Parent:
27:fcb1f1da2ad7
Child:
29:8ee84bda128c
--- a/signal_processing.h	Sat Feb 11 07:15:21 2017 +0000
+++ b/signal_processing.h	Sat Feb 11 07:44:56 2017 +0000
@@ -19,7 +19,7 @@
         );
            
         // parameter settings
-    void set_frequency( int freq );     // unit is Hz.
+    void set_frequency( float freq );     // unit is Hz.
     void set_Fs( int Fs );              // unit is Hz.
     void set_duty_cycle( float duty );  // 0 ... 0.5
     void set_wave_form( wave_form form );
@@ -27,14 +27,14 @@
     int32_t block_size;
 
         // control variables.
-    int frequency;          // VFO frequency [Hz]
+    float frequency;          // VFO frequency [Hz]
     int Fs;                 // sampling Frequency [Hz]
     float duty_cycle;       // VFO duty cycle. 0 ... 0.5
     wave_form form;         // form of the wave form.
     
         // internal variable.
-    int current_phase;      // internal variable of VFO.
-    int half_way;           // change point by duty cycle. ( period * duty_cycle ).
+    float current_phase;      // internal variable of VFO.
+    float half_way;           // change point by duty cycle. ( period * duty_cycle ).
     float rising_rate;
     float falling_rate;
     
@@ -45,7 +45,7 @@
 class DCBlocker : public amakusa::AbstractFilter {
 public:
     DCBlocker( uint32_t blockSize );
-    virtual void run( float32_t *pSrc, float32_t *pDst );
+    virtual void run( float *pSrc, float *pDst );
 private:    
     float x_last;
     float y_last;
@@ -56,19 +56,19 @@
 class SVFilter : public amakusa::AbstractFilter {
 public:
     SVFilter( uint32_t a_block_size );
-    virtual void run( float32_t *pSrc, float32_t *pDst);
-    void set_Q( float32_t Q );              // real Q factor [ 0.5 ... inf ]
+    virtual void run( float *pSrc, float *pDst);
+    void set_Q( float Q );              // real Q factor [ 0.5 ... inf ]
     void set_Fs( int new_Fs );              // Hz
     void set_fc( int new_fc );                // Hz
-    void set_f_factor( float32_t new_f_factor );   
+    void set_f_factor( float new_f_factor );   
     void set_mode( svf_mode new_mode );
 private:    
         // internal variable
-    float32_t d1, d2;                       // delay 1, delay 2;
-    float32_t q, f;                         // q = 1/Q, f = 2 * sin( fc*f_factor*pi/Fs );
+    float d1, d2;                       // delay 1, delay 2;
+    float q, f;                         // q = 1/Q, f = 2 * sin( fc*f_factor*pi/Fs );
         // parameter set by method
     int Fs, fc;                             // sampling frequency and control frequency
-    float32_t f_factor;
+    float f_factor;
     svf_mode mode;                          // lpf, hpf, bpf
     void update_parameters( void );
 };
@@ -76,16 +76,16 @@
 class EG {
 public:
     EG ( int32_t a_block_size );
-    virtual void run( float32_t *pEnvelope );
+    virtual void run( float *pEnvelope );
     void on(void);
     void off(void);
-    void set_attack( float32_t attack );                // [0,1.0]
-    void set_decay( float32_t attack );                 // [0,1.0]
-    void set_sustain( float32_t sustain );              // [0,1.0]
-    void set_release ( float32_t attack );              // [0,1.0]
+    void set_attack( float attack );                // [0,1.0]
+    void set_decay( float attack );                 // [0,1.0]
+    void set_sustain( float sustain );              // [0,1.0]
+    void set_release ( float attack );              // [0,1.0]
 private:
-    float32_t current_level, sustain_level;
-    float32_t attack_time_constant, decay_time_constant, release_time_constant;
+    float current_level, sustain_level;
+    float attack_time_constant, decay_time_constant, release_time_constant;
     eg_state  state;
     int32_t block_size;
 };
@@ -99,7 +99,7 @@
         float out_buffer[]         // place to write the right output samples
         );
     void set_Fs( int Fs );                  // unit is Hz.
-    void set_vfo_frequency( int freq );     // unit is Hz.
+    void set_vfo_frequency( float freq );     // unit is Hz.
     void set_vfo_duty_cycle( float duty );  // 0 ... 0.5
     void set_vfo_wave_form( wave_form form );
     void set_filter_mode( svf_mode mode );
@@ -107,16 +107,16 @@
     void set_filter_f_factor( float f_factor ); // 0.0..1.0
     void eg_on(void);
     void eg_off(void);
-    void set_eg_attack( float32_t attack );                // [0,1.0]
-    void set_eg_decay( float32_t decay  );                 // [0,1.0]
-    void set_eg_sustain( float32_t sustain );              // [0,1.0]
-    void set_eg_release ( float32_t release );             // [0,1.0]
+    void set_eg_attack( float attack );                // [0,1.0]
+    void set_eg_decay( float decay  );                 // [0,1.0]
+    void set_eg_sustain( float sustain );              // [0,1.0]
+    void set_eg_release ( float release );             // [0,1.0]
 private:
     VFO *vfo;
     DCBlocker *dc_blocker;
     SVFilter *sv_filter;
     EG *eg;
-    float32_t *work_buf_a, *work_buf_b;
+    float *work_buf_a, *work_buf_b;
     int32_t block_size;
 };
 
@@ -137,7 +137,7 @@
         // project depenedent members.
     void set_volume( float vol );
     void set_Fs( int Fs );                      // unit is Hz.
-    void set_vfo_frequency( int freq );         // unit is Hz.
+    void set_vfo_frequency( float freq );         // unit is Hz.
     void set_vfo_duty_cycle( float duty );      // 0 ... 1.0
     void set_vfo_wave_form( wave_form form );
     void set_filter_mode( svf_mode mode );
@@ -145,10 +145,10 @@
     void set_filter_f_factor( float f_factor ); // 0.0..1.0
     void eg_on(void);
     void eg_off(void);
-    void set_eg_attack( float32_t attack );                // [0,1.0]
-    void set_eg_decay( float32_t decay );                  // [0,1.0]
-    void set_eg_sustain( float32_t sustain );              // [0,1.0]
-    void set_eg_release ( float32_t release );             // [0,1.0]
+    void set_eg_attack( float attack );                // [0,1.0]
+    void set_eg_decay( float decay );                  // [0,1.0]
+    void set_eg_sustain( float sustain );              // [0,1.0]
+    void set_eg_release ( float release );             // [0,1.0]
 private:
         // essential members. Do not touch.
     void enter_critical_section(void);