Synthesizer based on the Unzen / Nucleo F746ZG
Dependencies: amakusa mbed-dsp mbed shimabara ukifune unzen_nucleo_f746
Fork of skeleton_unzen_nucleo_f746 by
雲仙フレームワークのテストとして作っているプロジェクトです。中身はどんどん変っていきます。 説明はDSP空挺団の「シンセサイザー」カテゴリーを参照してください。初回は「ドッグフードを食べる」です。
Diff: signal_processing.h
- 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);