#include #include #include #include #include #include #include "PDResonant.h" #include PDResonant voice; int current_note, scan_no, sw_old[25], sw_new[25], sw_eve[25]; int note_no[25] = {0,2,4,6,7,9,11,12,14,16,18,19,21,23,24,1,3,5,8,10,13,15,17,20,22}; int scan1[25] = {4,5,6,7,8,12,13,14,4,5,6,7,8,12,13,14,4,5,6,7,8,12,13,14,4}; int scan2[25] = {0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3}; void setup(){ int i; randSeed(); for(i=0;i<4;i++) pinMode(i, INPUT_PULLUP); for(i=4;i<9;i++) pinMode(i, OUTPUT); for(i=10;i<15;i++) pinMode(i, OUTPUT); for(i=4;i<9;i++) digitalWrite(i, HIGH); for(i=10;i<15;i++) digitalWrite(i, HIGH); for(i=0;i<25;i++){ sw_old[25] = 0; sw_eve[25] = 0; } startMozzi(CONTROL_RATE); voice.setPDEnv(50,800); } void key_sw_scan(){ int i1,i2,dt,st; st = scan_no; if(sw_eve[st] == 1){ current_note = 53 + note_no[st]; HandleNoteOff(1,current_note,0); sw_eve[st] = 0; } scan_no = ++scan_no % 25; i1 = scan1[scan_no]; digitalWrite(i1, LOW); i2 = scan2[scan_no]; dt = digitalRead(i2); if(dt == LOW) sw_new[scan_no] = 1; else sw_new[scan_no] = 0; if(sw_old[scan_no] != sw_new[scan_no]){ sw_old[scan_no] = sw_new[scan_no]; if(sw_new[scan_no] == 1){ current_note = 53 + note_no[scan_no]; HandleNoteOn(1,current_note,127); sw_eve[scan_no] = 1; } } digitalWrite(i1, HIGH); } void updateControl(){ key_sw_scan(); voice.update(); } void HandleNoteOn(byte channel, byte pitch, byte velocity){ voice.noteOn(channel, pitch, velocity); digitalWrite(11,LOW); } void HandleNoteOff(byte channel, byte pitch, byte velocity){ voice.noteOff(channel, pitch, velocity); digitalWrite(11,HIGH); } AudioOutput_t updateAudio(){ return MonoOutput::from8Bit(voice.next()); } void loop(){ audioHook(); }