Spacechild1 / vstplugin

VST plugin support for Pd and SuperCollider (mirror of https://git.iem.at/pd/vstplugin). If possible, use the issue tracker at https://git.iem.at/pd/vstplugin/-/issues.
Other
84 stars 6 forks source link

vst synth oatmeal ... still troubles ... #6

Closed oliverstotz closed 3 years ago

oliverstotz commented 3 years ago

hi, christof ! it's maybe too esotheric to bother, but i thought i let you know, that even with the latest vstplugin~ release 0.5.2, my beloved OATMEAL synth still not works quite as expected.

The problems are "programs" and preset files (.fxb and .fxp).

1.) Loading a .fxb or .fxp file crashes "host_i386.exe" (asynchronous loading doesn't help). BUT, i can load a preset bank from the plugin GUI itself !

Here's the Windows-Error-Console Problem signature: Problem Event Name: APPCRASH Application Name: host_i386.exe Application Version: 0.0.0.0 Application Timestamp: 61487560 Fault Module Name: host_i386.exe Fault Module Version: 0.0.0.0 Fault Module Timestamp: 61487560 Exception Code: 40000015 Exception Offset: 00153ecc OS Version: 6.1.7601.2.1.0.256.48 Locale ID: 3079 Additional Information 1: 1868 Additional Information 2: 1868a8a245ffec8b520300c015c95144 Additional Information 3: f289 Additional Information 4: f289abbc55485754a339ae0672482c8d

2.) The Synth loads ok in the 32bit version, the (jbridged) 64bit version also loads but the window dimension is wrong (and not adjustable with the "size" messages) 3.) Programs can be set, but the program names are not displayed. I tried "program_list" but i only see the numbers of the program, not the title. When i try the same in MAX with its [vst~] object, names are output correctly when called.

System is Win7 (64bit), PD 0.54.1 (64bit) and vstplugin~ 0.5.2 (from deken)

=======================================================

Please don't lose sleep over it, i can make workarounds for this one synth. All my others seem to work ok so far !

Best

Oliver

Spacechild1 commented 3 years ago

Hi,

1.) Loading a .fxb or .fxp file crashes "host_i386.exe" (asynchronous loading doesn't help). BUT, i can load a preset bank from the plugin GUI itself !

Can't confirm this. Loading preset files works just fine here (Win 7, vstplugin~ 0.5.2), both when run natively on 32-bit Pd and when run in a subprocess.

Can you provide a minimal test patch that triggers the problem, together with the Oatmeal binaries you're using? Just to make sure we're using the same version.

2.) The Synth loads ok in the 32bit version, the (jbridged) 64bit version also loads but the window dimension is wrong

Dunno. At the moment, I just care that it looks correctly with my own plugin bridge :-)

(and not adjustable with the "size" messages)

The "size" message is deactivated for VST2 plugins because their UIs can't be resized programmatically. However, I see how this could be useful to "correct" wrong window dimensions. I have to think about it.

3.) Programs can be set, but the program names are not displayed. I tried "program_list" but i only see the numbers of the program, not the title.

This is a bug in the plugin. Dexed had a similar problem, but they fixed it. Apparently some plugins wouldn't show correct information unless the plugin editor has been created. When I probe new plugins, I don't create the editor, but I might change that...

oliverstotz commented 3 years ago

here's the synth: https://klingt.org/fileservice/downloads/02919187163222714414-OATMEAL.zip

1.) Loading .fxb/.fxp works alright in general, just not on this very synth ;-(

the banks are located in "oatmeal banks" and come in 2 different formats: .omb ("oatmeals" own binary format) and .fxb. both can be loaded from the synth GUI and work as expected.

My "Testpatch" was just the vstplugin~ help patch, and i tried (after opening the plugin and switching on the dsp) to load .fxb AND .fxp files from the subpatch [pd preset]. Both ways "host_i386.exe" crashed as described.

(by the way: the [openpanel] for bank readings misses a bang in its inlet ;-))

2.) Nevermind. The 32bit version works alright so far (which is actually very cool !) 3.) I don't think this bug is at work here, as the editor has been created alright. (if i understood you correctly) As i said, the same plugin displays correct program names in MAX' [vst~] object.

Thanks for all your efforts !

Best

Oliver

Spacechild1 commented 3 years ago

here's the synth: https://klingt.org/fileservice/downloads/02919187163222714414-OATMEAL.zip

Thanks! That's actually the very same version I have. Can you send me a .fxp file that triggers the crash?

3.) I don't think this bug is at work here, as the editor has been created alright. (if i understood you correctly)

The things is that I query the program names in a seperate process when the plugin is first detected. The info is then saved in a cache file. In this probing process, I don't create the editor because we don't really need it and plugins are supposed to work correctly without it. MAX [vst~] probably just queries the program names whenever it loads the plugin.

oliverstotz commented 3 years ago

