HISE Logo Forum
    • Categories
    • Register
    • Login
    1. HISE
    2. Christoph Hart
    3. Posts
    • Profile
    • Following 0
    • Followers 77
    • Topics 103
    • Posts 8,737
    • Groups 2

    Posts

    Recent Best Controversial
    • RE: How to handle many instruments without a huge module tree?

      @Yinxi definitely the second one.

      posted in General Questions
      Christoph HartC
      Christoph Hart
    • RE: Mod Matrix with Scriptnode / Hardcoded FX

      It is sample accurate if you use it in a frame container. Otherwise it is the ModulationBlockSize that is taken but I am not 100% sure how. Because if an audio block is 512 and the modSize is 16, I don't see how it works...

      If the ModulationBlockSize is set, then HISE will split up the incoming buffers and send out parameter values with this control rate, so:

      512 samples in, ModulationBlockSize = 16
      
      - calculate all modulation values and send the parameter callbacks
      - process 16 samples
      - calculate all modulation values and send the parameter callbacks
      - process 16 samples
      ...
      

      Note that the frame container will not make this sample accurate because that's a inner property of the network and HISE has no idea whether you use frame processing from the outside.

      That's why it's recommended for high-resolution modulation requirements to use the extra_mod nodes and connect it to the slots - they can fetch the modulation signal from within the node and apply it to the signal (using multiplication) or modulate any parameter with the resolution you want within your network.

      posted in ScriptNode
      Christoph HartC
      Christoph Hart
    • RE: Loop points clicking issue in HISE but not in other samplers

      @d-healey nah I have a bunch of goodies ready for pushing but I still need to clean it up a bit. Good stuff in there though, good stuff :)

      posted in General Questions
      Christoph HartC
      Christoph Hart
    • RE: xy pad dot showing but not moving

      Back by popular demand (I‘ve removed the post with the email address as this was probably the intention).

      posted in Scripting
      Christoph HartC
      Christoph Hart
    • RE: Is there a way to give a custom c++ node parameter modulation support without wrapping in a network??

      @griffinboy yes that‘s how I do it in sbb too.

      posted in C++ Development
      Christoph HartC
      Christoph Hart
    • RE: Is there a way to give a custom c++ node parameter modulation support without wrapping in a network??

      yes, it's a new method that you need to overwrite in your C++ node where you can specify the modulation layout just like you do with scriptnode root parameters. It works similar to the createParameters() callback where you need to populate a list of data objects which will then be used by HISE to setup the modulation scheme:

      void createExternalModulationInfo(OpaqueNode::ModulationProperties& info)
      {
      	// Create a list of modulation slots
      	modulation::ParameterProperties::ConnectionList list;
      
      	// Create a modulation connection info object
      	modulation::ConnectionInfo slot1;
      
      	// modulate parameter with P==1
      	slot1.connectedParameterIndex = 1; 
      	// yellow
      	slot1.modColour = HiseModulationColours::ColourId::Gain; 
      	// only scale (like gain modulation)
      	slot1.modulationMode = modulation::ParameterMode::ScaleOnly; 
      
      	list.push_back(slot1);
      
      	modulation::ConnectionInfo slot2;
      
      	// modulate parameter with P==5
      	slot1.connectedParameterIndex = 5; 
      	// purple
      	slot1.modColour = HiseModulationColours::ColourId::Pitch; 
      	// bipolar / unipolar add mode
      	slot1.modulationMode = modulation::ParameterMode::AddOnly;
      
      	list.push_back(slot1);
      
      	// pass the list to the modulation property object to initialise
      	// the first two modulation slots
      	info.fromConnectionList(list);
      }
      
      posted in C++ Development
      Christoph HartC
      Christoph Hart
    • RE: LAF ModWheel & PitchWheel Sliders Design

      @DanH yup, if you add a global modulator container with a CC mod to my snippet it'll react to the slider movements.

      posted in Snippet Waiting Room
      Christoph HartC
      Christoph Hart
    • RE: LAF ModWheel & PitchWheel Sliders Design

      @DanH huh, where are you setting the modwheel position? Why does it react to the modwheel? what's that wizardry?

      Ah, you connected it via MIDI learn, I was wondering why it didn't had anything in the onController callback.

      BTW, you might want to change that, this would also make the pitch wheel work (also MIDI learn connections are stored in user presets and this creates unnecessary noise there).

      HiseSnippet 3184.3oc6arsbaabEzRH0jIoSRZZSxL8gsb5EpXYZBRcspdB0ERIMVWnEorSpGW2U.KI2JP.V.PIwjwcxi8qo+Bs8w9T6L8GHu125eP54rK.wBRXIJm3jwcDmwRB6dtecODqa34Zx78c8zxjq0v9LsLukdygNAc2rKk6ns6VZYts9i2oVs8Zpswv9TeelkVlLyrMtalrypI97e+jMn1TGSV7RZZOxkax1i2iGDuZipOfaaWmZwZw6o.8BU20z0YSWa2AfjLidIs9TySocXGPQvtkt1NT+tZY9X8JKuDsc4kWlwZuToUWd41KsrIsLisPkEV3DK5IkWYEyUVb4Uzx7F0r3AtdMCnALesLytgq0vlccO2QxfGw84mXyvGLzZBbVtbcWaKTEwU01rK21pQjIxWSKidiXC1LRC16quO2hOZ8XC26H1fDigpALysRJdyjP7LTEuRJhWJhTFEQZVoH8t5MM838Ch2Akm2TeWm.lWaJ3mTEEIrZ25q9o5a5BP3DTrG8TVcO3gQXTXoRklm.+Xt0xk6d2irkqyuJfbN0IfDzk6SBbIVLOJ2l.tPBcfE2kzGP00qGFXTrXwbh3phVr1LuMo11m.dX+BAdCXHIA2ue.4LpGY+C2RDv8r8VuN49jHQxziAVp8bMo1645d55NV0YL6BHtpXTzi0g6CBc8ANlAbWmB4s7nmeja.0aXSaNHj4mmzNZyNySbO4OLWtuHW16AZEHtDJwW.Fwm+4LR4RWrTob3tff36ZyJ12i6D.xMZTPbAIHaNB7AE9K.Idw0H.oLt2BD21fwgEQuy4Vf9SHG6yZOvlvaSF5NfX1k5zgIfS.vHRcdWP+dLtDPSiRqQPpRjKDRXpYv.psDRfvsPGgMidFymrX+KPn7g7HFgwAnQExhUbD8o.YA4uHELrqIVU7CfIOhZOfgdzA9LgIA4UO2yX8.GQDu655w+bv2.72l6.b7dR4fPcrHRmEoO0xh6zAHUewxm3FD31SxqrnLD.tE6VdfDaiFNCoRJVcRFBTvlMOnf99BJFRcIkjjtA0BnS40HgZReO1YHIj3R.oxrKJPgBh.yy.LPGYwyDp8GqJTyQtSLkWKx9LBKEz.G9RUVoxbWF9BjavCL69XgkBBkMAiF2rKHf9DOQf.nsktqfVw9DjgNC5smvNeeHKTDgAqbB3UADF2WLBI7olPH.pyB6BflEjdfojjSXAmyXNgnDZF6HKBCPW5h5aTZkRqZH41FP5ZGO2AfaTBhDAgOWEm5kpu7RqF5IaA9MS4lgdQolyC7Y1skTvuKzNHIE1nzpkWTRgsndmJ.AUASEFay6zMPAsJqTW7Qh1d3tHJr1sYlAivLxEpnM0gNRhk6TzmERwBQ1g4VKbq1.TGATpPTJCV3IjXRcRgjPpyILhEH5SPX4u7KdhM.9jT+IWLOApyFm6OOg9jJO8ohhLYGwqlPlretrpDFcWkWn7hk2XNEK21drgHbXMvGw7B3X4SveWnhfOKgkySaaikh2ORM2B.R3C220RJFwAaSnmJwEQj.qjT.ccbzgsF7qeynnZ3o6bm4Df8EheFEAODyyJCYU74H2kb1ZgrRxNTr2YTruPvGNO4BU6Gj.dQnY94IJxsirjfhW6tDzMP3NBkz0xJLCiYEVgCbqXiQkpQIcAioyYSU.WrBpGoJkjWDJKd8QY4qOJq9BQYTrGGJpOxv4E0BSbJ.d.ALhLYyhQoea6AYtPEX+3TuTSGNGI8bqo.SZR3RgRHHUkmW1tDVorRLZD+HGdFyylNjT.6T7KCKBOpPB1LxNTFmar.3HRf0EJ7DrdjwJFKZrHjMHxIJcQovOhULVDRNQV2DqiQZ41+RpXb4bJAcq.+RoznXskJkfWaD2N8aL6JMuRA0jJlvYllhkRwJARWJemjMSXRWPnlwrlB9pf.Hlq8.OwAYrfiImlvfzRUZpHHThz9qJF10Qb1hvtUoDGmZ0tzBiuhP36RLFOQC9mw3x6FXeBvSeAo4.OQcp4g7LpnqFTX5jgihiCa04OksbDmJFMbz4QtlKhm4dNlNwcvRdiNmLXVhJ5WvzsWeWGvVLOQbzGwgmkms2m4XgmW2y01l4UvHDBn5sQ4kAx97zNmuxY76fxbH0KjOBf7yEeDeoZI3PzLDEhkMfEp.NwvBpCJjbniF61ZyctlicjDmaF73lAOl5AOhLE2LEwMSQbyTD2LEwMSQbyTD2LEwMSQ7+8SQDetkqwbD6CG7h1gUTbf6msQsC15YatYDViMUQ7gxegyUDCR9jGiO0YFRdJe.gjvO4vHwpn7UkbOx5G25v6dTsVGezApxWqCI6u6VasWMRiCataqcO7.vcdXC7OVeO7T06r9AOnIB11GUaaxwMa8.R8COBVe2l+LwKgYCOWpkIEm5fXwZyc3nYV0ZLRVZ4Nvr6yNwDrJ0b5.dkvIaTHQArmYdtU9eMI+jHledbWpWGeX+mjej2CFpIu3rt4ep.h.pDhmJCA.ojFD.m9E66IOSL9NpxMICJJgqk6HW09tvb.0Pb7K7DU21SAdtoM27TexgN1CQQHeRl0l6Al.abfLGlWpbyxZuvsKjGoPOK04yThNERsH5DxxKHdpXOTzNt+b4xBKmcDvXDgXHlBqXrpQwEwldJ6JG4xBmdL6yk1GkbiCbCXG5TPvIHnlL9Vsam5dJIJgB4nDlNihOgcOPbLjByQt+8IolQAJS1jA2RUIUpI2RLCZ1oimFH8UGO+poNNOT3WbfpFiu6XuKyVTPdjK0BKHfZYlM4KcU+E+RWUemvlxxHJ.55rKjqcXelyK5MEqEV6QSKysBkJ.z.wqm8GF95Ykeq.ZbKsL4zirLZBYN7UiS9Ka+e9Dso.+2RO1ykfBZe4W+Wqpc7taQCn3KKNTr.QsOdRczJjYK1YbSl7UGmUeKl+oPyKvXMJQTKyaLMR9EwuP+fpCievop3PVput+tLreS7JGTUSga4lN8Tge7qM+5QuH1D8OqBUB52j+4L0K0POtEzeugqunrppAEJ1RGXKifSXnUThefTId6PkXO5ILagNbacweanH+eIUQ9+89UCXWDLlxlTk.DFWkV3Zw8xJb+q5mF2UbriYN+cow6IuEBuiNLh2.aZPxKEAd0QB2.spp2DA71F3.V6gpdgu0toDSqH9t5h1EoKi2JEYDyweEHig2uj2Vul3HYwB3r50+zWMWlDU1+AR1+l5OldFSbtLAy+whmw60AYar4IZ6Ltj6Fz+ZZuaP8m56FzglAfHzxi53220mYnR4lrd7VPNfehUGCixohQhU2hELvIIokKEAU0JU9QUQSQcvTn.2sGsXY0EaPcT.5y9avyJ6+YU2mqTM6q9jZNTvg0jAZt0g9lfgAsypoEMFX6yDG52PEw3kKqt7NTOKvGZlHnclK6FR8B6FlL+UA9TtaRuwqpqK0rSWD9keatdMnlUha2U1HYrIuWeaVMmyX1PabgL9dPeaQOonUSlStuqia+ttN7DQ.GwB73c5vRDXkpBsNdr5SiW48qdDylQ8UxS+4UwYSodfch8RZKLt12zsT8WentTbIXgDx2D+12ogYWZemYlp9NSYJbr7dk14aGcqPiGgJzFKVH7aRdj1Xb013M38csodXuzi8YsnB4KVk1Ehe8BP7UJQ2y0Mnax1B7peqEX88bS2zxweO8Ft1CkYr041vz4BgHqt7gKqgqlVcO1eb.ywL1r+m+2UenpOHYN5GV8gCn1wtIxG8Q+i+dna5a5wcthT5Ymxbieh9Hkh78eg3bijTniU7TqgEhEswhWcJRIlLO.KCOYdv3CVqBe54HakxfJIojfwhoCy7KzKuPwjeN6P3GsuC9mqNr7ocKcf1qjztKutHFf+5Sc7OROL2gfwru9H2+P8G95ivh4dW75i39A5vo3KK+9XIuh5veMj5ibGfeY+6Sgy+AycnCkSZBiWYx.I1wgYie2XYtEVmP9bI7Y4vRNVhG9Z3S3lF3yYB2zHZyuS3QOpom6yLkEyvpz2VrBn2Nh+iijUee7YhQxuSL7SOnJ8yLMSRpIPr7KKhUdYQbgWVDW7kEwkdYQb4WVDW4pQDaht9f.2dx7jvu4xv9rYda0Gzy7mhihhHfRdo5+uWD7eWGK1EQ.BIVdApRRMGK0uXv5Crsm.Fbwwfq4oryGeLJOPMUWCjZQScPnVVuxxEcZszCVYyM1tylEK9nZ0okN1nwfErMOc2sw+Ub8sZ7o7G93eqww0g+tMzDVClrwiexf.1Xe8fwGWHyLZ62nlridF42ifb0+Gtk4Vi.
      
      posted in Snippet Waiting Room
      Christoph HartC
      Christoph Hart
    • RE: Stock Table Upgrade?

      @ustk said in Stock Table Upgrade?:

      is there a way to reset a curve to exactly 0.5?

      double click on the mid point node resets it to 0.5

      And can the ruler move more smoothly too?

      the ruler is already a float position, but the update rate might be only 30Hz, need to check.

      any extra dragging resolution?!

      nope.

      posted in General Questions
      Christoph HartC
      Christoph Hart
    • RE: Stock Table Upgrade?

      @DanH the circle ones, yes, just like with the flex envelope. You can enable them by setting the midPointSize property to anything > 0.

      posted in General Questions
      Christoph HartC
      Christoph Hart
    • RE: Dynamic reassignment of effect slots

      Just trying to get his attention so we can finally have another HISE Meetup.

      Soon...

      posted in General Questions
      Christoph HartC
      Christoph Hart
    • RE: Stock Table Upgrade?

      @HISEnberg true.

      posted in General Questions
      Christoph HartC
      Christoph Hart
    • RE: Stock Table Upgrade?

      Alright, I've played around with the table component a bit. There was already a function that allowed you to customize the drag behaviour to a certain extend, but I thought it would be super funny to not add any documentation to that thing whatsoever.

      https://docs.hise.audio/scripting/scripting-api/scripttable/index.html#setmousehandlingproperties

      5a142fb0-b8cc-4497-be1e-e313c1dbb748-image.png

      This can be extended to allow pretty detailed customizations, so any input for more stuff is welcome. Here are the currently supported properties (I'll hold off with the docs for this method until we included all popular requests):

      Table1.setMouseHandlingProperties({
      	margin: 10, // adds a margin around the table so that points at the edges are not cut off
      	fixLeftEdge: 0.5, // sets a normalized fixed y-position for the left edge
      	fixRightEdge: 0.5, // sets a normalized fixed y-position for the right edge
          syncStartEnd: false, // if true, then the start and end y value will always be in sync
      	endPointSize: 12, // changes the size of the points at the edges
      	dragPointSize: 18, // changes the size of the draggable points
          midPointSize: 12, // changes the size of the curve node points (default = 0)
          allowSwap: true, // if true, then points can swap their position when dragged
          numSteps: 12, // this will enable a grid for snapping to the x-axis
          snapWidth: 10, // if numSteps > 0 is on, this will define the tolerance for the snapping in pixels
          useMouseWheelForCurve: false, // if true, it will use the mouse wheel for setting the curve. 
      	closePath: false, // if false, it will not create a boxed and filled version of the path (like above)
      });
      

      I've also made a few minor changes (remove that nasty green outline, why???) Note that the useMouseWheelForCurve property replaces the compile time constant HISE_USE_MOUSE_WHEEL_FOR_TABLE_CURVE but it's not a breaking change because the default value for this property will be picked up by the constant.

      Any ideas for more customizations are welcome now. Let's do this once right and then not think about that component for another 5 years...

      Oh and it's not pushed yet, so you can't try it out yourself yet.

      posted in General Questions
      Christoph HartC
      Christoph Hart
    • RE: LAF ModWheel / PitchWheel for your own use

      @DanH html

      posted in Scripting
      Christoph HartC
      Christoph Hart
    • RE: Stock Table Upgrade?

      @DanH ah that looks very fringe, how is that a real problem? I never felt the urge of having a sub-pixel mouse position and while JUCE theoretically has float resolution, it's only used on macOS because the Windows API only returns the pixel position as integer.

      posted in General Questions
      Christoph HartC
      Christoph Hart
    • RE: Stock Table Upgrade?

      Another issue is only being able to move points by a pixel at a time. This came up a few weeks ago and is apparently a Juce issue but it's a very poor resolution by modern standards so would love to investigate further.

      What's that?

      posted in General Questions
      Christoph HartC
      Christoph Hart
    • RE: Linear Slider - Prevent value jumping to mouse click point

      Yes, it's a feature not a bug of the linear slider style to pick up the value when you click on it. If that is not active and you have some kind of mixer UI, then it feels like a plugin from 1996 if you need to drag it to set it to the current position.

      The proposed solution is correct: use a knob and then the drawRotaryKnob() function - even if your modwheel looks like a slider you want it to behave like a knob, so knob it is.

      posted in General Questions
      Christoph HartC
      Christoph Hart
    • RE: Loop points clicking issue in HISE but not in other samplers

      @Yinxi nice catch. Today I learned that the loop end is inclusive in the audio chunk metadata :)

      Curiously the loading function for the audio looper already had that correction:

      if (metadata.getProperty(MetadataIDs::LoopEnabled, false))
      {
      	// add 1 because of the offset
      	lr->loopRange = { (int)metadata.getProperty(MetadataIDs::LoopStart, 0), (int)metadata.getProperty(MetadataIDs::LoopEnd, 0) + 1 };
      }
      

      but the metadata parser of the sampler didn't use this yet, but the fix is trivial. Note that this will only apply to samples that you import and use the metadata information for extracting loop points - existing sample maps will not be altered as this would break any existing project.

      it's always felt weird to me that there aren't any unit tests here.

      There are quite a few unit tests in deterministic parts of the codebase (eg. the SNEX compiler is almost fully covered by unit tests), but the nature of audio software makes it super hard to cover DSP things like this.

      posted in General Questions
      Christoph HartC
      Christoph Hart
    • RE: Unlocker - How to use?

      Or is the third party use of the Unlocker without HISE Activate still possible?

      HISE Activate is just the server side service that manages the licenses. If you want to use the Unlocker without HISE Activate, you can implement your own server database that handles this (I think @Dan-Korneff is doing this).

      The Unlocker is not compatible with any other third party licensing systems though as they require their own logic.

      posted in General Questions
      Christoph HartC
      Christoph Hart