obsproject / obs-vst

Use VST plugins in OBS
GNU General Public License v2.0
181 stars 56 forks source link

MIDI Support? Native VST Control? #45

Open Andersama opened 6 years ago

Andersama commented 6 years ago

VSTs typically process or output midi, one of the tutorials mentions it but not in full. A nice part of having some VSTs and often their key feature is the ability to automate some controls using midi messages.

This is potentially extremely useful for live streaming purposes, any VST for example that allows automation of a gain control*, or any other processing effect that maybe an audio processional would be familiar with.

A sort've hackish way around this is to have a VST host within this VST host with a plugin which gives the user the option to pick a midi hardware device as it's source...it's not pretty. Most of any VST plugin assumes that midi is being provided via hardware, not that it needs to provide it and just eyeballing a few VST hosts midi support is pretty much always included.

Another interesting idea may be to pass along any captured midi control codes and treating them as OBS hotkeys*...which would just naturally over time extend creative control over OBS features as more plugins add hotkey support...

I've already found examples of people using the WebSockets API w/ a bit of powershell and .NET to do this in a round about way on Windows. It seems like people'd probably like this feature, especially since it'd make it nice to do scene selections, or fire off animations, etc...

Little busy myself but* http://www.music.mcgill.ca/~gary/rtmidi/ may be useful along w/ this: http://teragonaudio.com/article/How-to-make-your-own-VST-host.html#sending_midi_messages

This would mean that somewhere there needs to be a midi device selection in some part of the filters GUI

DDRBoxman commented 6 years ago

I've actually played with rtmidi over in my obs midi plugin that I started writing. https://github.com/DDRBoxman/obs-midi

If I get some free time I might look into this.

Andersama commented 6 years ago

I think the current implementation just needs to add:

void processMidi(AEffect *plugin, VstEvents *events) {
  dispatcher(plugin, effProcessEvents, 0, 0, events, 0.0f);
}

and then to call that w/ the midi events captured by rtmidi...I think that's about it?