| @@ -23,6 +23,7 @@ struct MidiGenerator { | |||||
| bool start; | bool start; | ||||
| bool stop; | bool stop; | ||||
| bool cont; | bool cont; | ||||
| int64_t timestamp = -1; | |||||
| MidiGenerator() { | MidiGenerator() { | ||||
| reset(); | reset(); | ||||
| @@ -55,6 +56,7 @@ struct MidiGenerator { | |||||
| m.setStatus(0x8); | m.setStatus(0x8); | ||||
| m.setNote(note); | m.setNote(note); | ||||
| m.setValue(0); | m.setValue(0); | ||||
| m.timestamp = timestamp; | |||||
| onMessage(m); | onMessage(m); | ||||
| } | } | ||||
| } | } | ||||
| @@ -74,6 +76,7 @@ struct MidiGenerator { | |||||
| m.setStatus(0x8); | m.setStatus(0x8); | ||||
| m.setNote(notes[c]); | m.setNote(notes[c]); | ||||
| m.setValue(vels[c]); | m.setValue(vels[c]); | ||||
| m.timestamp = timestamp; | |||||
| onMessage(m); | onMessage(m); | ||||
| } | } | ||||
| if (changedNote || enabledGate) { | if (changedNote || enabledGate) { | ||||
| @@ -82,6 +85,7 @@ struct MidiGenerator { | |||||
| m.setStatus(0x9); | m.setStatus(0x9); | ||||
| m.setNote(note); | m.setNote(note); | ||||
| m.setValue(vels[c]); | m.setValue(vels[c]); | ||||
| m.timestamp = timestamp; | |||||
| onMessage(m); | onMessage(m); | ||||
| } | } | ||||
| notes[c] = note; | notes[c] = note; | ||||
| @@ -97,6 +101,7 @@ struct MidiGenerator { | |||||
| m.setStatus(0xa); | m.setStatus(0xa); | ||||
| m.setNote(notes[c]); | m.setNote(notes[c]); | ||||
| m.setValue(val); | m.setValue(val); | ||||
| m.timestamp = timestamp; | |||||
| onMessage(m); | onMessage(m); | ||||
| } | } | ||||
| @@ -109,6 +114,7 @@ struct MidiGenerator { | |||||
| m.setSize(2); | m.setSize(2); | ||||
| m.setStatus(0xd); | m.setStatus(0xd); | ||||
| m.setNote(val); | m.setNote(val); | ||||
| m.timestamp = timestamp; | |||||
| onMessage(m); | onMessage(m); | ||||
| } | } | ||||
| @@ -121,6 +127,7 @@ struct MidiGenerator { | |||||
| m.setStatus(0xb); | m.setStatus(0xb); | ||||
| m.setNote(id); | m.setNote(id); | ||||
| m.setValue(cc); | m.setValue(cc); | ||||
| m.timestamp = timestamp; | |||||
| onMessage(m); | onMessage(m); | ||||
| } | } | ||||
| @@ -153,6 +160,7 @@ struct MidiGenerator { | |||||
| m.setStatus(0xe); | m.setStatus(0xe); | ||||
| m.setNote(pw & 0x7f); | m.setNote(pw & 0x7f); | ||||
| m.setValue((pw >> 7) & 0x7f); | m.setValue((pw >> 7) & 0x7f); | ||||
| m.timestamp = timestamp; | |||||
| onMessage(m); | onMessage(m); | ||||
| } | } | ||||
| @@ -166,6 +174,7 @@ struct MidiGenerator { | |||||
| m.setSize(1); | m.setSize(1); | ||||
| m.setStatus(0xf); | m.setStatus(0xf); | ||||
| m.setChannel(0x8); | m.setChannel(0x8); | ||||
| m.timestamp = timestamp; | |||||
| onMessage(m); | onMessage(m); | ||||
| } | } | ||||
| } | } | ||||
| @@ -180,6 +189,7 @@ struct MidiGenerator { | |||||
| m.setSize(1); | m.setSize(1); | ||||
| m.setStatus(0xf); | m.setStatus(0xf); | ||||
| m.setChannel(0xa); | m.setChannel(0xa); | ||||
| m.timestamp = timestamp; | |||||
| onMessage(m); | onMessage(m); | ||||
| } | } | ||||
| } | } | ||||
| @@ -194,6 +204,7 @@ struct MidiGenerator { | |||||
| m.setSize(1); | m.setSize(1); | ||||
| m.setStatus(0xf); | m.setStatus(0xf); | ||||
| m.setChannel(0xb); | m.setChannel(0xb); | ||||
| m.timestamp = timestamp; | |||||
| onMessage(m); | onMessage(m); | ||||
| } | } | ||||
| } | } | ||||
| @@ -208,10 +219,15 @@ struct MidiGenerator { | |||||
| m.setSize(1); | m.setSize(1); | ||||
| m.setStatus(0xf); | m.setStatus(0xf); | ||||
| m.setChannel(0xc); | m.setChannel(0xc); | ||||
| m.timestamp = timestamp; | |||||
| onMessage(m); | onMessage(m); | ||||
| } | } | ||||
| } | } | ||||
| void setTimestamp(int64_t timestamp) { | |||||
| this->timestamp = timestamp; | |||||
| } | |||||
| virtual void onMessage(const midi::Message &message) {} | virtual void onMessage(const midi::Message &message) {} | ||||
| }; | }; | ||||