OK, interesting update !

Loading the jbridged 64bit version of OATMEAL actually DOES give me the program names, but only when called with the "programs_list" message sent from [pd preset] !

([vstpresetbrowser] still produces the "numbers only" list)

Still, .fxb or .fxp files can't be loaded, but this time it's not a crash of the host, but this error message in the console:


vstplugin~: couldn't read bank file 'D:/VST_Plugins/##instruments/oatmeal banks/fxb/core_oatmeal_01_32.fxb': fxBank: too little data


What does this mean ?

Best

Oliver

Spacechild1 commented 3 years ago

vstplugin~: couldn't read bank file 'D:/VST_Plugins/##instruments/oatmeal banks/fxb/core_oatmeal_01_32.fxb': fxBank: too little data

It's not a valid FXB file (missing data). What about FXP files?

oliverstotz commented 3 years ago

To answer the question before: Pick any .fxp file from the folder "oatmeal banks/fxp" i sent you. all of them trigger the crash oof the i386 host

oliverstotz commented 3 years ago

Ahh, i'm always too late ;-)

.fxp files will produce this error:

vstplugin~: couldn't read program file 'D:/VST_Plugins/##instruments/oatmeal banks/fxp/Oatmeal Enjoy My Boat.fxp': fxProgram: wrong chunk size

the strange thing is, that they all work when loaded from the plug's own GUI

Best

Oliver

Spacechild1 commented 3 years ago

FWIW, REAPER also shows Init 01, Init 02, etc. as program names... So let's blame it on Oatmeal :-)


vstplugin~: couldn't read program file 'D:/VST_Plugins/##instruments/oatmeal banks/fxp/Oatmeal Enjoy My Boat.fxp': fxProgram: wrong chunk size

Ok, I think they are just not valid FXP/FXB files... What happens is that Oatmeal writes program/bank files in a wrong format. Oatmeal can read them, but other hosts can't. [vstplugin~] is not the only one, REAPER can't read them, either!

When I was testing, I actually created my own presets and loaded them again - which worked fine (also between Pd and REAPER).

What you can do is load the FXP/FXB files from the Oatmeal GUI and then save them as "proper" FXP/FXB files with [program_write( resp. [bank_write(, so you can load them programatically with [program_read( resp. [bank_read(.


BTW, you found an actual bug. When I was trying to load the corrupted FXP/FXB files with a native Oatmeal, I got the corresponding error message in the console. When I was running it sandboxed/bridged, the subprocess would just crash, as you have observed. I have to fix this.

Spacechild1 commented 3 years ago

I have to fix this.

Done: b0aa9ab

oliverstotz commented 3 years ago

Thanks, Christof ! Yes i can confirm that your suggestion works and is a good way to deal with this problem. Anyway it's an old piece of software that was left "like it is" 15 years ago ... (but it sounds so great ! ;-))

Another question, probably related: In [vstpresetbrowser] you use an extra object [vstplugin~ -n 0 0] to load the plugin a second time to get its program names. Is there a specific reason you do this ?

I noticed, that somes plugins (i tested this only with synths) , when opened in the "main" [vstplugin~] object, don't report the program names (just the numbers), but RE-LOADING the plugin the way you do in your [vstpresetbrowser] abstraction sends out the program names correctly. Can you explain this ?

Thanks a lot for all your help !

Oliver

Spacechild1 commented 3 years ago

In [vstpresetbrowser] you use an extra object [vstplugin~ -n 0 0] to load the plugin a second time to get its program names. Is there a specific reason you do this ?

You can use [vstplugin~] without loading an actual plugin and just obtain info from the plugin dictionary. I just noticed that this isn't really documented.

The advantage is that I can query the programs without "interferring" with the actual [vstplugin~] instance.

I noticed, that somes plugins (i tested this only with synths) , when opened in the "main" [vstplugin~] object, don't report the program names (just the numbers), but RE-LOADING the plugin the way you do in your [vstpresetbrowser] abstraction sends out the program names correctly. Can you explain this ?

One possible explanation is that you are opening a 32-bit plugin by its file name, but the resulting [open <plugin> 1( message (sent throught the right outlet) always contains the plugin name. This message is parsed by the [vstpluginbrowser] abstraction, which might then accidentally pick up another plugin. This can happen if you also have a (pseudo)native version installed, because that would be preferred. I guess the [open( message should use the same symbol that you have passed to the [open( method... I have to think about this.

Anyway, the original issue has been resolved, so I think I can close it.

Spacechild1 commented 3 years ago

I guess the [open( message should use the same symbol that you have passed to the [open( method... I have to think about this.

fa6208fb02738df636dc08c15e6fe8d21a734b4c

You can use [vstplugin~] without loading an actual plugin and just obtain info from the plugin dictionary. I just noticed that this isn't really documented.

757998fdd96968c7273f3c9c04a3e291bee81239