Builder InterfaceTypes
-
@David-Healey yep as you see above - meanwhile where is all this documentation hidden?
-
@Lindon Only doc I'm aware of: https://docs.hise.audio/scripting/scripting-api/builder/index.html
And the auto-complete, and this thread.
-
@David-Healey so how did you know this?
@Lindon Shouldn't the chain index be Midi rather than Direct? -
@Lindon I posted it higher up in this thread when you asked a related question

Now how did Dave of the past know this... according to my previous post it's in the auto complete.
-
D David Healey referenced this topic
-
@Lindon Do you find the HISE crashes often when using the builder? I stopped using it because I was getting crashes with almost every compile.
-
@David-Healey not at the moment...seems to work OK
-
@Lindon I'm connecting to a lot of external scripts, that might be the issue
-
@David-Healey yeah maybe , meanwhile the feckinn autocomplete is a pile of doggy do...
-
-
@David-Healey it works sometimes and the on others fails completely - only showing me the list of variables I'm using in my script.... its really really crap.
-
@Lindon I find if you add a new object the autocomplete won't show anything relevant to it until you hit compile.
-
@David-Healey yeah that I know, but this is a the same builder object oi have been using to build everything else with.....
-
@Lindon ok here I am AGAIN, 3 times in one day....
So does anyone know the correct Chain Index for the SampleStart modulation , not in the documentation(duh) and not showing up in the auto complete....
-
@Lindon I don't see one

There isn't one for group xf, mix modulation, or some others either.
I wonder if this is what Direct is for.
-
@David-Healey yeah - Im begingng to think this Builder stuff is a bit pointless - if its not all there then its not saving anything in the end.
-
@Lindon you can always lookup the chain index by inspecting the XML:
<Processor Type="StreamingSampler" ID="Sampler" Bypassed="0" Gain="1.0" Balance="0.0" VoiceLimit="256.0" KillFadeTime="20.0" IconColour="0" PreloadSize="8192.0" BufferSize="4096.0" VoiceAmount="256.0" SamplerRepeatMode="3.0" RRGroupAmount="1.0" PitchTracking="1.0" OneShot="0.0" CrossfadeGroups="0.0" Purged="0.0" Reversed="0.0" NumChannels="1" UseStaticMatrix="0.0" LowPassEnvelopeOrder="0.0" Group0Table="" Group1Table="" Group2Table="" Group3Table="" Group4Table="" Group5Table="" Group6Table="" Group7Table="" SampleMapID=""> <EditorStates BodyShown="1" Visible="1" Solo="0" MapPanelShown="1" BigSampleMap="1" GainModulationShown="1"/> <ChildProcessors> <Processor Type="MidiProcessorChain" ID="Midi Processor" Bypassed="0"> <EditorStates BodyShown="1" Visible="0" Solo="0"/> <ChildProcessors/> </Processor> <Processor Type="ModulatorChain" ID="GainModulation" Bypassed="0" Intensity="1.0"> <EditorStates BodyShown="1" Visible="0" Solo="0"/> <ChildProcessors> <Processor Type="SimpleEnvelope" ID="DefaultEnvelope" Bypassed="0" Monophonic="0.0" Retrigger="1.0" Intensity="1.0" Attack="5.0" Release="10.0" LinearMode="1.0"> <EditorStates BodyShown="1" Visible="1" Solo="0"/> <ChildProcessors> <Processor Type="ModulatorChain" ID="Attack Time Modulation" Bypassed="0" Intensity="1.0"> <EditorStates BodyShown="1" Visible="0" Solo="0"/> <ChildProcessors/> </Processor> </ChildProcessors> </Processor> </ChildProcessors> </Processor> <Processor Type="ModulatorChain" ID="PitchModulation" Bypassed="0" Intensity="0.0"> <EditorStates BodyShown="1" Visible="0" Solo="0"/> <ChildProcessors/> </Processor> <Processor Type="EffectChain" ID="FX" Bypassed="0"> <EditorStates BodyShown="1" Visible="0" Solo="0"/> <ChildProcessors/> </Processor> <Processor Type="ModulatorChain" ID="Sample Start" Bypassed="0" Intensity="1.0"> <EditorStates BodyShown="1" Visible="0" Solo="0"/> <ChildProcessors/> </Processor> <Processor Type="ModulatorChain" ID="Group Fade" Bypassed="0" Intensity="1.0"> <EditorStates BodyShown="1" Visible="0" Solo="0"/> <ChildProcessors/> </Processor> </ChildProcessors> <RoutingMatrix NumSourceChannels="2" Channel0="0" Send0="-1" Channel1="1" Send1="-1"/> <channels> <channelData enabled="1" level="0.0" suffix=""/> </channels> </Processor>SampleStart => 4th child processor =>
4.const var b = Synth.createBuilder(); const var sampler = b.create(b.SoundGenerators.StreamingSampler, "Sampler", 0, -1); const var SAMPLE_START_MOD_INDEX = 4; b.create(b.Modulators.Velocity, "VeloSampleStart", sampler, SAMPLE_START_MOD_INDEX); b.flush();Im begingng to think this Builder stuff is a bit pointless - if its not all there then its not saving anything in the end.
I would say 99% of the functionality is there - I'm building the full Triaz module tree with the builder including hardcoded FX modules, loading custom script processors, etc. It's just that the current docs are a bit sparse and you need to know secret tricks like this one but that is solved with the glory of the new upcoming docs.
-
Just a quick question without polluting the thread to much.
Is this what I need if:
- I want to create predefined modules only in "dev mode" (meaning I can use a macro processor during development and disable it before export)
- I want to add scripts to those modules (they would be scriptFX that are using their
processcallback) - add/remove corresponding buttons on the interface
The rationale behind this is to dynamically create a set of tools (modules + scripts + components) that are helping me during development then throw everything away before export with a simple macro (or uncommenting an included file which is about the same)
-
If in doubt, add the thing manually, and fish the info out of the xml. I've got a tree builder namespace for my plugin, that builds the entire module tree to the spec I've laid out. It is pretty cool and powerful once you get your head around it. But I don't blame you for the confusion; took me a while to understand!
Now... SampleStart .... no... it doesn't seem to exist in the builder from memory. I'm sure I reported this before.
The most confusing thing is getting your head around the chain indexes. I wish the API was a bit nicer for that. It also is very crashy.
namespace BuilderModuleTree { const builder = Synth.createBuilder(); inline function buildModuleTree() { builder.clear(); // Build stuff here - in my plugin, I have other namespaces like BuilderModuleTreeEffects and BuilderModuleTreeSamplers for example. builder.flush(); } } -
Also, worth remembering... a compiled plugin CANNOT use the builder - at least for the most part. So what I've also got is a PluginStateData namespace, which maintains a key:value dictionary of module id's to module references. This runs on plugin instantiation, retrieves all of the actual object references, and stores them in a const dictionary.
You should only use the builder to build the module tree. You should not use it for retrieving or storing id's or object references.
