Next VST spec & render time quality ?

DSP, Plugin and Host development discussion.
RELATED
PRODUCTS

Post

aciddose wrote:can you post the output file for wavelab? it would help by showing what causes the crash to happen.
It didn't output one. It crashes when I select it on the plugin list.

Post

aciddose wrote:when i keep saying "offline" i mean when rendering a file from the plugin rather than sending the output to a audio output device. you know like when you do export->audio.

the "offline" processing functions in vst are for effects like you see in wave editors.
I did realise this. I was simply wondering why processlevel "isn't supported" by SX3. I thought maybe they force the offline API for correct functionality and host-plugin communication during rendering..

Post

http://xhip.cjb.net/temp/hosttester.dll

it shouldnt crash now. i gave it inputs, outputs, a program and a parameter. it copies the inputs to the outputs and calls getprocesslevel inside the process functions. i changed it to only report on getprocesslevel if the process level changes.

tell me what this tells you... if cubase doesnt respond with a nonzero value either i'm doing something very wrong or cubase doesnt even support a basic vst feature.

Post

Looking a whole lot better.

seems it needs to get called under process.

wavelab playback, and one render:
opcode effSetSampleRate (10) index 0 value 0 ptr 0 opt 44100.000000
opcode effSetBlockSize (11) index 0 value 2048 ptr 0 opt 0.000000
opcode effOpen (0) index 0 value 0 ptr 0 opt 0.000000
opcode effSetBlockSize (11) index 0 value 2048 ptr 0 opt 0.000000
opcode effGetProgramName (5) index 0 value 0 ptr 46747312 opt 0.000000
opcode effSetSpeakerArrangement (42) index 0 value 50656376 ptr 50657280 opt 0.000000
opcode effSetSampleRate (10) index 0 value 0 ptr 0 opt 44100.000000
opcode effGetParamName (8) index 0 value 0 ptr 50657616 opt 0.000000
opcode effGetParamLabel (6) index 0 value 0 ptr 50657616 opt 0.000000
opcode effSetProgramName (4) index 0 value 0 ptr 46748960 opt 0.000000
opcode effGetParamDisplay (7) index 0 value 0 ptr 46748109 opt 0.000000
opcode effGetProgram (3) index 0 value 0 ptr 0 opt 0.000000
opcode effGetProgramName (5) index 0 value 0 ptr 55770160 opt 0.000000
opcode effGetParamDisplay (7) index 0 value 0 ptr 46748109 opt 0.000000
opcode effGetProgram (3) index 0 value 0 ptr 0 opt 0.000000
opcode effGetProgramName (5) index 0 value 0 ptr 55770180 opt 0.000000
opcode effMainsChanged (12) index 0 value 1 ptr 0 opt 0.000000
getCurrentProcessLevel() inside resume() - returned [0]
getCurrentProcessLevel() inside process() - returned [0]
opcode effMainsChanged (12) index 0 value 0 ptr 0 opt 0.000000
opcode effGetProgramName (5) index 0 value 0 ptr 46785776 opt 0.000000
opcode effGetProgramName (5) index 0 value 0 ptr 46747312 opt 0.000000
opcode effClose (1) index 0 value 0 ptr 0 opt 0.000000
SX3 idle, playback and one render:
opcode effIdentify (22) index 0 value 0 ptr 0 opt 0.000000
opcode effGetPlugCategory (35) index 0 value 0 ptr 0 opt 0.000000
opcode effSetSampleRate (10) index 0 value 0 ptr 0 opt 44100.000000
opcode effSetBlockSize (11) index 0 value 2048 ptr 0 opt 0.000000
opcode effOpen (0) index 0 value 0 ptr 0 opt 0.000000
opcode effCanDo (51) index 0 value 0 ptr "bypass" opt 0.000000
opcode effSetPanLaw (74) index 0 value 1 ptr 0 opt 1.000000
opcode effGetProgram (3) index 0 value 0 ptr 0 opt 0.000000
opcode effGetVstVersion (58) index 0 value 0 ptr 0 opt 0.000000
opcode effGetProgramNameIndexed (29) index 0 value -1 ptr 1242084 opt 0.000000
opcode effGetProgramName (5) index 0 value 0 ptr 1242064 opt 0.000000
opcode effGetProgram (3) index 0 value 0 ptr 0 opt 0.000000
opcode effCanDo (51) index 0 value 0 ptr "midiProgramNames" opt 0.000000
opcode effMainsChanged (12) index 0 value 1 ptr 0 opt 0.000000
getCurrentProcessLevel() inside resume() - returned [0]
opcode effCanDo (51) index 0 value 0 ptr "sendVstMidiEvent" opt 0.000000
opcode effMainsChanged (12) index 0 value 0 ptr 0 opt 0.000000
opcode effGetParamName (8) index 0 value 0 ptr 1242232 opt 0.000000
opcode effGetParameterProperties (56) index 0 value 0 ptr 1242388 opt 0.000000
opcode effGetVstVersion (58) index 0 value 0 ptr 0 opt 0.000000
opcode effSetSpeakerArrangement (42) index 0 value 232005888 ptr 232006128 opt 0.000000
opcode effMainsChanged (12) index 0 value 1 ptr 0 opt 0.000000
opcode effCanDo (51) index 0 value 0 ptr "sendVstMidiEvent" opt 0.000000
opcode effCanDo (51) index 0 value 0 ptr "LiveWithoutToolbar" opt 0.000000
opcode effString2Parameter (27) index 0 value 0 ptr 0 opt 0.000000
opcode effGetParamDisplay (7) index 0 value 0 ptr 1241304 opt 0.000000
opcode effGetParamName (8) index 0 value 0 ptr 1241444 opt 0.000000
opcode effGetParamLabel (6) index 0 value 0 ptr 1241444 opt 0.000000
opcode effGetParamDisplay (7) index 0 value 0 ptr 1240972 opt 0.000000
opcode effStartProcess (71) index 0 value 0 ptr 0 opt 0.000000
getCurrentProcessLevel() inside process() - returned [0]
opcode effStopProcess (72) index 0 value 0 ptr 0 opt 0.000000
opcode effStartProcess (71) index 0 value 0 ptr 0 opt 0.000000
getCurrentProcessLevel() inside process() - returned [4]
opcode effStopProcess (72) index 0 value 0 ptr 0 opt 0.000000
opcode effStartProcess (71) index 0 value 0 ptr 0 opt 0.000000
getCurrentProcessLevel() inside process() - returned [0]
opcode effStopProcess (72) index 0 value 0 ptr 0 opt 0.000000
opcode effClose (1) index 0 value 0 ptr 0 opt 0.000000

