GithubHelp home page GithubHelp logo

obiwanjacobi / vst.net Goto Github PK

View Code? Open in Web Editor NEW
418.0 39.0 51.0 57.46 MB

Virtual Studio Technology (VST) for .NET. Plugins and Host applications.

Home Page: https://obiwanjacobi.github.io/vst.net/index.html

License: GNU Lesser General Public License v2.1

Batchfile 0.06% C++ 21.07% C# 77.81% C 0.20% Smalltalk 0.85%
vst-plugin interop vst vst24 dotnet plugin

vst.net's Introduction

VST.NET 2

New Version: VST.NET 2

VST.NET 2 builds on the basis of VST.NET (1) and is completely built with .NET 5. The new version is still Windows-only and supports the Steinberg VST 2.x API.

This means that VST.NET (1) is phasing out and will not receive any more updates. If you are looking for the old VST.NET (1) code, its in the branch called vstnet1. Of course you can still ask questions about VST.NET (1), but no feature requests or bug fixes will be applied.

What is VST.NET

VST stands for Virtual Studio Technology and is an API designed by Steinberg that allows Audio and Midi plugin to work together in a Digital Audio Workstation (DAW) host application.

VST.NET allows VST Plugin developers to write Plugins for the Steinberg VST 2.x API. The interop layer makes the transition between the C++ and C# smooth and easy. The Framework built on top of the interop layer provides a clear and structured architecture accelerating development considerably.

VST.NET also allows developers to write a managed VST2 Host application. The VstPluginContext class (Host.Interop) allows you to load and communicate with unmanaged (and managed) VST Plugins. At this time there is no Framework for Host applications. But any ideas on this are welcome.

Documentation

Still a work in progress, but here they are.


Community

Discord

Discuss on the VST.NET Discord Server: https://discord.gg/QyZqQDk

Anyone can join and do not hesitate to ask a question or start a discussion.

Facebook

There is a Facebook page here.

Contribute

If you have a great idea for a new feature, have a suggestion or have found a bug, please create an issue on github. Use the appropriate template.


Donations

Yes please!

It is very much appreciated if you ... Donate

Or with Ko-Fi (requires a Ko-Fi account)


License

LGPL Version 2.1


VST is a trademark of Steinberg Media Technologies GmbH.

vst.net's People

Contributors

drachenkaetzchen avatar kamilpiekutowski avatar obiwanjacobi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vst.net's Issues

Midi Event Note Duration

Thanks for your work on vst.net.
I am finding that the VstMidiEvent.NoteLength is always zero, even when playing back recorded MIDI events. I am using Reaper. Is this a Reaper problem, or is this just not going to work with any DAW?

System.BadImageFormatException when launching Samples.Host

I got this exception when starting Jacobi.Vst.Samples.Host in debug. I tried with both configuration x86 and x64.

System.BadImageFormatException Message=Could not load file or assembly 'Jacobi.Vst.Host.Interop, Version=2.0.0.0

I have Microsoft Visual C++ 2015-2019 Redistributable version 14.27.28914.0 installed, x86 and x64.

Any idea what I could be missing ?

Discord invite link is stale

When I tried to join I got an error:
WRONG TURN?
You look lost, stranger. You know what helps when you’re lost? A piping hot bowl of noodles. Take a seat, we’re frantically at work here cooking up something good. Oh, you need something to read? These might help you:

.NET6 Support

Bump all projects, samples and templates to .NET6
Also update the C++ to the latest runtime distributable.

Interop code in C#

Is your feature request related to a problem? Please describe.
I wonder whether it is possible to get rid of the C++/CLI code in favor of C#.

Describe the solution you'd like
In .NET 5.0, it should be possible to do something like this with DNNE, which will possibly become part of >NET itself in future. It also promises multi platform support.

Describe alternatives you've considered
Leave as it. It is likely that porting the VST2 code is more difficult than the VST3 code, which has a very small C++/CLI interop layer anyway.

vstnet publish fails when trying to use unexisting path

Describe the bug
When I compile my project, I get the following error in the output:

