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:
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 );
+            }