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空挺団の「シンセサイザー」カテゴリーを参照してください。初回は「ドッグフードを食べる」です。
eg.cpp@29:8ee84bda128c, 2017-02-18 (annotated)
- Committer:
- shorie
- Date:
- Sat Feb 18 04:37:19 2017 +0000
- Revision:
- 29:8ee84bda128c
- Parent:
- 28:547f19ed6f67
Limiter function is confirmed. SV filter ignored bug was fixed.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
shorie | 26:e99f71165e19 | 1 | #include "signal_processing.h" |
shorie | 26:e99f71165e19 | 2 | |
shorie | 27:fcb1f1da2ad7 | 3 | EG::EG ( int32_t a_block_size ) |
shorie | 26:e99f71165e19 | 4 | { |
shorie | 27:fcb1f1da2ad7 | 5 | this->block_size = a_block_size; |
shorie | 26:e99f71165e19 | 6 | |
shorie | 26:e99f71165e19 | 7 | this->state = release; |
shorie | 26:e99f71165e19 | 8 | this->set_sustain( 0.0f ); |
shorie | 26:e99f71165e19 | 9 | this->current_level = 0.0f; |
shorie | 26:e99f71165e19 | 10 | this->set_attack( 0.999 ); |
shorie | 26:e99f71165e19 | 11 | this->set_decay( 0.999 ); |
shorie | 26:e99f71165e19 | 12 | this->set_release( 0.999 ); |
shorie | 26:e99f71165e19 | 13 | |
shorie | 26:e99f71165e19 | 14 | } |
shorie | 26:e99f71165e19 | 15 | |
shorie | 26:e99f71165e19 | 16 | void EG::run( float32_t *pEnvelope ) |
shorie | 26:e99f71165e19 | 17 | { |
shorie | 26:e99f71165e19 | 18 | if ( this->state == release ) |
shorie | 26:e99f71165e19 | 19 | for ( int i= 0; i< this->block_size; i++ ) |
shorie | 26:e99f71165e19 | 20 | pEnvelope[i] = this->current_level = |
shorie | 26:e99f71165e19 | 21 | this->current_level * this->release_time_constant; |
shorie | 26:e99f71165e19 | 22 | else if ( this->state == decay ) |
shorie | 26:e99f71165e19 | 23 | for ( int i= 0; i< this->block_size; i++ ) |
shorie | 26:e99f71165e19 | 24 | pEnvelope[i] = this->current_level = |
shorie | 26:e99f71165e19 | 25 | ( this->current_level - this->sustain_level ) * this->decay_time_constant |
shorie | 26:e99f71165e19 | 26 | + this->sustain_level; |
shorie | 26:e99f71165e19 | 27 | else // attack |
shorie | 26:e99f71165e19 | 28 | { |
shorie | 26:e99f71165e19 | 29 | for ( int i= 0; i< this->block_size; i++ ) |
shorie | 26:e99f71165e19 | 30 | pEnvelope[i] = this->current_level = |
shorie | 26:e99f71165e19 | 31 | 1.5f - |
shorie | 26:e99f71165e19 | 32 | ( 1.5f - this->current_level ) * this->attack_time_constant; |
shorie | 26:e99f71165e19 | 33 | if ( this->current_level >= 1.0f ) |
shorie | 26:e99f71165e19 | 34 | this->state = decay; |
shorie | 26:e99f71165e19 | 35 | } |
shorie | 26:e99f71165e19 | 36 | |
shorie | 26:e99f71165e19 | 37 | } |
shorie | 26:e99f71165e19 | 38 | |
shorie | 26:e99f71165e19 | 39 | void EG::on(void) |
shorie | 26:e99f71165e19 | 40 | { |
shorie | 26:e99f71165e19 | 41 | this->state = attack; |
shorie | 26:e99f71165e19 | 42 | } |
shorie | 26:e99f71165e19 | 43 | |
shorie | 26:e99f71165e19 | 44 | void EG::off(void) |
shorie | 26:e99f71165e19 | 45 | { |
shorie | 26:e99f71165e19 | 46 | this->state = release; |
shorie | 26:e99f71165e19 | 47 | } |
shorie | 26:e99f71165e19 | 48 | |
shorie | 26:e99f71165e19 | 49 | void EG::set_sustain( float32_t sustain ) |
shorie | 26:e99f71165e19 | 50 | { |
shorie | 26:e99f71165e19 | 51 | this->sustain_level = sustain; |
shorie | 26:e99f71165e19 | 52 | } |
shorie | 26:e99f71165e19 | 53 | |
shorie | 26:e99f71165e19 | 54 | void EG::set_attack( float32_t attack ) |
shorie | 26:e99f71165e19 | 55 | { |
shorie | 28:547f19ed6f67 | 56 | this->attack_time_constant = 1.0f - (1.0f-attack) * 0.001f; |
shorie | 26:e99f71165e19 | 57 | } |
shorie | 26:e99f71165e19 | 58 | |
shorie | 26:e99f71165e19 | 59 | void EG::set_decay( float32_t decay ) |
shorie | 26:e99f71165e19 | 60 | { |
shorie | 28:547f19ed6f67 | 61 | this->decay_time_constant = 1.0f - (1.0f-decay) * 0.001f; |
shorie | 26:e99f71165e19 | 62 | } |
shorie | 26:e99f71165e19 | 63 | |
shorie | 26:e99f71165e19 | 64 | void EG::set_release( float32_t release ) |
shorie | 26:e99f71165e19 | 65 | { |
shorie | 28:547f19ed6f67 | 66 | this->release_time_constant = 1.0f - (1.0f-release) * 0.001f; |
shorie | 26:e99f71165e19 | 67 | } |
shorie | 26:e99f71165e19 | 68 | |
shorie | 26:e99f71165e19 | 69 |