vst - union university · audio synthesizers audio effect plugins daw (digital audio workstation)...

12
VST Virtual Studio Technology Intro to VST plug-ins & VST.NET Kevin Reed 2012-2-21

Upload: ngoliem

Post on 22-Sep-2018

253 views

Category:

Documents


0 download

TRANSCRIPT

VST Virtual Studio Technology

Intro to VST plug-ins & VST.NET

Kevin Reed 2012-2-21

What is VST?

• an interface to integrate

Audio Synthesizers Audio Effect Plugins

DAW (Digital Audio Workstation)

History •  1996 o  SDK released by Steinberg in 1996 o  released with Cubase 3.02 o  included some basic effect plug-ins

•  1999 o  included updates for VSTi (virtual instruments) o  Neon - the first VSTi - 16-voice, 2-oscillator virtual

analog synthesizer

VST3 Audio Effect

Steinberg VST SDK

•  "Splitting up an effect into these two parts requires some extra efforts for an implementation of course." [1]

"But this separation enables the host to run each component in a different context. It can even run them on different computers." [1]

Processor Edit Controller

Vst::IComponent Vst::IAudioProcessor

Vst::EditController

Stienberg::IAudioProcessor •  [1]

1.  Setup (configuration must happen before processing) a.  Process Setup (parameters that cannot be changed

during processing) Stienberg::Vst::ProcessSetup

b.  Dynamic Speaker Arrangements Stienberg::Vst::IAudioProcessor::setBusArrangements

2. Process (implements actual processing) Stienberg::Vst:IAudioProcessor::process

a.  Block Size (processing done in blocks) b.  Audio Buffers c.  Parameters & Automation

VST.NET •  "VST.NET does nothing with the C++ SDK classes that

Steinberg provides. It interfaces at the lowest level with the C function pointers and opcodes and translates those to and from managed code (C# in this case)." [3]

•  Why VST.NET? [2] •  VST.NET is easier to learn than the native SDK API •  You can program VST plug-ins in any .NET language •  VST.NET provides a framework that simplifies and

clarifies the VST interfacing options •  It takes far less time to develop a managed VST.NET

plug-in than to develop a C/C++ native VST plug-in •  Good documentation •  Existing native VST knowledge applies

Implementing an Audio Processor

•  using Jacobi.Vst.Core; using Jacobi.Vst.Framework;

class AudioProcessor : IVstPluginAudioProcessor { public int BlockSize { get; set; }

public int InputCount { get { return 2; } }

public int OutputCount { get { return 2; } }

public double SampleRate { get; set;}

public int TailSize { get { return 0; } }

Audio Processor (cont.)

•  public void Process(VstAudioBuffer[] inputs, VstAudioBuffer[] outputs) { VstAudioBuffer input = inputs[0]; VstAudioBuffer output = outputs[0]; for (int index = 0; index < output.SampleCount; index++) { output[index] = input[index]; }

input = inputs[1]; output = outputs[1];

for (int index = 0; index < output.SampleCount; index++) { output[index] = input[index]; } }

public bool SetPanLaw(VstPanLaw type, float gain) { return false; }

#endregion }

Changing the Interface Manager •  using Jacobi.Vst.Core;

using Jacobi.Vst.Framework; using Jacobi.Vst.Framework.Plugin;

class MyPlugin : VstPluginWithInterfaceManagerBase { public MyPlugin() : base("My Plugin", new VstProductInfo("My Product", "My Vendor", 1000), VstPluginCategory.Synth, VstPluginCapabilities.NoSoundInStop, 0, 0) // enter unique plugin ID {}

protected override IVstPluginAudioProcessor CreateAudioProcessor (IVstPluginAudioProcessor instance) { if (instance == null) return new AudioProcessor(this);

// base class just returns 'instance' return base.CreateAudioProcessor(instance); } // other methods... }

References

• [1] - Stienberg VST SDK 3.5 Documentation •  http://www.steinberg.net/en/company/developer.html

• [2] - VST.NET Documentation •  http://vstnet.codeplex.com/releases/view/

58390#DownloadId=192723

• [3] - Mark's Blog Cabin •  http://obiwanjacobi.blogspot.com/2008/05/vstnet.html