Builder InterfaceTypes
-
@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.