Closed git-moss closed 1 year ago
Hi @git-moss I'm glad this was helpful, and thanks for the additional info. BTW, a while ago I used your scripts that enabled me to use the launchpad with BitWig, and they worked great. Thanks for sharing those :)
I've just been looking into vst3 support on my end, and I haven't figured out how reaper generates the IDs that it stores in the the reaper-vstplugins64.ini
file. Here's what I've learned:
<VST "VST3: #TAuto Filter (Tracktion) (mono)" "#TAuto Filter.vst3" 0 "" 1612217568 {56535441 75746F23 74617574 6F206669} "" 0b1100000000110000111110011100000
<VST "VST3: #TBus Compressor (Tracktion) (mono)" "#TBus Compressor.vst3" 0 "" 96599238 {56535442 436D7023 74627573 20636F6D} "" 0b101110000011111110011000110
<VST "VST3: #TChorus (Tracktion)" "#TChorus.vst3" 0 "" 1465853799 {56535443 686F7223 7463686F 72757300} "" 0b1010111010111110010011101100111
<VST "VST3: #TCompressor (Tracktion)" "#TCompressor.vst3" 0 "" 457774091 {56535443 6F6D7023 74636F6D 70726573} "" 0b11011010010010001010000001011
<VST "VST3i: Zebralette (u-he)" Zebra2.vst3 0 "" 959560201 {D39D5B69 D6AF42FA 12345678 534D4433} "" 0b111001001100011011101000001001
<VST "VST3: RoughRider3 (Audio Damage, Inc.)" RoughRider3.vst3 0 "" 41284627 {ABCDEF01 9182FAEB 41754461 52523330} "" 0b10011101011111010000010011
So my best guess is that it's a 4 byte hashed version of either the Vst::IEditController
ID or Vst::IComponent
ID, (both of which are 16 bytes). I'll update this thread if I find anything else!
Found clues in an older forum post: https://forum.cockos.com/showthread.php?t=202904
But in what form is the ClassID hashed? Is it the hex string?
Justin also confirmed this here: https://askjf.com/index.php?q=6353s
HOWEVER, When I calculate the FNV1a, I am getting different values than the one supplied by reaper!
There's an answer in the forums now: https://forum.cockos.com/showthread.php?p=2590943#post2590943
Thank you, very helpful!
Hi, I wasted several days trying to fill the holes in the VST chunk research :-)
I understand now most of what you call "Block 1-3":
Block 1
4 bytes: For VST2 this is the VST2 ID but what is that for VST3? -> it is the same number as in front of the CLASS_ID in the {} and as noted can be found in Reapers cache but how can it be generated? The plugin does not load correctly if this number is wrong.
4 bytes: This is always 0xFEED5EEE or 0xFEED5EEF. 0xFEED5EEF is only set if it is VST2 and the data is encoded as a VST2-regular chunk.
4 bytes: Number of Inputs
the length of the above array is defined by the number of inputs (so total size is 8*NumInputs bytes)
4 bytes: Number of Outputs
again bitmask array 8 bytes each for outputs this time...
Integer (4bytes): The size of the VST-data in Block 2
Integer (4bytes): Always 0 or 1: 0 is only set if it is VST2 and the data is encoded as a VST2-regular chunk.
Integer (4bytes): No idea so far, the values I found testing with all my plugins are: 100000, 100002, 10000C, 10FFFF
Block 2
The VST-data.
For VST2: The format is either an opaque or regular chunk (FPCh, FxCk). In case of a regular chunk the data has a prefix of 2 integers (8 byte: 0xDEADBEEF, 0xDEADF00D). These need to be removed and are not part of the actual data but they are counted in the VST-data size field.
For VST3: already understood.
Block 3
Hope this helps :-)
If you have any idea about the additional VST3 ID I would be really happy...