/// <summary> /// Disposes all members, cascades the Dispose call. /// </summary> public void Dispose() { PluginInfo = null; if (Plugin != null) { Plugin.Dispose(); Plugin = null; } if (Host != null) { Host.Dispose(); Host = null; } }
/// <summary> /// Creates summary info based on the <paramref name="plugin"/>. /// </summary> /// <param name="plugin">Must not be null.</param> /// <returns>Never returns null.</returns> /// <remarks>Override to add or change behavior.</remarks> protected virtual VstPluginInfo CreatePluginInfo(IVstPlugin plugin) { VstPluginInfo pluginInfo = new VstPluginInfo(); IVstPluginAudioProcessor audioProcessor = plugin.GetInstance<IVstPluginAudioProcessor>(); // determine flags if (plugin.Supports<IVstPluginEditor>()) pluginInfo.Flags |= VstPluginFlags.HasEditor; if (audioProcessor != null) pluginInfo.Flags |= VstPluginFlags.CanReplacing; if (plugin.Supports<IVstPluginAudioPrecisionProcessor>()) pluginInfo.Flags |= VstPluginFlags.CanDoubleReplacing; if (plugin.Supports<IVstPluginPersistence>()) pluginInfo.Flags |= VstPluginFlags.ProgramChunks; if (audioProcessor != null && plugin.Supports<IVstMidiProcessor>()) pluginInfo.Flags |= VstPluginFlags.IsSynth; if ((plugin.Capabilities & VstPluginCapabilities.NoSoundInStop) > 0) pluginInfo.Flags |= VstPluginFlags.NoSoundInStop; // basic plugin info pluginInfo.InitialDelay = plugin.InitialDelay; pluginInfo.PluginID = plugin.PluginID; pluginInfo.PluginVersion = plugin.ProductInfo.Version; // audio processing info if (audioProcessor != null) { pluginInfo.AudioInputCount = audioProcessor.InputCount; pluginInfo.AudioOutputCount = audioProcessor.OutputCount; } // parameter info IVstPluginParameters pluginParameters = plugin.GetInstance<IVstPluginParameters>(); if (pluginParameters != null) pluginInfo.ParameterCount = pluginParameters.Parameters.Count; // program info IVstPluginPrograms pluginPrograms = plugin.GetInstance<IVstPluginPrograms>(); if (pluginPrograms != null) pluginInfo.ProgramCount = pluginPrograms.Programs.Count; return pluginInfo; }