1>Command `vstnet publish D:\Development\GIT\BlueMidday\LeonarddeR.BlueMidday\bin\x64\Debug\netcoreapp3.1\LeonarddeR.BlueMidday.dll -o D:\Development\GIT\BlueMidday\LeonarddeR.BlueMidday\bin\x64\Debug\netcoreapp3.1\deploy` encountered an error.
1>System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\LeonarddeRuijter\.nuget\packages\Microsoft.NETCore.Platforms\3.0.0\lib\netcoreapp3.1\x64'.
1>   at System.IO.Enumeration.FileSystemEnumerator`1.CreateDirectoryHandle(String path, Boolean ignoreNotFound)
1>   at System.IO.Enumeration.FileSystemEnumerator`1.Init()
1>   at System.IO.Enumeration.FileSystemEnumerator`1..ctor(String directory, Boolean isNormalized, EnumerationOptions options)
1>   at System.IO.Enumeration.FileSystemEnumerable`1..ctor(String directory, FindTransform transform, EnumerationOptions options, Boolean isNormalized)
1>   at System.IO.Enumeration.FileSystemEnumerableFactory.UserFiles(String directory, String expression, EnumerationOptions options)
1>   at System.IO.Directory.InternalEnumeratePaths(String path, String searchPattern, SearchTarget searchTarget, EnumerationOptions options)
1>   at Jacobi.Vst.CLI.FindFiles.GetFilePaths(TargetName targetName)
1>   at Jacobi.Vst.CLI.PublishCommand.CopyDependencies(String depsFile, ProcessorArchitecture processorArchitecture)
1>   at Jacobi.Vst.CLI.PublishCommand.Execute()
1>   at Jacobi.Vst.CLI.Program.Main(String[] args)

To Reproduce
Steps to reproduce the behavior:

  1. Create a project with several additional external dependencies:
  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.8" />
    <PackageReference Include="Microsoft.Windows.SDK.Contracts" Version="10.0.19041.1" />
    <PackageReference Include="VST.NET2-Plugin" Version="2.0.0-rc3" />
  </ItemGroup>

Expected behavior
vstnet publish completes

**Des

How to use locally compiled version of Jacobi.Vst.Plugin.Interop

