VST Host application


#1

Hello,

I’m looking to build a simple audio application and part of it requires that I am able to pass MIDI through a VST plugin. I’ve been searching around to find any kind of information on building the VST host (so it can load VST plugins) and I haven’t come up with anything worthwhile. A few times I saw Juce mention in regards to building the VST host, but searching this forum and going through the documentation didn’t give me any definitive help. I see a lot about building VST/AU plugins with Juce, but not much regarding the host.

I was wondering if Juce would be able to simplify the task of implementing the VST host? Any help would be really appreciated.

Thank you.


#2

Considering that the Juce distributions come with a sample application that implements a VST Host, I’d say the odds were good.


#3

Yeah that was pretty stupid of me. I’m not sure how I missed that.

On a related note. I’m unable to compile the audio plugin host under linux. I get several errors and I’m not sure what’s causing that here is the first few (the list is probably 3 times longer):

../../JuceLibraryCode/../../../amalgamation/../src/gui/graphics/drawables/juce_Drawable.cpp:43: error: ‘juce::Drawable::juce’ has not been declared
../../JuceLibraryCode/../../../amalgamation/../src/gui/graphics/drawables/juce_Drawable.cpp:43: error: ISO C++ forbids declaration of ‘Drawable’ with no type
../../JuceLibraryCode/../../../amalgamation/../src/gui/graphics/drawables/juce_Drawable.cpp: In function ‘int juce::Drawable()’:
../../JuceLibraryCode/../../../amalgamation/../src/gui/graphics/drawables/juce_Drawable.cpp:45: error: ‘setInterceptsMouseClicks’ was not declared in this scope
../../JuceLibraryCode/../../../amalgamation/../src/gui/graphics/drawables/juce_Drawable.cpp:46: error: ‘setPaintingIsUnclipped’ was not declared in this scope
../../JuceLibraryCode/../../../amalgamation/../src/gui/graphics/drawables/juce_Drawable.cpp: At global scope:
../../JuceLibraryCode/../../../amalgamation/../src/gui/graphics/drawables/juce_Drawable.cpp:49: error: expected class-name before ‘::’ token
../../JuceLibraryCode/../../../amalgamation/../src/gui/graphics/drawables/juce_Drawable.cpp:49: error: expected constructor, destructor, or type conversion before ‘::’ token

I’m just using “make” in the linux Builds directory. Im using gcc 4.4.5 on Ubuntu 10.10 x86_64.

Should I also submit this under the linux forum too?


#4

I’ve never done a linux host build myself, I rely on people’s input to keep that project in a working state… That’s a very odd error though, it looks like maybe a typo has crept in somewhere.


#5

I’ve spent the last 2 days going through the sample applications (specifically the Audio plugin host) and through all the doxy documentation and I cannot for the life of me figure out how to take a midi file pass it through a VST plugin and play it out the speakers.

Is there any kind of documentation outlining the big picture of how all the audio works together? How plugins connect to players or processors or graphs and how to get files into the picture at all?

I’m truly lost.


#6

There’s no such high-level api which allows you to directly pass a midi-file to a VST afaik, but it’s very possible to do it.
From the top of my head, you’ve got to :

  • create an audio processor graph
  • put your VST inside it as an AudioPluginInstance
  • add input and output nodes (AudioProcessorGraph::AudioGraphIOProcessor with the right type, in your case midiInputNode and AudioOutputNode) to the graph
  • create a class which inherits AudioIODeviceCallback
  • I this class’ audioDeviceIOCallback, you call AudioProcessorGraph::processBlock, with the right MidiBuffer

Midi playback isn’t implemented “as-is” in Juce, so you’ll have to do it manually (basically, it means that for a given sample block, you have to be able to find the relevant midi events)

HTH


#7

Hi all,

I have the same error when I try to compile the plugin host on Linux. Have you found the reason of this error ?