@Yinxi definitely the second one.
Posts
-
RE: How to handle many instruments without a huge module tree?posted in General Questions
-
RE: Mod Matrix with Scriptnode / Hardcoded FXposted in ScriptNode
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.
-
RE: Loop points clicking issue in HISE but not in other samplersposted in General Questions
@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 :)
-
RE: xy pad dot showing but not movingposted in Scripting
Back by popular demand (I‘ve removed the post with the email address as this was probably the intention).
-
RE: Is there a way to give a custom c++ node parameter modulation support without wrapping in a network??posted in C++ Development
@griffinboy yes that‘s how I do it in sbb too.
-
RE: Is there a way to give a custom c++ node parameter modulation support without wrapping in a network??posted in C++ Development
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); } -
RE: LAF ModWheel & PitchWheel Sliders Designposted in Snippet Waiting Room
@DanH yup, if you add a global modulator container with a CC mod to my snippet it'll react to the slider movements.
-
RE: LAF ModWheel & PitchWheel Sliders Designposted in Snippet Waiting Room
@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
onControllercallback.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. -
RE: Stock Table Upgrade?posted in General Questions
@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.
-
RE: Stock Table Upgrade?posted in General Questions
@DanH the circle ones, yes, just like with the flex envelope. You can enable them by setting the
midPointSizeproperty to anything > 0. -
RE: Dynamic reassignment of effect slotsposted in General Questions
Just trying to get his attention so we can finally have another HISE Meetup.
Soon...
-
RE: Stock Table Upgrade?posted in General Questions
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

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
useMouseWheelForCurveproperty replaces the compile time constantHISE_USE_MOUSE_WHEEL_FOR_TABLE_CURVEbut 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.
-
RE: Stock Table Upgrade?posted in General Questions
@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.
-
RE: Stock Table Upgrade?posted in General Questions
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?
-
RE: Linear Slider - Prevent value jumping to mouse click pointposted in General Questions
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. -
RE: Loop points clicking issue in HISE but not in other samplersposted in General Questions
@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.
-
RE: Unlocker - How to use?posted in General Questions
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.