Describe the bug
Trying to use the locally built version of the library (#47) in the midi sample project, but failing

To Reproduce
I've cloned vst.net and built the solution, so I have an "x64" folder with generated dlls. Now I'm trying to set up the midi sample template so that it's using these dlls instead of the regular vst.net nuget package. I've tried via the regular "add assemblies --> browse" dialog, the project doesnt build.

It would be awesome to have either

  • an updated version of the library pushed to nuget where the "midi fix" is in, or
  • detailed instructions for how to use the locally built vst.net libraries in the sample project

VSTPluginContext Dispose issue

Hi !
I am testing vst.net.
For the moment, i just get plugins infos through VstPluginContext like that :
vstName = ctx.PluginCommandStub.GetProductString(); vstVendor = ctx.PluginCommandStub.GetVendorString(); vstVersion = ctx.PluginCommandStub.GetVendorVersion(); vstIsSynth = ctx.PluginInfo.Flags.HasFlag(Jacobi.Vst.Core.VstPluginFlags.IsSynth); ctx.Dispose();

It works well on many plugins, but i get a strange Visual Studio crash with an error code 1073741855 with a few other plugins.
My debug seems to show that the Dispose method causes the crash.

I get the problem with HGFortune Alphatron. (http://www.vst4free.com/free_vst.php?id=1033)

VST host. Is it possible to change VstAudioBufferManager buffer size in the fly?

First thanks! Really great work! I got my realtime host process working fine. But I have one question.

I have vst input and output VstAudioBufferManager buffer size fixed to 1920. Everything works perfectly.
But I need also support in my application to changing buffer size. For example first sample have size 1602, next size 1601 and so on. Is it possible to change VstAudioBufferManager buffer size on the fly?

Samples not working

I built a couple of the samples (Namely Delay and MIDI Sampler) as x64 Release in VS2017, and attempted to load them as VST plugins into VSTHost, FL Studio, and a custom host I made using VST.NET.

On all 3 hosts the plugin failed to load claiming entry point not found.

I have made sure the plugin properly references the VST.NET libraries, and that all DLLs are in the same folder.

I also encountered this same issue when creating my own VST plugin with VST.NET

Error: VST.NET2-Host is not built for the 'AnyCPU' platform.

I've attempted to build the Host sample by adding the VST.NET2-Host NuGet package but i get this message:
.nuget\packages\vst.net2-host\2.0.0-rc2\build\VST.NET2-Host.targets(6,5): Error: VST.NET2-Host is not built for the 'AnyCPU' platform. You need to specify either platform x86 or x64.

I've followed the documentation here: https://obiwanjacobi.github.io/vst.net/GettingStarted.html
I'm wondering if I've missed something.

Thank you for any advice.

To Reproduce
This can be reproduced in a basic console app.

  • dotnet new console
  • Add VST.NET2-Host package.

This is the contents of the csproj file:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp3.1</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="VST.NET2-Host" Version="2.0.0-rc2"/> </ItemGroup> </Project>

Desktop (please complete the following information):
Windows 10

Error when building Jacobi.Vst.Host.Interop

I'm not able to build the project Jacobi.Vst.Host.Interop

Error C1107 could not find assembly 'Microsoft.Extensions.Configuration.FileExtensions.dll': please specify the assembly search path using /AI or by setting the LIBPATH environment variable Jacobi.Vst.Host.Interop C:\Users\frede\Source\Repos\vst.net\Source\Code\Jacobi.Vst.Interop\Bootstrapper.cpp 7

I have downloaded and added a reference to the missing assemby but I got the same error on building.

Command " publish" not found

I try to build my project after adding VST.Net and I got the error:
The command " publish "C:\Users\ngoan\source\repos\RMVN Studio\RMVN Studio\bin\x64\Debug\RMVN Studio.exe" -o "C:\Users\ngoan\source\repos\RMVN Studio\RMVN Studio\bin\x64\Debug\deploy"" exited with code 9009.
It mean command publish not found, so how can I fix it?
It only happend when I add VST.Net library, previous build without VST.Net not contain any error.
Please help me! Btw, sorry for my bad English!

VST3

Your comment in the VST3 section of the code says ** IT FAILED **. The interop looks solid... How did it fail?

`Jacobi.Vst.Samples.Host` error.

Describe the bug

System.AccessViolationException:“Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

To Reproduce

  1. Run Jacobi.Vst.Samples.Host.
  2. Load VST 2 plugin. (Category: Synth; Flags: HasEditor, CanReplacing, ProgramChunks, IsSynth.)
  3. Click Process Noise.

The Audio Input Count is 0 and the Audio Output Count is 2.

Problem loading plugin after updating the project to use VST.NET v2.1.1

My plugin was working fine using VST.NET 2.1.0 and targeting .NET 6.0.
After updating the VST.NET nuget package to 2.1.1 the plugin stops loading in any Host.

I managed to make it work again by targeting .Net 8.0 and
changing the version in the *.runtimeconfig.json file in the "deploy" folder accordingly.

Not sure where the problem is but v2.1.1 seems to be working with .Net 8.0 only.

Problem loading secondary dependencies from deploy/bin

When a plugin has dependent assemblies that are loaded after the initial boot/load sequence of the plugin, they are not found in the deploy/bin location. They are only found when moved to the deploy folder.

(NoteToSelf: Have a sample project to reproduce: VST.NET-DepLoadingProblem.7z)

Poll: What changes for a new version?

I have experimented with getting VST.NET over to dotnet core which looks very promising. So there may be a new version of VST.NET (netcore) on the way!
And just like the dotnet team did in redesigning all the APIs for dotnet core, we can do the same - hopefully making a more intuitive, easier to understand API for this new version.

I am not talking about taking on big new features, more like small tweaks that can be easily and quickly done.

Are there any parts of the existing API you would like to see different?

I have a few of my own but I want to hear what you think and want.

The sample host failed to load plugin

After built the core/framework/interop/sample.host in vc2013 (win7 64 platform).
I tried to add a plugin to test, but it reported: failed to load "xxx" at Jacobi.Vst.Interop.Host.VstUnmanagedPluginContext.Initialize(String plugin)

It seems the LoadLibraryA in VstUnmanagedPluginContext::Initialize failed,
and the GetLastError return 2 (file not found).
Does anyone meet the problem and solve it?
thanks..

unhandled exception from Jacobi.Vst.Host.Interop on ProcessReplacing

When using Jacobi.Vst.Host.Interop from a .NET 5 host to interact with Effect-type VSTs (VST2), in some rare cases (only specific VSTs) calling ProcessReplacing crashes the managed host with an unhandled exception that is impossible to capture and handle from managed code (even the AppDomain.CurrentDomain.UnhandledException handler doesn't grab it) :

"An unhandled exception of type 'System.AccessViolationException' occurred in Jacobi.Vst.Host.Interop.dll
Attempted to read or write protected memory. This is often an indication that other memory is corrupt."

Or, with native code debugging on in Visual Studio:

"Exception thrown at 0x00007FFD0603993D (SynthMaster2FX.dll) in QuikDawEditor.exe: 0xC0000005: Access violation reading location 0x0000000000000054"

To Reproduce
Browsing the code I notice that ProcessReplacing is as follows:

float** ppInputs = inputs->Length == 0 ? _emptyAudio32 : _audioInputs.GetArray(inputs->Length);
float** ppOutputs = outputs->Length == 0 ? _emptyAudio32 : _audioOutputs.GetArray(outputs->Length);
int32_t inputSampleCount = CopyBufferPointers(ppInputs, inputs);
int32_t outputSampleCount = CopyBufferPointers(ppOutputs, outputs);
CallProcess32(ppInputs, ppOutputs, max(inputSampleCount, outputSampleCount));

(that is, without any error handling)

With all the numerous VSTs out there it would seem to be more trouble than it's worth to ferret out the specific cause of each error that a VST might be raising, but if the Vst.Host.Interop dll could simply handle any exceptions that are raised in this method (i.e not crash), it would allow the managed host program to grab the name of the VST so that it could just be ignored in the future.

  • OS: Windows 10
  • .NET Core 5.x

(In case it's useful to mention, the name of one VST that is raising the error is the free plugin "SynthMaster2FX.dll" by KV331 Audio)

Vst.net compatibility problem with Cantabile?

Dear Jacobi,
thanks for your great library. I can't get vsts created with liberia to work with the Cantabile program. I tried to compile the examples in the library, Cantabile recognize the vst but crashes when trying to add it, The same dll with other host (Carla KsStudio) works correctly.

To Reproduce
Steps to reproduce the behavior:
Compile 64bit of a sample Vst of the library
Try to add it to Cantabile Project

Desktop (please complete the following information):

  • OS: Win 7/10
  • Cantabile 4

Less naive methods for copying audio buffers

I've noticed that VstPluginAudioProcessor and VstPluginAudioPrecisionProcessor are copying buffer values one by one. Since the pointers are already exposed, I suggest using Buffer.MemoryCopy():

using System;

// ...

unsafe
{
    float* inputBuffer = this.Buffer;
    float* outputBuffer = ((IDirectBufferAccess32)destination).Buffer;
    Buffer.MemoryCopy(inputBuffer, outputBuffer, this.SampleCount * sizeof(float), this.SampleCount * sizeof(float));
}

Or SIMD, like so:

using System.Runtime.Intristics;
using System.Runtime.Intristics.X86;

// ...

unsafe
{
    float* inputBuffer = this.Buffer;
    float* outputBuffer = ((IDirectBufferAccess32)destination).Buffer;

    int i = 0;
    if (Avx.IsSupported)
         for (; i + 8 <= this.SampleCount; i += 8)
              Avx.Store(outputBuffer + i, Avx.LoadVector256(inputBuffer + i));
    if (Sse2.IsSupported)
         for (; i + 4 <= this.SampleCount; i += 4)
              Sse2.Store(outputBuffer + i, Sse2.LoadVector128(inputBuffer + i));
    for (; i < this.SampleCount; i++)
    {
        outputBuffer[i] = inputBuffer[i];
    }
}

And likewise for doubles, just divide the jumps by 2 (though a simple memory copy would be more useful in this case).

Sending several simultaneous events to VST

Describe the bug
Hello.
I'm trying to create a simple multichannel VST host and found an issue that doesn't allow me to use vst.net properly.
When I'm sending several events at once to pluginContext.PluginCommandStub.ProcessEvents some of the events don't reach the VST plugin. These cause missing notes or notes that sound forever as noteoff event wasn't received. This issue especially hurts on pad tracks where we have a lot of simultaneous notes.
It looks like ProcessEvents doesn't send events immediately to VST plugin, but sometimes keeps these events in some kind of buffer, because when we are sending next events, sometimes missing events are sent too.

To Reproduce
Steps to reproduce the behavior:

  1. Load vst with VstPluginContext.Create(VSTPath, hcs)
  2. Send 4-8 noteon events and after some time the same 4-8 noteoff events using pluginContext.PluginCommandStub.Commands.ProcessEvents(vstEvents)
  3. Sometimes some of notes will stuck

Expected behavior
All events must be passed to VST plugin as soon as received so notes will stop playing properly.

Additional info
Visual studio communiti 2022 v.17.2.2
VST.NET2-Host 2.0.3
midiMonitor x64 1.3

MIDI Events not working properly on most plugins

I'm working on a barebones VST Host, and I've noticed that, after setting up VST.NET and NAudio (using NAudio to handle MIDI data and Audio output), MIDI events are not working correctly on any of my 64bit Plugins except for Serum.

On Image-Line plugins such as Harmor and Sytrus, there is a buzzing note that plays while a midi key is held down, assuming the plugin is already outputting audio. The buzzing note is always F4 regardless of the MIDI note or plugin's note being played.

In FabFilter One, no sound is given
In FabFilter Twin 2, a very very short saw is played

I have tried bypassing NAudio completely and sending note number and velocity directly, I have tried altering the Note length being passed to VstMidiEvent, I have tried altering the NoteOffVelocity being passed as well, both to no effect.

I also managed to reproduce this same issue using perivar's MidiVstTest project, which also uses NAudio and VST.NET

I can only assume this is due to Midi Events being sent in some format that most VSTs do not support.

.NET Core Support

This isn't a bug or issue per se, but .NET Core support would be a really amazing step toward MacOS support, and fixing another one of the biggest gripes that audio developers have with the .NET runtime: garbage collection.

The problem with garbage collection in .NET is that you have no control over it. The garbage collector could come along at any point during some complex computation at snatch the CPU right up from under your nose.

.NET Core looks like it is bringing the support for you to be able control the garbage collector.

http://tooslowexception.com/zero-garbage-collector-for-net-core-2-1-and-asp-net-core-2-1/

https://github.com/dotnet/coreclr/blob/master/Documentation/design-docs/standalone-gc-loading.md

System.NullReferenceException when adding a plugin in Sample Host

I tried 3 different VST plugins in the Sample Host and I got this exception when I click the add button

System.NullReferenceException
HResult=0x80004003
Message=Object reference not set to an instance of an object.
Source=Jacobi.Vst.Host.Interop
StackTrace:
at Jacobi.Vst.Host.Interop.VstUnmanagedPluginContext.Initialize(String pluginPath)
at Jacobi.Vst.Host.Interop.VstPluginContext.Create(String pluginPath, IVstHostCommandStub hostCmdStub)
at Jacobi.Vst.Samples.Host.MainForm.OpenPlugin(String pluginPath) in C:\Users\frede\source\repos\vst.net\Source\Samples\Jacobi.Vst.Samples.Host\MainForm.cs:line 43

This exception was originally thrown at this call stack:
[External Code]
Jacobi.Vst.Samples.Host.MainForm.OpenPlugin(string) in MainForm.cs

License missing

Hi,

I just noticed that the license for vst.net is missing. Using the wayback machine I found out that this library is licensed under the LGPL V2.1 license. Should I create a PR to include the LGPL v2.1 license or do you have plans to change it to something else?

OSX support

Is it possible or somebody tried to implement a cross-platform plugin using the lib? Looks really topical with current net core growing popularity

Could not find nuget package location.

Failed to build my host project after adding the host package.
I tried to look into error details, then i found the command line did not find my correct nuget path.

see:

public static string GetNuGetLocation()

Some time before i moved my package location to D disk because my C disk is too full. It's now on "D:.nuget\packages". So what should i do to make command line recognize the new location?

Single file deployment

Is your feature request related to a problem? Please describe.
A difference between VSt's created with vst.net and other vsts I've seen is that a deployment of a vst.net project requires a significant amount of files (e.g. assembly dlls).

Describe the solution you'd like
In .net 5.0, it seems that single application/single file deployment was improved a lot. Could this be an area to explore further?

vst.net plugin throws ArgumentException when receiving MIDI events

Describe the bug
When I compile the sample MIDI plugin and load it in a DAW, the plugin throws the following exception each time I sent MIDI note data to it:

System.ArgumentException: The specified eventType is not generic (deprecated). (Parameter 'eventType')
   at Jacobi.Vst.Core.Legacy.VstGenericEvent..ctor(VstEventTypes eventType, Int32 deltaFrames, Byte[] data) in C:\Users\[...]\vst.net\Source\Code\Jacobi.Vst.Core\Legacy\VstGenericEvent.cs:line 22
   at TypeConverter.ToManagedEventArray(Vst2Events* pEvents)
   at Jacobi.Vst.Plugin.Interop.PluginCommandProxy.Dispatch(Int32 opcode, Int32 index, Int32 value, Void* ptr, Single opt)

To Reproduce
Steps to reproduce the behavior:

  1. Load sample MIDI plugin (Jacobi.Vst.Samples.MidiNoteMapper.dll) in a DAW (tested with Ableton Live and Bitwig Studio)
  2. Send MIDI data to plugin

Expected behavior
The plugin processes the MIDI data

Desktop (please complete the following information):

  • OS: Windows 10 Pro

Additional context
The sample audio plugin (Jacobi.Vst.Samples.Delay.dll) works as expected.
I tried debugging into the plugin with Visual Studio 2019 after compiling the library code with the Debug configuration, but cannot get any breakpoints to trigger.

Can't create Cubase useable VST plugin with VST.NET in Visual Studio 2017

I would like to use VST.NET with visual studio 2017 to create vst's that I can use in Cubase.

I've tried to create a demo vst without any usefull content just to see if it could open up in Cubase, but Cubase couldn't even recognize the dll file as a vst plugin.

What I did:

  • Created solution in Visual Studio 2017, added 3 projects to solution(Interop, Core, Framework).
  • Added new project via AudioPluginTemplate to solution.
  • Created _vst folder in Interop project, added aeffect.h and aeffectx.h files to it (download from another open source vst plugin, as I couldn't find them in Steinberg VST SDK).
  • Deleted assembly.general and assembly.version from Interop, Core and Framework projects.
  • Deleted all jacobi .snk key files from projects and unchecked sign assembly in all projects under properties.
  • Right click solution -> retarget solution -> OK.
    -Renamed Interop project to MyCustomVST, renamed AudioPluginTemplate project to MyCustomVST.net.
  • Build Core and Framework project.
  • Removed Interop, Core and Framework dependencies from all projects. Re-added dependencies with the newly build dlls.

These 4 projects build in visual studio without error, but I can't use the MyCustomVST.net.dll that was created, it doesn't get recognized as a vst dll with the hosts. I've tested with these vst hosts (vstHost, saviHost, Cubase).

Can you please help me, what am I doing wrong? Do you have a detailed guide to set up a project in visual studio 2017 from scratch for dummies like me?

Jacobi.Vst.Samples.Host loading reacomp-standalone.dll results in NullReferenceException at HostCommandStub.HostCommands.GetCurrentPluginID() Line 203

Describe the bug
I tried loading https://www.reaper.fm/reaplugs/ reacomp-standalone.dll and got the following crash:

System.NullReferenceException
HResult=0x80004003
Message=Object reference not set to an instance of an object.
Source=Jacobi.Vst.Samples.Host
StackTrace:
at Jacobi.Vst.Samples.Host.HostCommandStub.HostCommands.GetCurrentPluginID() in C:\Dev\GitHub\NightVsKnight\vst.net\Source\Samples\Jacobi.Vst.Samples.Host\HostCommandStub.cs:line 203

image

PluginInfo is indeed null.

Note that all of the other reaplug plugins do load. There is just something odd about the reacomp-standalone.dll
image

To Reproduce
Steps to reproduce the behavior:

  1. Install reaplugs https://www.reaper.fm/reaplugs/
  2. Launch Jacobi.Vst.Samples.Host and load C:\Program Files\VSTPlugins\ReaPlugs\reacomp-standalone.dll

Expected behavior
Plugin loads

Desktop:

  • OS: Windows 10 Pro 21H1 19043.1889

I've tried stepping through the code to see where the malfunction is, but so far have not found it...

PluginCommandStub.Commands.EditorGetRect(out Rectangle wndRect) seems to always return Rect(X=0, Y=0, Width=400, Height=300)

Describe the bug
I am so far only using Jacobi.Vst.Samples.Host with https://www.reaper.fm/reaplugs/.
Whenever I show any of their Editors, the returned Rect size is always 400x300.
image

To Reproduce
Steps to reproduce the behavior:

  1. Install https://www.reaper.fm/reaplugs/
  2. Launch Jacobi.Vst.Samples.Host, load any of the plugins
  3. Set a breakpoint at EditorFrame.ShowDialog call to PluginCommandStub.Commands.EditorGetRect
  4. View the plugin's Editor

Expected behavior
The plugin returns the correct Rect size.
I have stepped through the code in OBS Studio and it loads the correct Rect size from all reaplugs.

Actual behavior
Rect size always comes back as Rect(X=0, Y=0, Width=400, Height=300)

Desktop:

  • OS: Windows 10 Pro 21H1 19043.1889

compiling issues

Describe the bug
A clear and concise description of what the bug is.
I can't get the whole application to compile in VS 2019. I get errors.
Severity Code Description Project File Line Suppression State
Error C1083 Cannot open include file: 'pluginterfaces/base/conststringtable.h': No such file or directory Jacobi.Vst3.Interop D:\VSTPlugins2019\vst.net\Source3\Code\Jacobi.Vst3.Interop\usediids.cpp 11

I get these errors for every include file in usediids.cpp.

These header files are from vst3. So, I copied a version of
vst3 into the folder where your code resides.
Still couldn't find them.

I then went to the interop project properties and replaced your
C++ include files with a hard coded path to the location of the
header files on the vst3 libraries.
Still can't seem to find the header files.
Then, I hardcoded the path to the header files in usedidds.cpp.
Then, I get errors that tell me those header files can't find other header
files that they reference internally.

How do I get your stuff to build?

I noticed that the interop project references a lib folder with the header files. But, you did not upload this lib folder.

Thanks.

Bruce Krell

TimeInfo properties not changing specifically in FL Studio

Describe the bug
The time properties provided by the host sequencer's TimeInfo instance (working with the default delay sample, look at AudioProcessor.TimeInfo) do not appear to be changing, even when the song is played

To Reproduce
Steps to reproduce the behavior:
1.) Open any other DAW, I used both Ableton Live 10 Lite and Cantabile 3.0.
2.) Load the plugin as an effect and play some notes, time-based processing works.
3.) Open FL Studio and load the same effect onto a track.
3.) Play some notes, time does not affect processing.

Expected behavior
TimeInfo.PpqPosition and other related properties return what they say they do

Desktop (please complete the following information):

  • OS: Windows 10 Home
  • Browser: Chrome

Additional context
To further explain how I know these values aren't changing, here are some relevant snippets of code from my plugin.

From AudioProcessor.cs:

private float GetBeatProgress() {
        return (float)(TimeInfo.PpqPosition % 1f);
}

From Heart.cs, the class which handles my plugin's logic:

// The result of GetBeatProgress() is passed on as beatProgress
public float ProcessSample(float sample, float beatProgress) {
        float pumpPercent = _parameters.PumpAmtMgr.CurrentValue / 100f;
        float output = sample * pumpPercent * beatProgress;
        return output;
}

This plugin applies a fake sidechain effect to the given signal. This works fine in other DAWs, but FL Studio in particular returns an empty signal. Furthermore, removing the beatProgress multiplier outputs a clean signal. Therefore, beatProgress is somehow kept constant at 0.

VST Host 32/64 bit mixed plugin support

Hi,

is there any documentation or any hints on how to load both 32 and 64 bit VST plugins from a VST.NET host implementation running 64 bit?

My idea was to compile both versions of VST.NET, but then I'd have duplicate namespaces for the assemblies. I might dig deeper into the issue at a later point in time, but any hints are appreciated.

Thanks
Felicia

"[DLL] failed to load!"

Hi, thanks for this great tool.
I'm having some trouble trying to load almost any VST DLL, regardless if it's x86 or x64.

This is for VstPluginContext.Create(). I'm using one of AudioVSTToolbox's applications.

Anything I should know about the type of DLL that the code accepts? I'm trying with Waves and Izotope.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.