compensate for processor latency during bounce
[ardour.git] / libs / ardour / session_vst.cc
index 54843965b4badccb7bddd04937a55f60dff0e9fe..508f11df138ccbc09dec97aae87ebd259ccecd9e 100644 (file)
@@ -49,8 +49,13 @@ int Session::vst_current_loading_id = 0;
 const char* Session::vst_can_do_strings[] = {
        X_("supplyIdle"),
        X_("sendVstTimeInfo"),
+       X_("sendVstEvents"),
+       X_("sendVstMidiEvent"),
+       X_("receiveVstEvents"),
+       X_("receiveVstMidiEvent"),
        X_("supportShell"),
-       X_("shellCategory")
+       X_("shellCategory"),
+       X_("shellCategorycurID")
 };
 const int Session::vst_can_do_string_count = sizeof (vst_can_do_strings) / sizeof (char*);
 
@@ -102,7 +107,7 @@ intptr_t Session::vst_callback (
        case audioMasterVersion:
                SHOW_CALLBACK ("amc: audioMasterVersion\n");
                // vst version, currently 2 (0 for older)
-               return 2; // XXX 2400
+               return 2400;
 
        case audioMasterCurrentId:
                SHOW_CALLBACK ("amc: audioMasterCurrentId\n");
@@ -256,6 +261,15 @@ intptr_t Session::vst_callback (
        case audioMasterProcessEvents:
                SHOW_CALLBACK ("amc: audioMasterProcessEvents\n");
                // VstEvents* in <ptr>
+               if (plug && plug->midi_buffer()) {
+                       VstEvents* v = (VstEvents*)ptr;
+                       for (int n = 0 ; n < v->numEvents; ++n) {
+                               VstMidiEvent *vme = (VstMidiEvent*) (v->events[n]->dump);
+                               if (vme->type == kVstMidiType) {
+                                       plug->midi_buffer()->push_back(vme->deltaFrames, 3, (uint8_t*)vme->midiData);
+                               }
+                       }
+               }
                return 0;
 
        case audioMasterSetTime: