12-polyphonic "chiptune" MIDI synthesizer for LPC1768 (Standalone version)

Dependencies:   ClockControl PowerControl mbed

Files at this revision

API Documentation at this revision

Comitter:
kayekss
Date:
Tue Dec 09 16:13:06 2014 +0000
Parent:
4:b2423ad4b248
Child:
6:cda45a5e723e
Commit message:
Supports "Reset all controllers" messages

Changed in this revision

events.cpp Show annotated file Show diff for this revision Revisions of this file
events.h Show annotated file Show diff for this revision Revisions of this file
parser.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/events.cpp	Tue Dec 09 15:04:13 2014 +0000
+++ b/events.cpp	Tue Dec 09 16:13:06 2014 +0000
@@ -280,7 +280,30 @@
     }
 }
 
+void resetAllControllers(char messageBytes[3]) {
+    uint8_t channel = messageBytes[0] & 0x0f;
+    
+    for (uint8_t i = 0; i < 16; i++) {
+        ch.setVolume(channel, 100);
+        ch.setExpression(channel, 127);
+        ch.setPitchBend(channel, 0);
+    }
+    
+    if (dumpMode == DUMP_INST || dumpMode == DUMP_INST_DETAIL) {
+        console.printf("%-12s", "Reset all ct");
+        dumpInstrumentList();
+    }
+}
+
 void sendSystemReset() {
+    // Reset channel controller/programs
+    for (uint8_t i = 0; i < 16; i++) {
+        ch.setVolume(i, 100);
+        ch.setExpression(i, 127);
+        ch.setPitchBend(i, 0);
+        ch.setWave(i, Wavetable::waveDefList[0]);
+    }
+    // Initialize all notes
     for (uint16_t i = 0; i < NUM_INSTRUMENT; i++) {
         noteSent[i].noteOnMs = 0;
         noteSent[i].channel = 0;
@@ -292,7 +315,7 @@
         console.printf("%-12s", "System reset");
         dumpInstrumentList();
     }
-    for (uint8_t i = 0; i < NUM_INSTRUMENT; i++) {
+    for (uint16_t i = 0; i < NUM_INSTRUMENT; i++) {
         gemCore.noteOff(i);
         gemCore.volume(i, 100);
         gemCore.expression(i, 127);
--- a/events.h	Tue Dec 09 15:04:13 2014 +0000
+++ b/events.h	Tue Dec 09 16:13:06 2014 +0000
@@ -8,6 +8,7 @@
 void sendPitchBend(char messageBytes[3]);
 void sendSystemReset();
 void allNoteOff(char messageBytes[3]);
+void resetAllControllers(char messageBytes[3]);
 void dumpInstrumentList();
 
 #endif
--- a/parser.cpp	Tue Dec 09 15:04:13 2014 +0000
+++ b/parser.cpp	Tue Dec 09 16:13:06 2014 +0000
@@ -95,6 +95,9 @@
             case 0x7b:  // All note off
                 allNoteOff(messageBytes);
                 break;
+            case 0x79:  // Reset all controllers
+                resetAllControllers(messageBytes);
+                break;
             default:
                 sendControlChange(messageBytes);
                 break;