| @@ -38,7 +38,7 @@ public: | |||
| : PluginDescriptorClass(host), | |||
| fWantInEvents(false) | |||
| { | |||
| // TEST SONG | |||
| // TEST SONG (unsorted to test RtList API) | |||
| uint32_t m = 44; | |||
| @@ -46,15 +46,15 @@ public: | |||
| fOutEvents.addControl(0*m, 0, 10, 63); | |||
| fOutEvents.addProgram(0*m, 0, 0, 0); | |||
| // 0 On ch=1 n=64 v=90 | |||
| // 325 Off ch=1 n=64 v=90 | |||
| // 384 On ch=1 n=62 v=90 | |||
| // 709 Off ch=1 n=62 v=90 | |||
| // 768 On ch=1 n=60 v=90 | |||
| //1093 Off ch=1 n=60 v=90 | |||
| fOutEvents.addNote( 0*m, 0, 64, 90, 325*m); | |||
| fOutEvents.addNote(384*m, 0, 62, 90, 325*m); | |||
| fOutEvents.addNote(768*m, 0, 60, 90, 325*m); | |||
| // 6912 On ch=1 n=60 v=90 | |||
| // 7237 Off ch=1 n=60 v=90 | |||
| // 7296 On ch=1 n=62 v=90 | |||
| // 7621 Off ch=1 n=62 v=90 | |||
| // 7680 On ch=1 n=64 v=90 | |||
| // 8005 Off ch=1 n=64 v=90 | |||
| fOutEvents.addNote(6912*m, 0, 60, 90, 325*m); | |||
| fOutEvents.addNote(7680*m, 0, 64, 90, 325*m); | |||
| fOutEvents.addNote(7296*m, 0, 62, 90, 325*m); | |||
| // 1152 On ch=1 n=62 v=90 | |||
| // 1477 Off ch=1 n=62 v=90 | |||
| @@ -63,18 +63,8 @@ public: | |||
| // 1920 On ch=1 n=64 v=90 | |||
| // 2245 Off ch=1 n=64 v=90 | |||
| fOutEvents.addNote(1152*m, 0, 62, 90, 325*m); | |||
| fOutEvents.addNote(1536*m, 0, 64, 90, 325*m); | |||
| fOutEvents.addNote(1920*m, 0, 64, 90, 325*m); | |||
| // 2304 On ch=1 n=64 v=90 | |||
| // 2955 Off ch=1 n=64 v=90 | |||
| // 3072 On ch=1 n=62 v=90 | |||
| // 3397 Off ch=1 n=62 v=90 | |||
| // 3456 On ch=1 n=62 v=90 | |||
| // 3781 Off ch=1 n=62 v=90 | |||
| fOutEvents.addNote(2304*m, 0, 64, 90, 650*m); | |||
| fOutEvents.addNote(3072*m, 0, 62, 90, 325*m); | |||
| fOutEvents.addNote(3456*m, 0, 62, 90, 325*m); | |||
| fOutEvents.addNote(1536*m, 0, 64, 90, 325*m); | |||
| // 3840 On ch=1 n=62 v=90 | |||
| // 4491 Off ch=1 n=62 v=90 | |||
| @@ -83,8 +73,22 @@ public: | |||
| // 4992 On ch=1 n=67 v=90 | |||
| // 5317 Off ch=1 n=67 v=90 | |||
| fOutEvents.addNote(3840*m, 0, 62, 90, 650*m); | |||
| fOutEvents.addNote(4608*m, 0, 64, 90, 325*m); | |||
| fOutEvents.addNote(4992*m, 0, 67, 90, 325*m); | |||
| fOutEvents.addNote(4608*m, 0, 64, 90, 325*m); | |||
| // 0 On ch=1 n=64 v=90 | |||
| // 325 Off ch=1 n=64 v=90 | |||
| // 384 On ch=1 n=62 v=90 | |||
| // 709 Off ch=1 n=62 v=90 | |||
| // 768 On ch=1 n=60 v=90 | |||
| //1093 Off ch=1 n=60 v=90 | |||
| fOutEvents.addNote( 0*m, 0, 64, 90, 325*m); | |||
| fOutEvents.addNote(768*m, 0, 60, 90, 325*m); | |||
| fOutEvents.addNote(384*m, 0, 62, 90, 325*m); | |||
| // 10752 On ch=1 n=60 v=90 | |||
| // 12056 Off ch=1 n=60 v=90 | |||
| fOutEvents.addNote(10752*m, 0, 60, 90, 650*m); | |||
| // 5376 On ch=1 n=67 v=90 | |||
| // 6027 Off ch=1 n=67 v=90 | |||
| @@ -96,16 +100,6 @@ public: | |||
| fOutEvents.addNote(6144*m, 0, 64, 90, 325*m); | |||
| fOutEvents.addNote(6528*m, 0, 62, 90, 325*m); | |||
| // 6912 On ch=1 n=60 v=90 | |||
| // 7237 Off ch=1 n=60 v=90 | |||
| // 7296 On ch=1 n=62 v=90 | |||
| // 7621 Off ch=1 n=62 v=90 | |||
| // 7680 On ch=1 n=64 v=90 | |||
| // 8005 Off ch=1 n=64 v=90 | |||
| fOutEvents.addNote(6912*m, 0, 60, 90, 325*m); | |||
| fOutEvents.addNote(7296*m, 0, 62, 90, 325*m); | |||
| fOutEvents.addNote(7680*m, 0, 64, 90, 325*m); | |||
| // 8064 On ch=1 n=64 v=90 | |||
| // 8389 Off ch=1 n=64 v=90 | |||
| // 8448 On ch=1 n=64 v=90 | |||
| @@ -126,9 +120,15 @@ public: | |||
| fOutEvents.addNote(9984*m, 0, 64, 90, 325*m); | |||
| fOutEvents.addNote(10368*m, 0, 62, 90, 325*m); | |||
| // 10752 On ch=1 n=60 v=90 | |||
| // 12056 Off ch=1 n=60 v=90 | |||
| fOutEvents.addNote(10752*m, 0, 60, 90, 650*m); | |||
| // 2304 On ch=1 n=64 v=90 | |||
| // 2955 Off ch=1 n=64 v=90 | |||
| // 3072 On ch=1 n=62 v=90 | |||
| // 3397 Off ch=1 n=62 v=90 | |||
| // 3456 On ch=1 n=62 v=90 | |||
| // 3781 Off ch=1 n=62 v=90 | |||
| fOutEvents.addNote(2304*m, 0, 64, 90, 650*m); | |||
| fOutEvents.addNote(3072*m, 0, 62, 90, 325*m); | |||
| fOutEvents.addNote(3456*m, 0, 62, 90, 325*m); | |||
| } | |||
| ~MidiSequencerPlugin() | |||
| @@ -254,18 +254,31 @@ private: | |||
| return; | |||
| } | |||
| uint32_t lastTime = 0; | |||
| for (auto it = data.begin(); it.valid(); it.next()) | |||
| { | |||
| RawMidiEvent* const oldEvent(*it); | |||
| if (time > oldEvent->time) | |||
| if (lastTime > time) | |||
| { | |||
| mutex.lock(); | |||
| data.appendAt(event, it); | |||
| data.insertAt(event, it); | |||
| mutex.unlock(); | |||
| break; | |||
| return; | |||
| } | |||
| lastTime = oldEvent->time; | |||
| } | |||
| if (time >= lastTime) | |||
| { | |||
| mutex.lock(); | |||
| data.append(event); | |||
| mutex.unlock(); | |||
| } | |||
| else | |||
| carla_stderr2("MidiSequencerPlugin::appendAt() failed for time %i", time); | |||
| } | |||
| void addControl(uint32_t time, uint8_t channel, uint8_t control, uint8_t value) | |||