Load VST or AU virtual instruments

I have a couple of MIDI apps which use available devices on the Mac to record and play MIDI.

I have a number of virtual software instruments, AU and VST plugins which load into DAWs like Logic Pro or Digital Performer. Is there a way to access these plugins from Xojo? I have MBS plugins but haven’t found routines to do this.


The AVAudioUnitSamplerMBS class has loadInstrumentAtFile and loadInstrumentAtURL methods. Maybe these help?

Thanks, Christian. I’ll check this out.

Thanks to your help in pointing out the direction to take, I’ve been able to load virtual instruments. These are AVComponents that are type “Music Device”, plug-ins that are software synths which can be triggered by MIDI events as well as code. Apple’s terminology is a little confusing because the component used to load them is AVAudioUnitSampler. The component contains the file path and the instrument is loaded by the Constructor.

Anyway, using the Audio Components Xojo example, I was able to load the instruments. This code loads and lists each instrument and plays a middle C (if there’s a default sound).

I’m posting this to save others the work of figuring this out. You’ll need a ListBox (“List”) in a window to get this working.


Var m As New AVAudioUnitComponentManagerMBS
Var a() As AVAudioUnitComponentMBS = m.allComponents
Var Engine As AVAudioEngineMBS

For Each c As AVAudioUnitComponentMBS In a
  Var d As AVAudioComponentDescriptionMBS = c.audioComponentDescription
  If c.LocalizedTypeName = "Music Device" Then 
    List.AddRow c.Name, c.ManufacturerName, c.LocalizedTypeName, c.VersionString, d.componentType+" "+d.componentSubType
    app.DoEvents ' just to update the listbox
    Var MD As AVAudioUnitSamplerMBS
      MD = New AVAudioUnitSamplerMBS(d) ' this loads the virtual instrument
    Engine = New AVAudioEngineMBS
    Engine.attachNode MD
    Engine.connect(MD, Engine.mainMixerNode, Nil)
    Var error As NSErrorMBS
    If Not Engine.startAndReturnError(error) Then
      MessageBox("Error starting audio engine")
    MD.sendMIDIEvent(&h90, 64, 100) ' play middle C
    MD.sendMIDIEvent(&h90, 64, 0)