HISE Logo Forum
    • Categories
    • Register
    • Login

    Octave Up/Down Buttons

    Scheduled Pinned Locked Moved General Questions
    10 Posts 3 Posters 89 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.
    • K
      keysounds
      last edited by keysounds

      Hi everyone 👋

      I’m developing a standalone live instrument in HISE for realtime performance — mainly for solo playing using a touchscreen (iPad-style) interface.

      I need a very simple and reliable live transpose function that can shift all incoming MIDI notes ±12 semitones per click (like the “Transpose” buttons on Korg or Yamaha arranger keyboards), but without cutting off held notes or affecting sampler pitch parameters directly.

      Basically:
      • Two large buttons (▲ / ▼) for +12 / −12 semitone steps
      • A central display showing the current octave offset (−2, −1, 0, +1, +2)
      • Works in Standalone HISE (not compiled project, no Project Manager)
      • Touchscreen friendly (for iPad performance)
      • Ideally realtime MIDI-based transpose (not pitch engine change)

      I’ve tried several methods:
      • Synth.setGlobalTranspose() → not available in my standalone build
      • Sampler.setTranspose() and Sampler.Transpose → property not found
      • Sampler.setAttribute(2, value) works for pitch but affects currently playing notes
      • So I switched to a pure MIDI re-routing approach via onNoteOn() and onNoteOff()

      Here’s my current working script (it does MIDI remapping correctly, but maybe there’s a cleaner HISE-native way to do this?):

      Content.makeFrontInterface(800, 400);

      // Touch-friendly UI
      const btnDown = Content.addButton("btnDown", 140, 150);
      const btnUp = Content.addButton("btnUp", 540, 150);
      const lblVal = Content.addLabel ("lblVal", 350, 150);

      btnDown.set("text", "▼");
      btnUp.set("text", "▲");
      btnDown.set("fontSize", 72);
      btnUp.set("fontSize", 72);
      lblVal.set("fontSize", 72);
      lblVal.set("alignment", "centred");
      lblVal.set("textColour", 0xFFE8C66A);

      reg octaveShift = 0;
      const tShift = Engine.createTable("TransposeShiftPerNote", 128);
      tShift.fill(0.0);

      inline function updateLabel()
      {
      lblVal.set("text", "" + (octaveShift / 12));
      }

      btnUp.setControlCallback(function(c, v)
      {
      if (v) { octaveShift = Math.min(octaveShift + 12, 24); updateLabel(); }
      });
      btnDown.setControlCallback(function(c, v)
      {
      if (v) { octaveShift = Math.max(octaveShift - 12, -24); updateLabel(); }
      });

      function onNoteOn()
      {
      local n = Message.getNoteNumber();
      tShift.set(n, octaveShift);
      Synth.playNote(n + octaveShift, Message.getVelocity());
      }

      function onNoteOff()
      {
      local n = Message.getNoteNumber();
      Synth.noteOff(n + tShift.get(n));
      }

      updateLabel();

      I wonder if there’s a built-in or cleaner way to achieve live transpose inside HISE, maybe something like a MIDI processor or node graph that can handle note remapping directly — especially in standalone mode?

      Any advice, or confirmation that this “manual table” approach is the best practice, would be super appreciated 🙏

      Something like this hiier

      9153ac9e-955e-4221-9f57-463209150bf4-image.jpeg

      Thanks in advance!
      Keysounds

      ILIAMI 1 Reply Last reply Reply Quote 0
      • ILIAMI
        ILIAM @keysounds
        last edited by

        @keysounds Use Transposer, Its under Midi processors , Transposer

        K 1 Reply Last reply Reply Quote 1
        • ILIAMI
          ILIAM
          last edited by

          https://docs.hise.audio/hise-modules/midi-processors/list/transposer.html

          1 Reply Last reply Reply Quote 0
          • K
            keysounds @ILIAM
            last edited by

            @ILIAM
            They should be whole step 12 Semitones(Octave).

            ILIAMI 1 Reply Last reply Reply Quote 0
            • ILIAMI
              ILIAM @keysounds
              last edited by ILIAM

              @keysounds Use the below script , and connect it to the transposer, Then change the step size of the knob to 12.

              https://forum.hise.audio/topic/13056/snippet-increase-decrease-a-knob-s-value-using-2-buttons?_=1762769771429

              Knob.set("stepSize", 12.0 );
              
              1 Reply Last reply Reply Quote 0
              • ILIAMI
                ILIAM
                last edited by

                @keysounds another way is to add the value*12 on setAtrribute.

                So Knob.setAttribute(Transposer.Trasnpose,Value*12);

                You can now Make a knob with -2 to 2 min max values , and it will change the transpose for octave use.

                K 1 Reply Last reply Reply Quote 0
                • K
                  keysounds @ILIAM
                  last edited by

                  @ILIAM

                  Thanks, I will try this.

                  ILIAMI 1 Reply Last reply Reply Quote 0
                  • ILIAMI
                    ILIAM @keysounds
                    last edited by

                    @keysounds I'm on my phone and Can't help more, But the structure is there.
                    Good luck

                    K 1 Reply Last reply Reply Quote 0
                    • K
                      keysounds @ILIAM
                      last edited by

                      @ILIAM when I move with Slider is changing values on Transposer, but over ,,+“ and ,,-" it doesn’t. And with ,,+" and ,,-" buttons Value on Slider are changing but not on Transposer.

                      trillbillyT 1 Reply Last reply Reply Quote 0
                      • trillbillyT
                        trillbilly @keysounds
                        last edited by

                        @keysounds Try this.

                        HiseSnippet 1340.3ocqW0uaaaCDmJIJqw8CrBrG.t9WxKwt1tYefl0s78fwZRLhcyFvvPAsDcLQnHEnnxl2PeQ1Sydj1av1QJIKoXk1Dup+vvj79c2u63c5NMPI8owwRExYiQyhnHmG4NblPO8foDl.0+PjySbOgDqoJb5V6OKhDGSCPNNq9ClMb1XMj84e998IbhvmVrEBcgj4SeMKjoK1cvt+HiyOlDPGwBKI81612WJNPxkI.eV0sCJh3eE4R5oDiXq3hbV+n.lVpFpIZZLHy9xfYCmJ+MQp7WvhYi4TyhtngfhR2FcvTFOXPtuFiPNqMnvyWM0y+L2SXAr46WDA9T6A3BDkiANqTkRqUgRcuMJcrjGXTvsPuUJQu0Ro2ScG5qXQ5hSLb6gt8EvkyDBD1KSqTYQq7Wq6dfDjPnaGRthdrBVLGg2K5zYKL7SycZz.B8wZ70DEdjhHhijwTUW7qv1zg1WR0UhNdOqjTOqJ9wZwaF.HyMLf8.YXjT.K7dl8TChJ.N7re5z2GDy4UAckX7Y9Zx0zaE1bIr7iI3LAEOIQ3qYRAVQik7qoyci8zZkWXTyF+YCL7LQpvdLP2c1AyveKVmKWaNUbodJr6la1zJZJ.yCW5S3XV..KLxvFiRYiSzz9Ady0vuv9UfP4XXS.6Df+7Wga0sIvJchR.pHUf2Y+84OGeLgyGCUCuDOgofH.IWwXO4Dv2wr3BJZIudJszMI9jAojMy.c1ow6pbme9dmNbvYCO5s6MZz4.+qM7T5N2DRAd4mnTPvtjsYBbLEp2gKgXrW.cBIgqwcZ1PQuLW745wFesJZunH9L7lXeNILZKC6E3nj3oXsDGkm0AmekPNdg6RhA7bk5cMgmPyuHqwjmPfLZX8kYhtEtUus2B2a6rqkRtY63RWhdUiRasftyvOOwyf9BiE7VfEOG2sWycLWsFOBGCuwHFKsnfvVqdsauYull6HPhVsZgOHKAH1rZwrYovVWYJDTRtmedUvV3JACSxV5F2Lls.A2zRPfAVEa7jLkmyDup1rtZLqDlR2Oh7pUIdYT8sxrR1MKYs+DaUgMfGvTTeMjx4mJRMA+E8l4WreH+otDR7Wjy7J4GKx8aZkL1eVjgED9KgRLllQ3LHZ7l9vE075iF2vtlWrWh9mJ0zyDdFRtAPC7MOZxjZOKiFbpp1iMMwUuOfdhjvwTUoPjUPnyV0Vmqe2Zc5m9x9RBJE8gHxYQzr0EMW6VSyUTV2BnM6pYLD9m11j8IYMY2OQCu.Cw.k7It1rbjk7kGsAcG.ugaVh38.9PNKfprven67bgZTva5eHQS.2vIyi.uLhpzLSvz4P50vnWoyNrg6gz3qzxHqKmkxBA7OnS+6EFbztyJV7c6RED3twLSvqoDkvLyAK9DYHnXhBjzYEzcxREQnayVitm15A2ov4sYsfcCKOTK5uCIkDEsKLJbzP1e.Fv0sa6NnPVP.mNPFyLI8UteVbFtG4VzZwN91iKsQ2JCvUz3MTlHzkU7MG4b06VcSMUBKxPXVWYPBmnqN.rYR+rCLdYYhZllT.d+rxeIv8Xp3N0NUb2+Gz8otCXZ+o0y2UpguKFR+ny2ruw3wtGMYBz2ofrq4d7OurePw8fJmKSzLwkvjOJFjO6dZR3P3yr7o.SDBJGLjKTFYfZW2wr1DYFREA1E+K7jcXWyZmrC6leHJj3qjuMueJDTefcGfSB6GvsA7kjvZb2EeWFTEwdqueUUs.vdKKvWrr.2dYA9kKKvuZYA90KKvu4CCz7p28RzxvzxID5jAGY6833bj8cy1LWz+IZu81N
                        
                        1 Reply Last reply Reply Quote 1
                        • First post
                          Last post

                        35

                        Online

                        2.0k

                        Users

                        12.8k

                        Topics

                        111.2k

                        Posts