HISE Logo Forum
    • Categories
    • Register
    • Login

    Preset (.hip) opens empty

    Scheduled Pinned Locked Moved Bug Reports
    18 Posts 6 Posters 1.4k 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

      So I remade my GUI and closed HISE. Reopened and again it wouldn't load :( I was about to cry lol. Luckily though I'd been saving as an XML instead of a .hip (xml should be default!). I ran the XML through a validator, no issues. Then I ran the UI desktop.xml though a validator and found the problem. I seem to recall coming across this a year or so ago too in a different project.

      The problem was in a previous version of my GUI I'd used a panel as a custom button but in my new version I'd replaced the panel with an actual button control. I'd deleted the panel and given the button the same name the panel previously had. The panel though has a callbacks property which had been assigned to Clicks Only in the XML, but the button has no such property, so when I made the swap =Clicks Only got left behind in the XML for the button and prevented the GUI from loading.

      Anyway of getting HISE to flag this kind of issue?

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

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

        Yes, sure, I'll make sure that illegal properties won't cause more harm than necessary...

        1 Reply Last reply Reply Quote 1
        • ossian1961O
          ossian1961
          last edited by

          I had for a couple of times same issue, luckily I use make a cloned copy inside two other hard disks... it could be quite annoying (without speaking of the moment of panic for having lost the job done).

          https://www.kontakthub.com/label/Imagik-Sound/
          https://mirtklaar.bandcamp.com/

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

            @Christoph-Hart said in Preset (.hip) opens empty:

            I think i need to make a Hip2XML tool so you can see whats wrong.

            I hit this problem again with another project. Can't we just get rid of the .hip format altogether?

            I made a recovery XML but when I tried to load it I got a message about invalid xml. I fixed the invalid tag and tried to load the file into HISE again but it just opens up an empty project as does the .hip.

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

            hisefiloH 1 Reply Last reply Reply Quote 0
            • hisefiloH
              hisefilo @d.healey
              last edited by

              @d-healey I'm facing rhe opposite. Saved a huge xml (3.5mb) and it does not open. .hip does.

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

                @hisefilo said in Preset (.hip) opens empty:

                @d-healey I'm facing rhe opposite. Saved a huge xml (3.5mb) and it does not open. .hip does.

                Did you try validating the xml? - https://xmlvalidation.com/

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

                hisefiloH 2 Replies Last reply Reply Quote 0
                • hisefiloH
                  hisefilo @d.healey
                  last edited by

                  @d-healey nope! Nice one. Will try it tomorrow

                  1 Reply Last reply Reply Quote 0
                  • hisefiloH
                    hisefilo @d.healey
                    last edited by hisefilo

                    @d-healey to be honest this is the only thing I don't feel comfortable with Hise. Never figured out what's the best format to properly save my work.

                    1 Reply Last reply Reply Quote 1
                    • ustkU
                      ustk
                      last edited by

                      Yes I'm a bit lost too with the formats, and the menu is not clear to me neither

                      Can't help pressing F5 in the forum...

                      1 Reply Last reply Reply Quote 0
                      • ustkU
                        ustk
                        last edited by

                        I've seen somewhere in the forum the xml is safer to use compared to the hip
                        In fact I don't know why the hip is made for. I use it in my sand box project so it's easy to test some code whitout loading a new project or xml every time, then when I am ready, I import the code in my main project...

                        I had too many issues with both xml and hip not loading, so I think this way is the safest I found for me at least... but maybe some of you have a safer way to work?

                        Also, everyday or after a big change in the code, I duplicate the entire project and keep 10 days of backups... paranoia… 😁

                        Can't help pressing F5 in the forum...

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

                          Or just use Git.

                          It‘s weird with all projects I did I never had any issues with loading the files so if you find something reproducible let me know.

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

                            The XML recovery isn't working.

                            Here is the .hip file. I had to change the extension to mp3 so it would upload (maybe .hip should be an allowed upload format).

                            irishWhistles.mp3
                            irishwhistles.hip (done ;) )

                            Here is the recovered (invalid) XML. This is missing lots of things.

                            <?xml version="1.0" encoding="UTF-8"?>
                            
                            <Processor Type="SynthChain" ID="irishWhistles" Bypassed="0" Gain="1" Balance="0"
                                       VoiceLimit="64" KillFadeTime="20" IconColour="0" packageName=""
                                       BuildVersion="650">
                              <EditorStates BodyShown="0" Visible="1" Solo="0" Folded="1"/>
                              <ChildProcessors>
                                <Processor Type="MidiProcessorChain" ID="Midi Processor" Bypassed="0">
                                  <EditorStates BodyShown="1" Visible="1" Solo="0" Folded="0"/>
                                  <ChildProcessors>
                                    <Processor Type="ScriptProcessor" ID="Interface" Bypassed="0" Script="/*&#13;&#10;    Copyright 2019 David Healey&#13;&#10;&#13;&#10;    This file is free software: you can redistribute it and/or modify&#13;&#10;    it under the terms of the GNU General Public License as published by&#13;&#10;    the Free Software Foundation, either version 3 of the License, or&#13;&#10;    (at your option) any later version.&#13;&#10;&#13;&#10;    This file is distributed in the hope that it will be useful,&#13;&#10;    but WITHOUT ANY WARRANTY; without even the implied warranty of&#13;&#10;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&#13;&#10;    GNU General Public License for more details.&#13;&#10;&#13;&#10;    You should have received a copy of the GNU General Public License&#13;&#10;    along with This file. If not, see &lt;http://www.gnu.org/licenses/&gt;.&#13;&#10;*/&#13;&#10;&#13;&#10;Content.makeFrontInterface(800, 580);&#13;&#10;&#13;&#10;include(&quot;manifest.js&quot;);&#13;&#10;include(&quot;settings.js&quot;);&#13;&#10;&#13;&#10;Synth.deferCallbacks(true);&#13;&#10;&#13;&#10;Engine.loadFontAs(&quot;{PROJECT_FOLDER}fonts/BLKCHCRY.TTF&quot;, &quot;blackCherry&quot;);&#13;&#10;&#13;&#10;reg i;&#13;&#10;reg lastArticulation = 0;&#13;&#10;&#13;&#10;//Dynamics\breath control&#13;&#10;const var dynamicsCC = Synth.getModulator(&quot;dynamicsCC&quot;);&#13;&#10;const var legato = Synth.getMidiProcessor(&quot;legato&quot;);&#13;&#10;const var knbDynamics = Content.getComponent(&quot;knbDynamics&quot;);&#13;&#10;knbDynamics.setControlCallback(onknbDynamicsControl);&#13;&#10;&#13;&#10;//Dynamics knobs&#13;&#10;inline function onknbDynamicsControl(control, value)&#13;&#10;{&#13;&#10;    dynamicsCC.setAttribute(dynamicsCC.DefaultValue, value);&#13;&#10;    legato.setAttribute(legato.knbBreath, value);&#13;&#10;}&#13;&#10;&#13;&#10;//Settings button&#13;&#10;inline function onbtnSettingsControl(component, value)&#13;&#10;{&#13;&#10;    Content.getComponent(&quot;pnlInstrument&quot;).set(&quot;enabled&quot;, value);&#13;&#10;&#9;Content.getComponent(&quot;fltPreset&quot;).showControl(0);&#13;&#10;&#9;Content.getComponent(&quot;pnlAbout&quot;).showControl(0);&#13;&#10;&#9;Content.getComponent(&quot;btnAbout&quot;).setValue(0);&#13;&#10;&#9;Content.getComponent(&quot;btnPreset0&quot;).setValue(0);&#13;&#10;&#9;Content.getComponent(&quot;pnlSettings&quot;).showControl(1-value);&#13;&#10;};&#13;&#10;&#13;&#10;Content.getComponent(&quot;btnSettings&quot;).setControlCallback(onbtnSettingsControl);&#13;&#10;&#13;&#10;&#13;&#10;//Curve editors&#13;&#10;const var btnCC = [];&#13;&#10;const var tblCC = [];&#13;&#10;&#13;&#10;for (i = 0; i &lt; 4; i++)&#13;&#10;{&#13;&#10;    btnCC[i] = Content.getComponent(&quot;btnCC&quot;+(i+1));&#13;&#10;    btnCC[i].setControlCallback(onbtnCCControl);&#13;&#10;    tblCC[i] = Content.getComponent(&quot;tblCC&quot;+(i+1));&#13;&#10;}&#13;&#10;&#13;&#10;inline function onbtnCCControl(control, value)&#13;&#10;{&#13;&#10;    local idx = btnCC.indexOf(control);&#13;&#10;    &#13;&#10;    local params = [&quot;Expression&quot;, &quot;Dynamics&quot;, &quot;Vibrato Intensity&quot;, &quot;Vibrato Rate&quot;];&#13;&#10;&#13;&#10;    for (i = 0; i &lt; tblCC.length; i++)&#13;&#10;    {&#13;&#10;        tblCC[i].showControl(false);&#13;&#10;        btnCC[i].setValue(false);&#13;&#10;    }&#13;&#10;&#13;&#10;    tblCC[idx].showControl(value);&#13;&#10;    btnCC[idx].setValue(value);&#13;&#10;    &#13;&#10;    //Show velocity table if value is false&#13;&#10;    Content.getComponent(&quot;tblCC0&quot;).showControl(1-value);&#13;&#10;    &#13;&#10;    //Set parameter label&#13;&#10;    if (value == 1)&#13;&#10;        Content.getComponent(&quot;lblParam&quot;).set(&quot;text&quot;, params[idx]);&#13;&#10;    else&#13;&#10;        Content.getComponent(&quot;lblParam&quot;).set(&quot;text&quot;, &quot;Velocity&quot;);&#13;&#10;        &#13;&#10;    //Show velocity dynamics button if dynamics is selected&#13;&#10;    Content.getComponent(&quot;btnVelDynamics&quot;).showControl(idx == 1 &amp;&amp; value == 1);&#13;&#10;    Content.getComponent(&quot;lblVelocityControl&quot;).showControl(idx == 1 &amp;&amp; value == 1);&#13;&#10;}&#13;&#10;&#13;&#10;//About screen&#13;&#10;inline function onbtnAboutControl(component, value)&#13;&#10;{&#13;&#10;    Content.getComponent(&quot;pnlInstrument&quot;).set(&quot;enabled&quot;, 1-value);&#13;&#10;&#9;Content.getComponent(&quot;fltPreset&quot;).showControl(0);&#13;&#10;&#9;Content.getComponent(&quot;pnlAbout&quot;).showControl(value);&#13;&#10;&#9;Content.getComponent(&quot;pnlSettings&quot;).showControl(0);&#13;&#10;&#9;Content.getComponent(&quot;btnSettings&quot;).setValue(1);&#13;&#10;};&#13;&#10;&#13;&#10;Content.getComponent(&quot;btnAbout&quot;).setControlCallback(onbtnAboutControl);&#13;&#10;&#13;&#10;&#13;&#10;//Preset handling&#13;&#10;&#13;&#10;//Get samplers&#13;&#10;const var samplerIds = Synth.getIdList(&quot;Sampler&quot;);&#13;&#10;const var childSynths = {};&#13;&#10;&#13;&#10;for (s in samplerIds)&#13;&#10;{&#13;&#10;    childSynths[s] = Synth.getChildSynth(s);&#13;&#10;}&#13;&#10;&#13;&#10;//Preset buttons&#13;&#10;inline function onbtnPreset0Control(component, value)&#13;&#10;{&#13;&#10;    Content.getComponent(&quot;pnlInstrument&quot;).set(&quot;enabled&quot;, 1-value);&#13;&#10;&#9;Content.getComponent(&quot;fltPreset&quot;).showControl(value);&#13;&#10;&#9;Content.getComponent(&quot;pnlAbout&quot;).showControl(0);&#13;&#10;&#9;Content.getComponent(&quot;btnAbout&quot;).setValue(0);&#13;&#10;&#9;Content.getComponent(&quot;pnlSettings&quot;).showControl(0);&#13;&#10;&#9;Content.getComponent(&quot;btnSettings&quot;).setValue(1);&#13;&#10;};&#13;&#10;&#13;&#10;Content.getComponent(&quot;btnPreset0&quot;).setControlCallback(onbtnPreset0Control);&#13;&#10;&#13;&#10;inline function loadAdjacentPreset(control, value)&#13;&#10;{&#13;&#10;    if (value == 1)&#13;&#10;    {&#13;&#10;        local idx = btnPreset.indexOf(control);&#13;&#10;        idx == 0 ? Engine.loadPreviousUserPreset(false) : Engine.loadNextUserPreset(false);&#13;&#10;        Content.getComponent(&quot;lblPreset&quot;).set(&quot;text&quot;, Engine.getCurrentUserPresetName());&#13;&#10;    }&#13;&#10;}&#13;&#10;&#13;&#10;const var btnPreset = [];&#13;&#10;btnPreset[0] = Content.getComponent(&quot;btnPreset1&quot;).setControlCallback(loadAdjacentPreset);&#13;&#10;btnPreset[1] = Content.getComponent(&quot;btnPreset2&quot;).setControlCallback(loadAdjacentPreset);&#13;&#10;&#13;&#10;//Patch selection and loading drop down&#13;&#10;const var cmbPatches = Content.getComponent(&quot;cmbPatches&quot;);&#13;&#10;cmbPatches.setControlCallback(oncmbPatchesControl);&#13;&#10;&#13;&#10;inline function oncmbPatchesControl(control, value)&#13;&#10;{&#13;&#10;    local patch = control.getItemText();&#13;&#10;&#13;&#10;    colourKeys(patch);&#13;&#10;    loadSampleMaps(patch);&#13;&#10;    &#13;&#10;    if(Engine.getCurrentUserPresetName() == &quot;&quot;)&#13;&#10;        Content.getComponent(&quot;lblPreset&quot;).set(&quot;text&quot;, &quot;Default&quot;);&#13;&#10;    else&#13;&#10;        Content.getComponent(&quot;lblPreset&quot;).set(&quot;text&quot;, Engine.getCurrentUserPresetName());&#13;&#10;}&#13;&#10;&#13;&#10;//Populate patch selection drop down&#13;&#10;const var patches = [];&#13;&#10;&#13;&#10;for (k in Manifest.patches)&#13;&#10;{&#13;&#10;    patches.push(k);&#13;&#10;}&#13;&#10;&#13;&#10;cmbPatches.set(&quot;items&quot;, patches.join(&quot;\n&quot;));&#13;&#10;&#13;&#10;inline function colourKeys(patch)&#13;&#10;{&#13;&#10;    local range = Manifest.patches[patch].range;&#13;&#10;&#13;&#10;    for (i = 0; i &lt; 127; i++)&#13;&#10;    {&#13;&#10;        if (i &gt;= range[0] &amp;&amp; i &lt;= range[1])&#13;&#10;        {&#13;&#10;            Engine.setKeyColour(i, Colours.withAlpha(Colours.white, 0.0)); //Light key colour&#13;&#10;        }&#13;&#10;        else&#13;&#10;        {&#13;&#10;            Engine.setKeyColour(i, Colours.withAlpha(Colours.black, 0.5)); //Dark key colour&#13;&#10;        }&#13;&#10;    }&#13;&#10;}&#13;&#10;&#13;&#10;inline function loadSampleMaps(patch)&#13;&#10;{&#13;&#10;    local sampleMaps = Sampler.getSampleMapList();&#13;&#10;&#13;&#10;    for (id in samplerIds) //Each sampler&#13;&#10;    {&#13;&#10;      //A sample map for this patch was found or sampler is transition sampler&#13;&#10;      if (sampleMaps.contains(patch + &quot;_&quot; + id) || id == &quot;transitions&quot;)&#13;&#10;      {&#13;&#10;        childSynths[id].setBypassed(false); //Enable sampler&#13;&#10;&#13;&#10;        if (id == &quot;transitions&quot;)&#13;&#10;        {&#13;&#10;            childSynths[id].asSampler().loadSampleMap(patch + &quot;_staccato&quot;); //Load staccato sample map&#13;&#10;        }&#13;&#10;        else&#13;&#10;        {&#13;&#10;            childSynths[id].asSampler().loadSampleMap(patch + &quot;_&quot; + id); //Load the sample map&#13;&#10;        }&#13;&#10;      }&#13;&#10;      else&#13;&#10;      {&#13;&#10;        childSynths[id].setBypassed(true); //Bypass sampler&#13;&#10;        childSynths[id].asSampler().loadSampleMap(&quot;empty&quot;); //Load empty sample map for this sampler&#13;&#10;      }&#13;&#10;    }&#13;&#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;&#10;}&#10;">
                                      <EditorStates BodyShown="1" Visible="1" Solo="0" contentShown="1" onInitOpen="1"/>
                                      <ChildProcessors/>
                                      <Content>
                                        <Control type="ScriptSlider" id="knbRel" value="250"/>
                                        <Control type="ScriptSlider" id="knbStacc" value="-2.9999986"/>
                                        <Control type="ScriptButton" id="btnBreath" value="0"/>
                                        <Control type="ScriptButton" id="btnRR" value="0"/>
                                        <Control type="ScriptLabel" id="lblVelocityControl" value="Velocity Control"/>
                                        <Control type="ScriptButton" id="btnVelDynamics" value="0"/>
                                        <Control type="ScriptSlider" id="knbExpression" value="127"/>
                                        <Control type="ScriptSlider" id="knbDynamics" value="127"/>
                                        <Control type="ScriptSlider" id="knbVibIntensity" value="16"/>
                                        <Control type="ScriptSlider" id="knbVibratoRate" value="90"/>
                                        <Control type="ScriptButton" id="btnCC1" value="0"/>
                                        <Control type="ScriptButton" id="btnCC2" value="0"/>
                                        <Control type="ScriptButton" id="btnCC3" value="0"/>
                                        <Control type="ScriptButton" id="btnCC4" value="0"/>
                                        <Control type="ScriptLabel" id="lblParam" value="Velocity"/>
                                        <Control type="ScriptTable" id="tblCC0" value="127" data="24...............vO...f+....9C...vO"/>
                                        <Control type="ScriptTable" id="tblCC1" value="23" data="24...............vO...f+....9C..3rO"/>
                                        <Control type="ScriptTable" id="tblCC2" value="0" data="36...............vO....+PMvd6C..3rO...f+....9C..jwO"/>
                                        <Control type="ScriptTable" id="tblCC3" value="0" data="24...............vO...f+....9C..jwO"/>
                                        <Control type="ScriptTable" id="tblCC4" value="0" data="24...............vO...f+....9C..nqO"/>
                                        <Control type="ScriptSlider" id="knbGain" value="1.4901161e-06"/>
                                        <Control type="ScriptSlider" id="knbPan" value="0"/>
                                        <Control type="ScriptSlider" id="knbCoarse" value="0"/>
                                        <Control type="ScriptSlider" id="knbFine" value="0"/>
                                        <Control type="ScriptLabel" id="lblPreset" value="Default"/>
                                        <Control type="ScriptComboBox" id="cmbPatches" value="1"/>
                                        <Control type="ScriptSlider" id="knbTransition" value="-11.999999"/>
                                      </Content>
                                      <UIData>
                                        <ContentProperties DeviceType="Desktop">
                                          <Component type="ScriptImage" id="imgBgEmpty" x="0" y="0" width="800" height="600"
                                                     fileName="{PROJECT_FOLDER}Background_empty.png" scale=".5" text="imgBlankBg"/>
                                          <Component type="ScriptPanel" id="pnlInstrument" x="0" y="0" width="800"
                                                     height="580" itemColour="0" itemColour2="0" bgColour="0" textColour="0"
                                                     borderSize="0">
                                            </>
                                          </Component>
                                        </ContentProperties>
                                      </UIData>
                                    </Processor>
                                  </ChildProcessors>
                                </Processor>
                              </ChildProcessors>
                            </Processor>
                            

                            The recovery file is written to the presets folder but when you use File >> Open XML it defaults to the XmlPresetBackups folder, so maybe that would be a better location to place the recovery xml.

                            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

                            54

                            Online

                            1.7k

                            Users

                            11.7k

                            Topics

                            101.8k

                            Posts