HISE Logo Forum
    • Categories
    • Register
    • Login

    Zimmer Bend

    Scheduled Pinned Locked Moved Presets / Scripts / Ideas
    2 Posts 2 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 d.healey

      A little script that bends all held notes to a specified pitch as a selected controller is moved - inspired by something Hans Zimmer mentioned in his masterclass.

      <?xml version="1.0" encoding="UTF-8"?>
      
      <Processor Type="SynthChain" ID="Zimmer Bend Demo" Bypassed="0" Gain="1"
                 Balance="0" VoiceLimit="128" KillFadeTime="20" IconColour="0"
                 packageName="" views="32.rk1bzA.....A.........DC.g4lakwF.P+Ag77W...."
                 currentView="-1">
        <EditorStates BodyShown="0" Visible="1" Solo="0" Folded="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="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="SineSynth" ID="Sine Wave Generator" Bypassed="0" Gain="0.25"
                     Balance="0" VoiceLimit="128" KillFadeTime="20" IconColour="0"
                     OctaveTranspose="0" SemiTones="0" UseFreqRatio="0" CoarseFreqRatio="1"
                     FineFreqRatio="0" SaturationAmount="0.31999999">
            <EditorStates BodyShown="1" Visible="1" Solo="0" GainModulationShown="1" Folded="0"/>
            <ChildProcessors>
              <Processor Type="MidiProcessorChain" ID="Midi Processor" Bypassed="0">
                <EditorStates BodyShown="1" Visible="1" Solo="0" Folded="0"/>
                <ChildProcessors>
                  <Processor Type="ScriptProcessor" ID="Zimmer Bend" Bypassed="0" Script="//INIT&#10;reg i;&#10;reg interval;&#10;reg events = Engine.createMidiList();&#10;reg intervals = Engine.createMidiList();&#10;&#10;const var noteNames = [];&#10;const var Ccs = [];&#10;&#10;const var cmbTarget = Content.addComboBox(&quot;Target&quot;, 0, 10);&#10;const var btnRandom = Content.addButton(&quot;Randomise&quot;, 150, 10);&#10;const var cmbCC = Content.addComboBox(&quot;Controller&quot;, 300, 10);&#10;&#10;for (i = 0; i &lt; 128; i++)&#10;{&#10;&#9;noteNames.push(Engine.getMidiNoteName(i));&#10;&#9;Ccs.push(i);&#10;}&#10;&#10;cmbTarget.set(&quot;items&quot;, noteNames.join(&quot;\n&quot;));&#10;cmbCC.set(&quot;items&quot;, Ccs.join(&quot;\n&quot;));&#10;&#10;const var knbBend = Content.addKnob(&quot;Bend&quot;, 450, 0);&#10;knbBend.setRange(0, 127, 1);&#10;&#10;const var knbLag = Content.addKnob(&quot;Lag&quot;, 600, 0);&#10;knbLag.setRange(0, 500, 1);&#10;knbLag.set(&quot;defaultValue&quot;, 150);&#10;knbLag.set(&quot;suffix&quot;, &quot; ms&quot;);&#10;&#10;//FUNCTIONS&#10;inline function remapRange(value, oldMin, oldMax, newMin, newMax)&#10;{&#10;    if (oldMax - oldMin == 0)&#10;        return newMin;&#10;    else&#10;    {&#10;        return (((value - oldMin) * (newMax - newMin)) / (oldMax - oldMin)) + newMin;&#10;    }&#10;}&#10;&#10;inline function bendEvent(event, interval)&#10;{&#10;&#9;reg bendAmount;&#10;&#9;reg fraction;&#10;&#10;&#9;if (event != -1)&#10;&#9;{&#10;&#9;&#9;bendAmount = remapRange(knbBend.getValue(), 0, 127, 0, interval);&#10;&#9;&#9;fraction = remapRange(bendAmount - Math.floor(bendAmount), 0, 1, 0, 100);&#10;&#10;&#9;&#9;Synth.addPitchFade(event, knbLag.getValue(), Math.floor(bendAmount), parseInt(fraction));&#10;&#9;}&#10;}&#10;&#10;//CALLBACKS&#10;function onNoteOn()&#10;{&#10;&#9;if (btnRandom.getValue() == 1 &amp;&amp; Synth.getNumPressedKeys() == 1)&#10;&#9;{&#10;&#9;&#9;cmbTarget.setValue(Math.floor(Math.random() * ((Message.getNoteNumber()+12) - (Message.getNoteNumber()-12) + 1)) + (Message.getNoteNumber()-12));&#10;&#9;}&#10;&#10;&#9;interval = Math.abs(Message.getNoteNumber() - (cmbTarget.getValue() - 1));&#10;&#9;if (Message.getNoteNumber() &gt; (cmbTarget.getValue()-1)) interval = -interval; //Flip interval if played note is greater than target&#10;&#10;&#9;intervals.setValue(Message.getNoteNumber(), interval);&#10;&#9;events.setValue(Message.getNoteNumber(), Message.getEventId());&#10;&#10;&#9;bendEvent(Message.getEventId(), interval);&#10;}&#10;&#10;function onNoteOff()&#10;{&#10;&#9;events.setValue(Message.getNoteNumber(), -1);&#10;}&#10;&#10;function onController()&#10;{&#10;&#9;if (Message.getControllerNumber() == cmbCC.getValue()-1)&#10;&#9;{&#10;&#9;&#9;knbBend.setValue(Message.getControllerValue());&#10;&#10;&#9;&#9;for (i = 0; i &lt; 127; i++)&#10;&#9;&#9;{&#10;&#9;&#9;&#9;bendEvent(events.getValue(i), intervals.getValue(i));&#9;&#10;&#9;&#9;}&#9;&#9;&#10;&#9;}&#10;}&#10;&#10;function onTimer()&#10;{&#10;&#9;&#10;}&#10;function onControl(number, value)&#10;{&#10;&#9;if (number == knbBend &amp;&amp; !events.isEmpty())&#10;&#9;{&#10;&#9;&#9;for (i = 0; i &lt; 127; i++)&#10;&#9;&#9;{&#10;&#9;&#9;&#9;bendEvent(events.getValue(i), intervals.getValue(i));&#9;&#10;&#9;&#9;}&#10;&#9;}&#10;}">
                    <EditorStates BodyShown="1" Visible="1" Solo="0" contentShown="1" onInitOpen="0"
                                  onNoteOnOpen="0" onNoteOffOpen="0" onControllerOpen="0" onTimerOpen="0"
                                  onControlOpen="0"/>
                    <ChildProcessors/>
                    <Content>
                      <Control type="ScriptComboBox" id="Target" value="73"/>
                      <Control type="ScriptButton" id="Randomise" value="0"/>
                      <Control type="ScriptComboBox" id="Controller" value="2"/>
                      <Control type="ScriptSlider" id="Bend" value="0"/>
                      <Control type="ScriptSlider" id="Lag" value="500"/>
                    </Content>
                  </Processor>
                </ChildProcessors>
              </Processor>
              <Processor Type="ModulatorChain" ID="GainModulation" Bypassed="0" Intensity="1">
                <EditorStates BodyShown="1" Visible="0" Solo="0"/>
                <ChildProcessors>
                  <Processor Type="SimpleEnvelope" ID="DefaultEnvelope" Bypassed="0" Intensity="1"
                             Attack="5" Release="10" 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>
                </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="0" Solo="0" Folded="1"/>
                <ChildProcessors/>
              </Processor>
            </ChildProcessors>
            <RoutingMatrix NumSourceChannels="2" Channel0="0" Send0="-1" Channel1="1" Send1="-1"/>
          </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>
      

      Update in 2025! Here's it in snippet form

      HiseSnippet 2506.3oc4YstaiabElx6xEQmMInoHEn+jwsHPJ650b3EQJ3lFacy0XWuqwJuoA8B1RKMxlckHUIobVmff12gBzmi9Fzh9.TzezWf9Fj2f1uyPJIJeYWGiro.sBC8Lbly4Lemu4L2nOHIdfLMMNQqBc3YSkZUda89mEkcR6SBBiz1qiVkuu9uHbxDYhQKYzPiNxIwZsNaZPZpbnVkJ2ZWVtJUusl52W+IsBFGDMPtrJMsOMNbf7QgSByVV6uY6GFNdbufgxCCmTRZms2aPbT63wwy.ltkto1zfAuH3X4iCXwVSW6mEjdhVkOR2ZzQCrF4Y6KZJZ54zTHb8OxwzZvP2l11MrGNxxOngOT5NcGFlEmzOKHSlpU41shGdV+Sh+7n7N3SCSCOZrjeQn0G8bd08hGOjcQtVs1mDNd3AyIqTMsJ5Grj5tUN08956GNLbQ8KovumpAikZTl.qr1qBdhxvy7ZCOsRn614nCfHd3rwAYqhLd7qngv3nUP1dQYxnzvryJO99eU39d5GDlM3jKGuqcI3ECTuowawf+6n2czH4frkf81589ruaGoe2bnbW89gQR0zXEP9Ap2M94AmJM1UFISXR8ULI9e7s+j3mLHC89gIAQoSiSWwv8kSBOLNhIjkU9rTYuD4u6o7fb45aGGjboM80eRO3iWpN8CxlknhV1YR7rn43e6+0W7O+jJ25ZOj7MXsga+lZsgac8hXtDHU4hyvdO89CRBmlsrEFOuS4k6WAL4Rqs1etp9lat2i26PJQdrQ3V4YXtWxoAiyeSdpLJK03iM5FcLFVdvfDIb.1QeTXZVs5qpyqTPBQRoYFmFjXDEmo1Ffk+W9q2pTKsGLutRUNXxQGFjbrLCM0NlWaH6AACG1NdxQwsheYs0yac86aXdeCgY8xF7nrnmFDMLdxp51ZVVVbTs0yaKLUBkEtWTcz0saeUcKWYR73wxDnss4bsoQwIF0BgVlaYDZ7SLDV9nv8tWc5KopK78GLcV5I0JnK.elqdbQi0BqCCUErQtTg3suBTxbh3AoxrZqGlImjhtdoI+swgvo9UQqypqv9pRxFbEYJ4puH5H0ACVwYeXT7Q0VmqGZ6vDD6gEhx1FD3wxZrqa4g+bAS9nfiuLKhpgAaXtzfnlUrmqhOWosZqOTNJX13rOMX7rhQryIP5rQiBeIZZcC3vLZ1bydO6wsObum739TXzXd8yQyhFvqhXjHmDLMuGOkM48MvxA6GFkmG7RPsxOW8NmG7Rd.z.+BGYTKWBiMJTw3iwvccUq7uDIVpJpP8sTUKGmJUE9xyKUsZ4c+BiU23iLpk2kntbiTutwlWnWQk2akN4q3vjy6lGgwpt7D4Zpoy2ew7UU.IOAlkHeM0sxqXTRfRWPfUYuUonwG7wFaHpSUgVUWpBFeKQjyiMPTpZXpV87okb3gYotFcT048xpVnjk2vX+frSdvnwwwIkpuvjEy2Uy4pVUsMIGgoNYAuW1b2sH.oLhtJyNk2UBG+n1bnolGpX0M2r8NO5Qs1o8C6SKn13HdJ6ShponRloVrfSo9iCNDFe3GZjiQzvimM4fDIuf7CkmkVHQAytxr7bKTBtphIpdnlJNo19vN3b0JyxqDLaxQxjZ0umvpNHvqp4M3luG5T9uuJgxI.3bEibXvRggfiRuJ03tcoWThG1f6usxIpqR2e5kq6FLRKggMVrQkAlhONb5xFg0mNN3L4P0JiFgoFGq1MJwH6jfHiLkoK4QokH5KGTqF2luo30PoRMnl+s2vZpEcqtbF4kIxJ8Fn9yGsMZTd310FGaHtfgVt20xP2R5ur4EiKHBMeGkUFSxCYKsgvEfxRSUnU9z0KtIoWwljUUlr54V0JcY+FVhgVo55aUEZ9UUqVLksj+xmqsvUQKFWjIpEobz6anVJdAmjWK67y2eDSi+fBDEl1cxzryfKkSCuA8IkGgS7s5wH0udmxcP91ukDLNZunvrmLUFckWGoXOa9FxETDDMq3Jc4Ggb9QgzBw4JeK874rZJBbw4129oaqcd8e2B8yOElR66pu3nXmy.ZEX40Bf2VeYn1ErwUCh9iCGBEXKbGc0Yke88+knqtN1i4799ueasmsWmfr.9f6EDJH4oxjrPd7qRG4o31X4GiupdGY5KxhmpX7ISwUo363bmqCm+RnSEtKOiKPnvj.Uc+ATTc5Os096vraXQs+Q3Oc3GtPW7zie3W1ke3B6vObgVrBaHXkDPIAqj.JIfRBVIATRvJIfRBVIATBJXBcLoNHgrtlTOjPocQBY6fDxZAoXiC6xlFVFFksKLIaUXP1lvjPJF5.0LvAtAjYTC.yXFvkQL.LjxFBZScPBYcsodHgR6hDx1AIj0BR4.AcnNHgrtNTOjPocQBY6fDxZAobgftTGjPVWWpGRnztHgrcPBYsfTMffMnNHgrtMndHgR6hDx1AIj0BR4AA8nNHgrtdTOjPocQBY6fDxZAo7gf9TGjPVWepGRnzt9bT4hfjaeslXohH9SkiRztlAZqL2RYl6W4UFr8GqnaRBxhrIGxkZPdjO0jDnRAIrHgMIbHgKIZPBOR3ShljkIYAcrHKaxxgrbIqFjkGY4SVMIaSxVP1vj1jsCY6R1MHaOx1mraRNljifbrHGziNjiK4zfb7HGexoI4ZRtBx0hbsIW.HWxsA45Qt9jaSpgI0PPMrnF1TCGpAvaCpgG0vmZzj7LIOA4YQd1jmC44Rdvc7HOexqI4aR9Bx2h7sIeGx2k7aP9va8I+lTSSpofZZQMsolNTSWpYCpoG0DjAyFfNLAeXBBwDLhInDSvIlfTLAqXBZwDxonMHGSbLywTGycL4wrGSef+Df.EVL+B4.GJ.IJ.KJ.Mh8hVYz9tutUAUin+s4ixbrRZ1Y7dK2QmuCm1jvgCGKOHNMT886V9Ab9KoYxo8C+BY4OpiJBo30+5y2N+dZpOC7nvwSRy.F1aBNw.+YpeVpzn3ldFouHLRCWm4ExgGFqjurS71ulkiU9vms1a.e.KsO2Gz0wcM+F6FkuJ6Rl4ns+t6C99sy2fp5bL1ObxzwxtQmJGiM3J9Jucx8xE0VFj6GGEO8j3nvAk2q8oRPhGerLobkWp+rSVVvfWrrl2e6mJGKCJ+QI+wa+HbS3fDPSxaHUH9F+43tzgqendNbM3ChZ7+Fem9a8+mem9mFOKKL5XbI3D0zebCo9wyRFHARhhji4ykWYMdu072Mmu1Serrp5k+M9UznfeuRQih4M9cReLIXPR7yGjuuNGK+VpZfeGo9WzUUee9cCwEOPLV2L74CFrpotfhV2TEsuoJ5bSUz8lpXiaphd2TE8e8JxeJ4clkEOIeJql19GzUcKjJU5FEfHd0rCs+CwZRD2C
      

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

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

        Amazing, the cluster sound when used with the sines that go both up and down really gives that Joker Theme vibe (you just need to replace the sines with cello samples and run it through a guitar amp :)

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

        28

        Online

        1.8k

        Users

        12.0k

        Topics

        104.1k

        Posts