HISE Logo Forum
    • Categories
    • Register
    • Login

    Multiple instruments, single project or multiple projects?

    Scheduled Pinned Locked Moved General Questions
    94 Posts 3 Posters 22.2k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • d.healeyD
      d.healey
      last edited by

      The functions only seem to be available for Modulators and Effects, I get a function not found error when attempting export state on a Midi Processor.

      const var script = Synth.getMidiProcessor("Script Processor");
      script.exportState();
      

      Libre Wave - Freedom respecting instruments and effects
      My Patreon - HISE tutorials
      YouTube Channel - Public HISE tutorials

      1 Reply Last reply Reply Quote 0
      • d.healeyD
        d.healey
        last edited by

        I've put together a script using the export and restore state functions that will save all modulators and effects with the preset, the global userPresetData and the panel should be in whichever script is going to have the front interface of course but I've included them all in one script for the purpose of this demo. If we can have these export and restore functions working for scripts too then it will be really easy to use the preset system without having to hard code the saving and loading for each control of each script.

        <?xml version="1.0" encoding="UTF-8"?>
        
        <Processor Type="SynthChain" ID="state test" Bypassed="0" Gain="1" Balance="0"
                   VoiceLimit="64" KillFadeTime="20" IconColour="0" packageName=""
                   views="32.rk1bzA.....C.........LDZg4lakwVL.....PA...." currentView="-1">
          <EditorStates BodyShown="0" Visible="1" Solo="0" Folded="0" InterfaceShown="0"/>
          <ChildProcessors>
            <Processor Type="MidiProcessorChain" ID="Midi Processor" Bypassed="0">
              <EditorStates BodyShown="1" Visible="1" Solo="0" Folded="0"/>
              <ChildProcessors>
                <Processor Type="ScriptProcessor" ID="Script Processor" Bypassed="0" Script="//INCLUDES&#10;&#10;//INIT&#10;Content.setHeight(50);&#10;&#10;// Create a storage panel, hide it, and save it in the preset&#10;const var storagePanel = Content.addPanel(&quot;storagePanel&quot;, 0, 0);&#10;storagePanel.set(&quot;visible&quot;, false);&#10;storagePanel.set(&quot;saveInPreset&quot;, true);&#10;&#10;// Create a global object that will hold the values for the other scripts.&#10;global userPresetData = {};&#10;&#10;// Set the global storage as widget value for the hidden panel.&#10;// Important: this will not clone the object, but share a reference!&#10;storagePanel.setValue(userPresetData);&#10;&#10;const var btnLoad = Content.addButton(&quot;Load Preset&quot;, 150, 10);&#10;const var btnSave = Content.addButton(&quot;Save Preset&quot;, 0, 10);&#10;&#10;const var modulatorIds = [];&#10;const var effectIds = [];&#10;const var modulators = {};&#10;const var effects = {};&#10;&#10;//MODULATORS&#10;//Voice Start&#10;mergeArrays(modulatorIds, Synth.getIdList(&quot;Constant&quot;));&#10;mergeArrays(modulatorIds, Synth.getIdList(&quot;Velocity Modulator&quot;));&#10;mergeArrays(modulatorIds, Synth.getIdList(&quot;Notenumber Modulator&quot;));&#10;mergeArrays(modulatorIds, Synth.getIdList(&quot;Random Modulator&quot;));&#10;mergeArrays(modulatorIds, Synth.getIdList(&quot;Global Voice Start Modulator&quot;));&#10;mergeArrays(modulatorIds, Synth.getIdList(&quot;Array Modulator&quot;));&#10;mergeArrays(modulatorIds, Synth.getIdList(&quot;Script Voice Start Modulator&quot;));&#10;&#10;//Time Variant&#10;mergeArrays(modulatorIds, Synth.getIdList(&quot;LFO Modulator&quot;));&#10;mergeArrays(modulatorIds, Synth.getIdList(&quot;CC Controller&quot;));&#10;mergeArrays(modulatorIds, Synth.getIdList(&quot;Pitch Wheel Modulator&quot;));&#10;mergeArrays(modulatorIds, Synth.getIdList(&quot;Macro Control Modulator&quot;));&#10;mergeArrays(modulatorIds, Synth.getIdList(&quot;Audio File Envelope&quot;));&#10;mergeArrays(modulatorIds, Synth.getIdList(&quot;Global Time Variant Modulator&quot;));&#10;mergeArrays(modulatorIds, Synth.getIdList(&quot;CC Ducker&quot;));&#10;mergeArrays(modulatorIds, Synth.getIdList(&quot;Script Time Variant Modulator&quot;));&#10;&#10;//Envelopes&#10;mergeArrays(modulatorIds, Synth.getIdList(&quot;Simple Envelope&quot;));&#10;mergeArrays(modulatorIds, Synth.getIdList(&quot;AHDSR Envelope&quot;));&#10;mergeArrays(modulatorIds, Synth.getIdList(&quot;Table Envelope&quot;));&#10;mergeArrays(modulatorIds, Synth.getIdList(&quot;Midi CC Attack Envelope&quot;));&#10;mergeArrays(modulatorIds, Synth.getIdList(&quot;Script Envelope Modulator&quot;));&#10;&#10;for (id in modulatorIds)&#10;{&#10;&#9;modulators[id] = Synth.getModulator(id);&#10;}&#10;&#10;//EFFECTS&#10;mergeArrays(effectIds, Synth.getIdList(&quot;Monophonic Filter&quot;));&#10;mergeArrays(effectIds, Synth.getIdList(&quot;Polyphonic Filter&quot;));&#10;mergeArrays(effectIds, Synth.getIdList(&quot;Harmonic Filter&quot;));&#10;mergeArrays(effectIds, Synth.getIdList(&quot;Harmonic Filter Monophonic&quot;));&#10;mergeArrays(effectIds, Synth.getIdList(&quot;Parametric EQ&quot;));&#10;mergeArrays(effectIds, Synth.getIdList(&quot;Stereo FX&quot;));&#10;mergeArrays(effectIds, Synth.getIdList(&quot;Simple Reverb&quot;));&#10;mergeArrays(effectIds, Synth.getIdList(&quot;Simple Gain&quot;));&#10;mergeArrays(effectIds, Synth.getIdList(&quot;Convolution Reverb&quot;));&#10;mergeArrays(effectIds, Synth.getIdList(&quot;Delay&quot;));&#10;mergeArrays(effectIds, Synth.getIdList(&quot;Limiter&quot;));&#10;mergeArrays(effectIds, Synth.getIdList(&quot;Chorus&quot;));&#10;mergeArrays(effectIds, Synth.getIdList(&quot;Phase FX&quot;));&#10;mergeArrays(effectIds, Synth.getIdList(&quot;Gain Collector&quot;));&#10;mergeArrays(effectIds, Synth.getIdList(&quot;Routing Matrix&quot;));&#10;mergeArrays(effectIds, Synth.getIdList(&quot;Saturator&quot;));&#10;mergeArrays(effectIds, Synth.getIdList(&quot;Plugin Wrapper&quot;));&#10;mergeArrays(effectIds, Synth.getIdList(&quot;Script FX&quot;));&#10;&#10;for (id in effectIds)&#10;{&#10;&#9;effects[id] = Synth.getEffect(id);&#10;}&#10;&#10;//FUNCTIONS&#10;inline function mergeArrays(a, b)&#10;{&#10;&#9;for (i = 0; i &lt; b.length; i++) a.push(b[i]);&#10;}&#10;&#10;inline function savePresetData()&#10;{&#10;&#9;for (id in modulators)&#10;&#9;{&#10;&#9;&#9;userPresetData[id] = modulators[id].exportState();&#10;&#9;}&#10;&#10;&#9;for (id in effects)&#10;&#9;{&#10;&#9;&#9;userPresetData[id] = effects[id].exportState();&#10;&#9;}&#10;}&#10;&#10;inline function loadPresetData()&#10;{&#10;&#9;for (id in modulators)&#10;&#9;{&#10;&#9;&#9;modulators[id].restoreState(userPresetData[id]);&#10;&#9;}&#10;&#10;&#9;for (id in effects)&#10;&#9;{&#10;&#9;&#9;effects[id].restoreState(userPresetData[id]);&#10;&#9;}&#10;}&#10;&#10;//CALLBACKS&#10;function onNoteOn()&#10;{&#10;&#9;&#10;}&#10;function onNoteOff()&#10;{&#10;&#9;&#10;}&#10;function onController()&#10;{&#10;&#9;&#10;}&#10;function onTimer()&#10;{&#10;&#9;&#10;}&#10;function onControl(number, value)&#10;{&#10;&#9;if (number == storagePanel)&#10;&#9;{&#10;&#9;&#9;// Replace the global object with the one from the user preset&#10;&#9;&#9;userPresetData = value;&#9;&#10;&#9;}&#10;&#10;&#9;if (number == btnLoad)&#10;&#9;{&#10;&#9;&#9;loadPresetData();&#10;&#9;&#9;number.setValue(0);&#10;&#9;}&#10;&#10;&#9;if (number == btnSave)&#10;&#9;{&#10;&#9;&#9;savePresetData();&#10;&#9;&#9;number.setValue(0);&#10;&#9;}&#10;}">
                  <EditorStates BodyShown="1" Visible="1" Solo="0" contentShown="1" onInitOpen="1"
                                onNoteOnOpen="0" onNoteOffOpen="0" onControllerOpen="0" onTimerOpen="0"
                                onControlOpen="0"/>
                  <ChildProcessors/>
                  <Content>
                    <Control type="ScriptPanel" id="storagePanel" value="JSON{&quot;DefaultEnvelope&quot;: &quot;231.3ocgOtjSBDDDFtZYlXXmtykbDvSf7zDRvjIND22RWjoBEcMYpFLyMfiE2AuHdDrGPFIZL1qp9O0iuurJYIppTAlqWTWhf4lzbZSIiS86PVhIyl.laSmfqra4Pa5n5RqpnCLlNy7AzqTnFLcSfiuOdXXHXWttM4fL3YjQqhsQ6eevbxi1pmDGd4nlql5nfTkGrATASmQhqNuPdyGqSuGdgT5UFO8IWXoopO.iKH1kc1HEhrk8seIm8KdtsrMt+wEVxezu6ROgauEzFr2WMPh++07mrl72r1+BVeTXWyVaZ42bCeBet01m&quot;, &quot;Simple Envelope&quot;: &quot;&quot;, &quot;AHDSR Envelope&quot;: &quot;307.3oc0SFqSCCCDF9LIVHPkR2XsOBkQFPMsIE0JQkhZpX2DaoXgItJ1onr0Wi91vHi7HvVW4Qfj3DR.DRcCpmN+6y286Oc1OQFxTJYBf5rLaECPGiGM0KXALyCP8Lw8mDulIj4mNNaEQoXT.grlEqYwJtNCPmXCkq2GNRqIgO3llrlUIu45S2MziERxZq1J4ZkMyewwnbKKucMIBvTof949WScJKWSBW4DjpzDdbkzaa2dwyKXBFQ8k9gNZBkqkIAZhlo.j0XIMKHR9T9EsvWB2wU76ELyl.oPVDM..2Htf5WSJE.HreC2rMbqGdtjlJH402MpvKE.7Lr4E0eI+w8fde2f1+tAGzxf2jimhpVjxOMKrmdsasWM3++sY6fKmAND3543poyCBv1EW8w4OEse.2rEMXA&quot;, &quot;Table Envelope&quot;: &quot;&quot;, &quot;Midi CC Attack Envelope&quot;: &quot;&quot;, &quot;Simple Gain&quot;: &quot;306.3oc0RFjRDCCEF98l1fHnvnmf4HLEW3RKcpJyhQJFQWJwlfMPljRSJZck2Iu.dj7FnMcZmwAQvkNYU9+eIu78mjrJStvZMU.t2MMkB.OfPkKKUhKYRMLOEvC6Mlz4jzTxrVAGPLny.2OD.H9j2N88Tgh0r1H3k36jbWQuA.udebBSwz4hMVowXv4boyTQcLmvBXPhg2PKLO015.RDbqzJePIVInFkwOaJ.yJjJd1.9V.vvrMgIbUXFSVX30JVa+mULDniHdvmzWQZ1NTy0Ng1JcMqgD93Lbz1PF96PN8aPdgQw8c0ujeBL7G48XR2E6tDvcO76N.Oljw9O7g3ZSsSpebAyUIeFPxU0Kol5pbQKpZsP0dPDbD32ZmdpW6AhJz7Nwmsi9hQdM1WLZnH7EfHC.gs&quot;}"/>
                    <Control type="ScriptButton" id="Load Preset" value="0"/>
                    <Control type="ScriptButton" id="Save Preset" value="0"/>
                  </Content>
                </Processor>
              </ChildProcessors>
            </Processor>
            <Processor Type="ModulatorChain" ID="GainModulation" Bypassed="0" Intensity="1">
              <EditorStates BodyShown="1" Visible="0" Solo="0" Folded="1"/>
              <ChildProcessors/>
            </Processor>
            <Processor Type="ModulatorChain" ID="PitchModulation" Bypassed="1" Intensity="0">
              <EditorStates BodyShown="1" Visible="0" Solo="0" Folded="1"/>
              <ChildProcessors/>
            </Processor>
            <Processor Type="EffectChain" ID="FX" Bypassed="0">
              <EditorStates BodyShown="1" Visible="0" Solo="0" Folded="1"/>
              <ChildProcessors/>
            </Processor>
            <Processor Type="StreamingSampler" ID="Sampler" Bypassed="0" Gain="1" Balance="0"
                       VoiceLimit="128" KillFadeTime="20" IconColour="0" PreloadSize="8192"
                       BufferSize="4096" VoiceAmount="128" SamplerRepeatMode="1.0470319e+09"
                       RRGroupAmount="1" PitchTracking="1" OneShot="0" CrossfadeGroups="0"
                       Purged="0" NumChannels="1" SampleMap="">
              <EditorStates BodyShown="0" Visible="1" Solo="0" MapPanelShown="1" BigSampleMap="1"
                            GainModulationShown="1" CrossfadeTableShown="0"/>
              <ChildProcessors>
                <Processor Type="MidiProcessorChain" ID="Midi Processor" Bypassed="0">
                  <EditorStates BodyShown="1" Visible="0" Solo="0" Folded="1"/>
                  <ChildProcessors/>
                </Processor>
                <Processor Type="ModulatorChain" ID="GainModulation" Bypassed="0" Intensity="1">
                  <EditorStates BodyShown="1" Visible="1" Solo="0" Folded="0"/>
                  <ChildProcessors>
                    <Processor Type="SimpleEnvelope" ID="DefaultEnvelope" Bypassed="0" Intensity="1"
                               Attack="254" Release="20000" LinearMode="1">
                      <EditorStates BodyShown="1" Visible="1" Solo="0"/>
                      <ChildProcessors>
                        <Processor Type="ModulatorChain" ID="Attack Time Modulation" Bypassed="0"
                                   Intensity="1">
                          <EditorStates BodyShown="1" Visible="0" Solo="0" Folded="1"/>
                          <ChildProcessors/>
                        </Processor>
                      </ChildProcessors>
                    </Processor>
                    <Processor Type="AHDSR" ID="AHDSR Envelope" Bypassed="0" Intensity="1" AttackCurve="0.72000003"
                               DecayCurve="1" Attack="12443" AttackLevel="0" Hold="349" Decay="25"
                               Sustain="-5.900001" Release="1">
                      <EditorStates BodyShown="1" Visible="1" Solo="0"/>
                      <ChildProcessors>
                        <Processor Type="ModulatorChain" ID="Attack Time" Bypassed="0" Intensity="1">
                          <EditorStates BodyShown="1" Visible="0" Solo="0" Folded="1"/>
                          <ChildProcessors/>
                        </Processor>
                        <Processor Type="ModulatorChain" ID="Attack Level" Bypassed="0" Intensity="1">
                          <EditorStates BodyShown="1" Visible="0" Solo="0" Folded="1"/>
                          <ChildProcessors/>
                        </Processor>
                        <Processor Type="ModulatorChain" ID="Decay Time" Bypassed="0" Intensity="1">
                          <EditorStates BodyShown="1" Visible="0" Solo="0" Folded="1"/>
                          <ChildProcessors/>
                        </Processor>
                        <Processor Type="ModulatorChain" ID="Sustain Level" Bypassed="0" Intensity="1">
                          <EditorStates BodyShown="1" Visible="0" Solo="0" Folded="1"/>
                          <ChildProcessors/>
                        </Processor>
                        <Processor Type="ModulatorChain" ID="Release Time" Bypassed="0" Intensity="1">
                          <EditorStates BodyShown="1" Visible="0" Solo="0" Folded="1"/>
                          <ChildProcessors/>
                        </Processor>
                      </ChildProcessors>
                    </Processor>
                  </ChildProcessors>
                </Processor>
                <Processor Type="ModulatorChain" ID="PitchModulation" Bypassed="0" Intensity="0">
                  <EditorStates BodyShown="1" Visible="0" Solo="0" Folded="1"/>
                  <ChildProcessors/>
                </Processor>
                <Processor Type="EffectChain" ID="FX" Bypassed="0">
                  <EditorStates BodyShown="1" Visible="1" Solo="0" Folded="0"/>
                  <ChildProcessors>
                    <Processor Type="SimpleGain" ID="Simple Gain" Bypassed="0" Gain="-23.700001"
                               Delay="416.20001" Width="126" Balance="41">
                      <EditorStates BodyShown="1" Visible="1" Solo="0"/>
                      <ChildProcessors>
                        <Processor Type="ModulatorChain" ID="Gain Modulation" Bypassed="0" Intensity="1">
                          <EditorStates BodyShown="1" Visible="0" Solo="0" Folded="1"/>
                          <ChildProcessors/>
                        </Processor>
                        <Processor Type="ModulatorChain" ID="Delay Modulation" Bypassed="0" Intensity="1">
                          <EditorStates BodyShown="1" Visible="0" Solo="0" Folded="1"/>
                          <ChildProcessors/>
                        </Processor>
                        <Processor Type="ModulatorChain" ID="Width Modulation" Bypassed="0" Intensity="1">
                          <EditorStates BodyShown="1" Visible="0" Solo="0" Folded="1"/>
                          <ChildProcessors/>
                        </Processor>
                        <Processor Type="ModulatorChain" ID="Pan Modulation" Bypassed="0" Intensity="1">
                          <EditorStates BodyShown="1" Visible="0" Solo="0" Folded="1"/>
                          <ChildProcessors/>
                        </Processor>
                      </ChildProcessors>
                      <RoutingMatrix NumSourceChannels="2" Channel0="0" Send0="-1" Channel1="1" Send1="-1"/>
                    </Processor>
                  </ChildProcessors>
                </Processor>
                <Processor Type="ModulatorChain" ID="Sample Start" Bypassed="0" Intensity="1">
                  <EditorStates BodyShown="1" Visible="0" Solo="0" Folded="1"/>
                  <ChildProcessors/>
                </Processor>
                <Processor Type="ModulatorChain" ID="Group Fade" Bypassed="0" Intensity="1">
                  <EditorStates BodyShown="1" Visible="0" Solo="0" Folded="1"/>
                  <ChildProcessors/>
                </Processor>
              </ChildProcessors>
              <RoutingMatrix NumSourceChannels="2" Channel0="0" Send0="-1" Channel1="1" Send1="-1"/>
              <channels>
                <channelData enabled="1" level="0" suffix=""/>
              </channels>
              <samplemap ID="" SaveMode="0" RRGroupAmount="1" MicPositions=";"/>
            </Processor>
          </ChildProcessors>
          <RoutingMatrix NumSourceChannels="2" Channel0="0" Send0="-1" Channel1="1" Send1="-1"/>
          <macro_controls>
            <macro name="Macro 1" value="0" midi_cc="-1"/>
            <macro name="Macro 2" value="0" midi_cc="-1"/>
            <macro name="Macro 3" value="0" midi_cc="-1"/>
            <macro name="Macro 4" value="0" midi_cc="-1"/>
            <macro name="Macro 5" value="0" midi_cc="-1"/>
            <macro name="Macro 6" value="0" midi_cc="-1"/>
            <macro name="Macro 7" value="0" midi_cc="-1"/>
            <macro name="Macro 8" value="0" midi_cc="-1"/>
          </macro_controls>
          <MidiAutomation/>
        </Processor>
        

        Libre Wave - Freedom respecting instruments and effects
        My Patreon - HISE tutorials
        YouTube Channel - Public HISE tutorials

        1 Reply Last reply Reply Quote 0
        • Christoph HartC
          Christoph Hart
          last edited by Christoph Hart

          Alright I added the missing functions (along with the functions for restoring synths as a whole).

          I also spent another tool that creates such a Base64 String from the currently selected module (Edit -> Create Base64 string).

          This solution is not yet 100% clean because it recompiles the scripts which is actually not something you want when restoring presets. I'll have to change it so that the string only contains the content values.

          It's commited so feel free to check it out.

          1 Reply Last reply Reply Quote 1
          • d.healeyD
            d.healey
            last edited by

            Awesome, thanks Christoph!

            Libre Wave - Freedom respecting instruments and effects
            My Patreon - HISE tutorials
            YouTube Channel - Public HISE tutorials

            1 Reply Last reply Reply Quote 0
            • Christoph HartC
              Christoph Hart
              last edited by

              Alright, I just commited the improvement for the script processors - it just restores the content values without recompiling the script - the onControl Callbacks get executed of course.

              Check out the example that switches the table values of another script processor:

              HiseSnippet 1271.3ocsW82aZaDF9bRr1h6XpcZ+4jlk+KhRpKNgzjrpoU9QngTf.AhCjtnNi8Y3B19PmOHPp5mj8kbeC1tyFGLAHML0ZIv9d+wcO988dd3nJAaB88wDfvyZLtODH7Ch0G6Q6lqqAxCTLOP3GEKa3SgD4PSYG22v2GZADDV+cbCBatAH35e9irFNFdlvol..cLxDVB4hnSs9Wu88HGmBFVvFH2XQm9sEMwd4vN3AL7rtXJPeCydFcfUL3gslHXHBdqOPHk3d6pR5o09tLppp20db4cerOk.lCHDnGUmkNPPT3eYWBhGagnXRcpAExly0yhsFWuK9VuvkVG4iZ6.4Cz.0YXJzLHWWjiU0nxlO.HrQ0oEw0CKh+rXYjE5d6SKlOOvg7zLhWNEVaVHswLPRaYPp.1whOAKAdBwf2Fgv6Eh0MIn9zod3X6mlXcInKzIXM80ESHw5S9T4gFDYVocHzW92k+fhl19p6gOrcksO3zhoN3zNYJz7lZtYFQ7NXLaPK7Mm99StfY7R8bUR2cDw97rEu8lQEunvnRGyrap2YHkjeLtg8o100apd5I8x+9h0Jz7tKzKea1CqdbCmsq0vZuLW05hiZzplyqK07nVtWnejmY9z4aUwIamyp18t6Jby494yBKzTU8cWVoX5LJ6jPZS9kh1to+lgyRMzKOVMDmszupPuqpwgUS88X3jiuZWU77QuF6Zsum1Eoq2ywnxIoKODZmGiKeBlju69srynhOYXQbNkqeSBo3U6vl.m1naPPFdzxXqANFrMMrNP.wUsCbpwjJSZo7Ljmjh78tU1JX5SHEaExgcaiyhGwlubXOJi0nZXYEYMoRzSJ6Hqkh+Yq2H8pWI+gSqeVk6S9Zonb8g7cY8gDJB5Wffc4wMyr7oDRxxJHJz0W42jUxw2OIq8mdgOrqRBoOOYId0rqg8.OSJB6Ii8pfovy7Rtkzmj1T5yROzis8hbwgHA63.IKxKuhQdjzR5MvsMjrCqn4L.xhis6Z4cGUBzmcCFPsSFxY9PPluT6Z1q2mkX72YY+ROM1uYXgNVfXuhdH5Y8gSTxhJOyYw1Ntooki3VCJCKHrollWxALo4yEelDNKTZfzyymHxD0EAHl3hj38CCpIw+MEv7xWLQzn5ZbkU9uFMwAqSMi1UQNd7Qzwwm4u8xshg38WDW9Fi.r+qhOJM8K+pDoM+2BhwnxMLXveVdbfojJA2VHCNvyWj9FkeH28VjEsKi6t6go1IvPWHpSWJyxgodH6Mb9SDeANIH5jZoRwkitmo0m.6aPfMvUcLFmz2vsuC7bVmZG4vm8qBIYcvl8lii1OrCD3LY6A11PxxTF95pYrLogf3lif+rm19sGRmmotD27zW5uRb+4n5yq07DI+aDR9SDQD3aBBX9emX3yOf1C.VFTCfvwhoOTc1qgm071KqczckFSNHWv3d2bSosa5zxY+vwrur2lG5QgiAOUIjWHVEQM6tXMj0V.wi8N9z0PRsPMjEVBm+.kIDOlsM1jNEraHVn4+2SOtBP4b7.JxqSYCJAMhonUYfac1wyMgLj34Ac74mmdMdaObbJ9XdkoNzyJUzgsm3TiOVXhSsHm.WCSB9ilgaV3ZneefEFl7BN3+lr+ABarrVz1DNtcYmi9ill7BwKYHewYr6JmwdqbFoW4L1eky30qbFGrxYb3ijA+OsjY.E6FRK.f+CjAFVbL
              
              1 Reply Last reply Reply Quote 1
              • d.healeyD
                d.healey
                last edited by

                Thanks, going to build this now :D

                Libre Wave - Freedom respecting instruments and effects
                My Patreon - HISE tutorials
                YouTube Channel - Public HISE tutorials

                1 Reply Last reply Reply Quote 0
                • d.healeyD
                  d.healey
                  last edited by d.healey

                  "(along with the functions for restoring synths as a whole)."
                  Could you tell me a bit more about this?

                  Also I noticed an issue with the script I'd made, if you add a modulator to an envelope and then click the save button, then you remove the modulator and then hit load the saved modulator won't reappear until you add another modulator to the envelope. Playing around with this and changing the values in the modulator etc can also cause HISE to crash and close.

                  Libre Wave - Freedom respecting instruments and effects
                  My Patreon - HISE tutorials
                  YouTube Channel - Public HISE tutorials

                  1 Reply Last reply Reply Quote 0
                  • Christoph HartC
                    Christoph Hart
                    last edited by

                    Just use Synth.getChildSynth() and call the export / restore methods on this object to restore whole sound generators (and even samplers with sample maps).

                    Adding modulators programmatically is a bit difficult because it sometimes doesn't update the interface (if it's of any help, the compiled versions won't have this problem...)

                    I'll need to check this a bit more thoroughly. Can you reproduce a crash with certain steps or is it just random?

                    1 Reply Last reply Reply Quote 1
                    • d.healeyD
                      d.healey
                      last edited by

                      I made a quick video to demonstrate how to cause the crash using the script I posted yesterday. Also how do you post code here so it's on one line like you do? I use the ``` but it's always placed in a large box.

                      Libre Wave - Freedom respecting instruments and effects
                      My Patreon - HISE tutorials
                      YouTube Channel - Public HISE tutorials

                      1 Reply Last reply Reply Quote 0
                      • Christoph HartC
                        Christoph Hart
                        last edited by

                        Thanks, I'll investigate.

                        You are posting XML snippets. If you post HiseSnippets (the ones you get using File -> Export -> Export as Web Snippet), you'll get a String without line breaks which fits nicely in one line...

                        1 Reply Last reply Reply Quote 0
                        • d.healeyD
                          d.healey
                          last edited by

                          Cool, I found another way to crash HISE :) this time I'm using restore and export on childSynths, basically whenever I make a change and hit save and load it crashes. Try adding a container and a sampler to the container and it crashes instantly without having to press any buttons even!

                          HiseSnippet 1184.3ocsV8+SabCE2GvM0KaTsNs+.73mBprzj1xV0XnUR.1xJDh5QQUpppy4NGN2dwNxmu.YH9mX+kt+C1d19tbWBWYDjVDBc980O989X6WeoHfljHjHmu7zoioHmux0eJWE0Ihv3nt6ibdn6wjDEUhshZOcLIIgFhbbV8W0Bb7VCY982+RaRLgGPKDgPmIXAziXiXpBo+wKeEKN9PRH8T1nRV+7W1MPv6HhEo.dV0sIZLI3Sjyo8HZyVwEMgQuHA4zz8YOsg7SsF7m603y9axYGz3iu3T8mnfTojxUmAtibbc9G3mi6AgLkP5qHJJDy0ZKBm5GItfaS8YrD1fXpdQKjOfIq3CEwg5Mu9aTmHVbX+7RXBBhR+hB5p1B525dLKjMSdQg8qMJvEdTtz5rxsAuV2S34TBdqYg2ib8CjrwpBMZr8MYR+LnypDsxe459jmzsWmidy9G3Wql96tmVqifqfpciDp52nryiT02t4l6nUi6Hov9ASvIvdC5r3wDNMdKbDKjhYpsvDdHNgLQu.y3XUDXhjBQpFPMRT3IDYtu80th2EmmNRXnQT8MJavFagaB+A4urTM1puwDaQDLYHINgVoMZvzk22fAvPkLkt3d47Xw.RLVL3iz.E.YhBeAPvwQPyvrClPhSoI3gBoYo.9GrKL0vjF0xbOMgJsoYehh.6qqt1lGepx3Vlc4UNRBjkvyoJa3mEcnTFR41BaCs+cGMVHUDt5m.8rDK13BENHVvoVDYf9V3AoJbRDQp2UR5PJbnIf9c2npblNg0mGv5hRQKZfhejfDNe2ocpRI302vnYVEs01P+oktAMm69ZRPktazLy8bmK4MOcjg5atHKABh4iFPop2bZpOWNClyk28dHj5RZcFrp4NXF9mWHvfrG+3MqcUMuRt9N16KmvByaOsKOjdYcFjzq080CeSuNm18jdlyMc16niZuWmW4WaXJOPwDbrf2SnnmvqaRA3yhZFNrJU5BlTDGSkUoUegq7VbqNrEGPkaY4TF6XCwYRw6t6bm81rlGn2CnXulNNlDPKSSyNMbASEYoX.UanTLxrPScxOW64cCluI463UyCJTKj+LhUVpuSMHOioKzjZ.4C1JTy8qKPkA0PSxCxtmmMyEjdMUqZXook2CXciTCts.ToWpO.aQ5+EvtFt6e9WNpc2d4HvdPqjgBdWNScxX5r0VBYtjlnYDwxhJHfkkZHdUXVgna9bEJ6vO7v0pYlCeoLOasd9yVZhHhEpmSoL2DY3PHmG3969mz6pqsAqbDdXVDrWqXBw5tktZJOBdeQ9rL2sPT55oJBwMe.FFCPDlFSTyOafd1pLEvIz4d8sqtpjvTSKO60RLvPyJGXnUUcf6HbejaelJHpZ7tRE3EZo+ei2rwuV28fgCgahJ.6ZtG9166rVKATdsHUw3meLQIYWBScBu83CC1FPAjvAFZhdRzUzrJ65l505JiOkG1LeL0LkszqcxT1JWIZDIPJ9PfkVpGv6AFI.l3lQl8fY2g03V4LQMtGASc9gf.cg36AjWsGOco83YKsGOeo8X6k1ieXo83GWZOdws3gdD+8RUhQ1iEHz+B3sqkq.
                          

                          Libre Wave - Freedom respecting instruments and effects
                          My Patreon - HISE tutorials
                          YouTube Channel - Public HISE tutorials

                          1 Reply Last reply Reply Quote 0
                          • Christoph HartC
                            Christoph Hart
                            last edited by

                            Alright, thanks. BTW, do you know how to run HISE in debug mode from within Visual Studio?

                            Just change the configuration to Debug in VS2015, compile and it should open a debug instance. If you get a crash there, it stops in the debugger and points to the line of code which causes the crash.

                            This information will vastly improve the efficiency of tracking down those bugs - not that there are any left :)

                            1 Reply Last reply Reply Quote 1
                            • d.healeyD
                              d.healey
                              last edited by

                              That's a good idea, I shall do it :)

                              Libre Wave - Freedom respecting instruments and effects
                              My Patreon - HISE tutorials
                              YouTube Channel - Public HISE tutorials

                              1 Reply Last reply Reply Quote 0
                              • d.healeyD
                                d.healey
                                last edited by

                                Just tried building the debug 64bit and I got this fatal error:
                                "1>D:\HISE Development Builds\HISE-master\projects\standalone\JuceLibraryCode\hi_native_jit.cpp : fatal error C1128: number of sections exceeded object file format limit: compile with /bigobj"

                                The regular standalone 64bit build worked fine though.

                                Libre Wave - Freedom respecting instruments and effects
                                My Patreon - HISE tutorials
                                YouTube Channel - Public HISE tutorials

                                1 Reply Last reply Reply Quote 0
                                • Christoph HartC
                                  Christoph Hart
                                  last edited by

                                  Ah yes, that one. Go to Project -> Properties (Alt+F7) -> C++ -> Command Line and add /bigobj in the
                                  Additional Options box (which should be empty).

                                  This happens because the Debug version creates a bigger intermediate object file before linking it to the executable and your computer is maxed out on RAM for these steps.

                                  1 Reply Last reply Reply Quote 1
                                  • d.healeyD
                                    d.healey
                                    last edited by

                                    With the code I posted a few days ago and the crash I described with the container and sampler the debugger breaks here:
                                    alt text

                                    Using the same code, adding a sampler, making changes, saving and restoring them using my scripted buttons crashes HISE at this point
                                    alt text

                                    I'm really not sure what I need to be looking for in VS it's been many years since I did any work in it and nothing on the scale of HISE so hopefully these images are of some use!

                                    Libre Wave - Freedom respecting instruments and effects
                                    My Patreon - HISE tutorials
                                    YouTube Channel - Public HISE tutorials

                                    1 Reply Last reply Reply Quote 0
                                    • Christoph HartC
                                      Christoph Hart
                                      last edited by

                                      That's what I suspected, thanks for checking this. BTW, if you click on "Break" in the last picture, it should point you to the line (that would be interesting, because the second error is a bit more critical because it wants to read from an object that was already deleted (and even then, it should say 0x0000000005 and not 0xFFFFFFFFF.... :)

                                      1 Reply Last reply Reply Quote 1
                                      • d.healeyD
                                        d.healey
                                        last edited by

                                        Have you found a solution for this crash?

                                        Libre Wave - Freedom respecting instruments and effects
                                        My Patreon - HISE tutorials
                                        YouTube Channel - Public HISE tutorials

                                        1 Reply Last reply Reply Quote 0
                                        • Christoph HartC
                                          Christoph Hart
                                          last edited by

                                          Nope not yet, I got caught up in writing a lossless audio compressor the last days :)

                                          1 Reply Last reply Reply Quote 0
                                          • d.healeyD
                                            d.healey
                                            last edited by

                                            Oh that's even better :) how's it going?

                                            Libre Wave - Freedom respecting instruments and effects
                                            My Patreon - HISE tutorials
                                            YouTube Channel - Public HISE tutorials

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            50

                                            Online

                                            1.7k

                                            Users

                                            11.7k

                                            Topics

                                            102.1k

                                            Posts