/* * Midi2Wave * * Implementation */ #include "midi2wave.h" #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) short ptr; void setupMidi() { for (int i=0; i=0; --i) // Goes down: make sure the most significant note gets played if ( key_vels[i] && !(key_vels[i]&32) ) { for (char j=0; j= SONG_LEN) { // Restart in 3s Serial.println("Ended."); setupMidi(); event_length = 3000; for (int i = 0; i < 7; ++i) sbi(PORTD, i+2); return; } int new_length = NOTE_DELAY(ptr)*TEMPO; key_vels[NOTE_NUMBER(ptr)-1] = NOTE_VEL(ptr); ++ptr; if (new_length == 0) loadNextEvent(); else { renderWaveBuffer(); event_length = new_length; } }