Post

so wavelab does not support it, and cubase only returns 4 while rendering a file, and it doesnt return other values like it should..

0 = not supported

i wonder what would be returned from inside an idle() call.

i guess it is pretty useless other than for simply calling from inside process() to see if it is being called with the intention of rendering a file or not.. i mean if you're already in process() it means the host is in the process thread.. if you're in editor->idle, it means you're in the gui thread. if you're in idle().. it means?.. well, it probably doesnt matter much anyway.

atleast it works to show which hosts support processclass 4.

i notice this:

Code: Select all

opcode effSetSampleRate (10) index 0 value 0 ptr 0 opt 44100.000000
opcode effSetBlockSize (11) index 0 value 2048 ptr 0 opt 0.000000
opcode effOpen (0) index 0 value 0 ptr 0 opt 0.000000
perhaps calling in that order is better. i'd really like to see what a lot more hosts do.

Post

aciddose wrote:so wavelab does not support it, and cubase only returns 4 while rendering a file, and it doesnt return other values like it should..

0 = not supported

i wonder what would be returned from inside an idle() call.
Yeah, stupidly enough wavelab doesn't seem to support it. It's *especially* stupid since everything gets committed in wavelab using the 'render' button.

I think only modes 0 and 4 are significant, and that's why we don't see the other modes used anywhere. Looking at the list the rest of the modes seem quite obsolete.

Post

actually, i think they may be more important on mac.

this is the problem with vst, there is no good documentation anywhere about this stuff. :/

Post

indeed. the lack of standardisation is appalling. One can easily blame most of the host vs. plugin related compatibility problems on that.

Keep the developers guessing, eh, Steinberg?

Post

hmm, maybe i'm not 100% sure what this thread is sbout, but the steinberg reverb plugin roomworks for nuendo has got a nice button that says "export", it makes the plug automatically switch to "0% efficiency" (how much CPU the plug is eating) during export... so that you can use an efficient but not-so-good-sounding reverb when working, but still get full reverb quality when rendering without having to do anything but making sure the export button is toggled :)

Post Reply

Return to “DSP and Plugin Development”