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: main.cpp
- Revision:
- 22:dc2cbe8db9d9
- Parent:
- 18:b9b1116f8768
- Child:
- 26:e99f71165e19
--- a/main.cpp Sat Feb 04 15:05:44 2017 +0000 +++ b/main.cpp Sun Feb 05 06:16:49 2017 +0000 @@ -45,14 +45,28 @@ // VFO form wave_form form = triangle; + + // filter mode + svf_mode filter_mode = lpf; // start audio. Do not touch initialize_system(); + + // set tentative frequency + process->set_vfo_frequency( 440 ); - process->set_vfo_frequency( 440 ); + // set wave from process->set_vfo_wave_form( form ); - ukifune::turn_led_off( ukifune::led1_1 ); - ukifune::turn_led_on( ukifune::led1_2 ); + ukifune::turn_led_on( ukifune::led1_1 ); + ukifune::turn_led_off( ukifune::led1_2 ); + + // set filter mode + process->set_filter_mode( filter_mode ); + ukifune::turn_led_on( ukifune::led2_1 ); + ukifune::turn_led_off( ukifune::led2_2 ); + ukifune::turn_led_off( ukifune::led2_3 ); + ukifune::turn_led_off( ukifune::led2_4 ); + // main loop. Signal processing is done in background. while(1) @@ -61,27 +75,59 @@ // get volume from UI panel, then apply it to signal processing. process->set_volume( ukifune::get_volume(0) ); process->set_vfo_duty_cycle( ukifune::get_volume(1) ); + process->set_filter_f_factor( ukifune::get_volume(2) ); + process->set_filter_Q( ukifune::get_volume(3) ); // sample usage of button switch detection ukifune::get_button_state( pushing, releasing, holding); // pushing detection demo + // waveform if ( pushing & (1 << ukifune::swm1 ) ) // is SWM1 switch pusshing down? if ( form == triangle ) { form = square; process->set_vfo_wave_form( form ); - ukifune::turn_led_on( ukifune::led1_1 ); - ukifune::turn_led_off( ukifune::led1_2 ); + ukifune::turn_led_off( ukifune::led1_1 ); + ukifune::turn_led_on( ukifune::led1_2 ); } else { form = triangle; process->set_vfo_wave_form( form ); - ukifune::turn_led_off( ukifune::led1_1 ); - ukifune::turn_led_on( ukifune::led1_2 ); + ukifune::turn_led_on( ukifune::led1_1 ); + ukifune::turn_led_off( ukifune::led1_2 ); } + // filter mode + if ( pushing & (1 << ukifune::swm2 ) ) // is SWM2 switch pusshing down? + if ( filter_mode == lpf ) + { + filter_mode = bpf; + process->set_filter_mode( filter_mode ); + ukifune::turn_led_off( ukifune::led2_1 ); + ukifune::turn_led_on( ukifune::led2_2 ); + ukifune::turn_led_off( ukifune::led2_3 ); + ukifune::turn_led_off( ukifune::led2_4 ); + } + else if ( filter_mode == bpf ) + { + filter_mode = hpf; + process->set_filter_mode( filter_mode ); + ukifune::turn_led_off( ukifune::led2_1 ); + ukifune::turn_led_off( ukifune::led2_2 ); + ukifune::turn_led_on( ukifune::led2_3 ); + ukifune::turn_led_off( ukifune::led2_4 ); + } + else // hpf + { + filter_mode = lpf; + process->set_filter_mode( filter_mode ); + ukifune::turn_led_on( ukifune::led2_1 ); + ukifune::turn_led_off( ukifune::led2_2 ); + ukifune::turn_led_off( ukifune::led2_3 ); + ukifune::turn_led_off( ukifune::led2_4 ); + }