Sliders not responding to "Consumed" MIDI CCs
-
@Chazrox good tip! thanks.
-
@CyberGen @Chazrox @d-healey @ulrik So by process of elimination I narrowed down the source of the problem to my customLoadPreset namespace. I am using:
uph.setUseCustomUserPresetModel(onPresetLoad, onPresetSave, true);
Something about this seems to be severing the MIDI CC connection. It works as far as recalling all my components, processors, modulators' values and attributes. But it seems to be the cause of the MIDI CC problem. When I don't "include" it, things work as expected.
Do you have any experience with this custom user preset model function?
-
@CyberGen I haven't rolled my own user preset handler myself yet.
-
@CyberGen Why are you using that?
-
@d-healey So, I use it primarily to recall the state of attributes from multiple processors as well as some objects that contain data values. It's complicated but it works great for that purpose. However, it is clearly causing this issue for me. Just by commenting out the function and restarting HISE all knobs work properly with their assigned CCs.
-
@CyberGen Yeah I think once you're using a custom preset data model you have to handle everything. I haven't used it myself so can't offer much guidance.
-
@d-healey it's weird because it's been great with everything else, it offers much more control over what you can restore with presets. I'm using a custom preset browser as well. So, everything works except for MIDI CCs. Which I'm not really messing with.
-
@d-healey if the MIDI channel is -1, does that mean all channels or undefined?
-
@CyberGen so, I added a midiAutomationHandler as well as mah.getAutomationDataObject() and mah.setAutomationDataObject() to my custom save and load functions respectively. It's still not working. Additionally I added mah.setUpdateCallback(midiDataObj) for good measure. Still not working.
I noticed that in the midiDataObject all Channels show as -1. But not sure if this means undefined or all.@Christoph-Hart lil' help?
-
@CyberGen @ulrik @Chazrox @d-healey here is an updated snippet with a minimal example of the custom save/load function. The function is initially commented out so the knobs should move with your controller after you assign them. Then uncomment the function to test if controller still moves the knobs. Please let me know if they move for you. thx.
HiseSnippet 1099.3ocsV0saZbDEdVi2l.8G0TkGfQ4p0UV1.FiskUTvFiaPwXi5lX0qZzvryZl3gYPyNqaHUQpWzWh7nz65qReC5aP6YlcMrj.0VnlUHf4bly47c9e6qUTVRhRi7p7xIiYHuuxObhzLr8PBWh5dBx6K7MrDC53IiIIIrHjmWoevxyq75H2ye+riIBhjxlQBgtTwory3i3lYT625Ebg3TRD6k7QEtciVcoJYakPkB3njeUzXB8ZxUryI1qslO54jjgHuu2e256PaDsWT856dPSJoI6fXRbbschZzn49GTamCHM1uIq5t.p6DwMJcng.nG4s9wpnIgCU+hLy.WxS3CDL6gZnPvxYjOUIhrtnkJp8PtHp+sAnDDnk9yBWkxBWO1uGOhOk9rv125XfmIQw.n2ZyCuRyAuZEgW0BvaAPxq.jVOCROxOjp4iMy3XwyW52UZX5XBjmJBkr6hVauR9sUvMjlsFQtlcpFNLUhf5UqtIF9ZiCqToBWJ3RFNNURMbkDqjGmZLJYMqBzJQ.UMZrRBpZS7MDQJaiJ+ZkxgLigKuJYKpfQz1fyYvux.PkuGz5sF+Jlo8shG7jbE+jM1JwR2o91DgX.TfD7w10Ats2F2NMwnFgCI2v19LEIBm4iUfhrDCfHMNc7P7SwcjWA9wVTMCxBuJgo6qYfYdNQFIXZKv.sEdzkcVfGmcUqIBbdmPQIB7TG+Dhg.V.rSt5uXvaXTyoPJGDoat3SczDmwJqYlTsbNs.AGKJN6hiNYonv5iApAuwAjXkFGvvbfskRYfTN3.EpmfK+TL6voz3QX3wRyxbKdzLVPlqHKWhzxE9rvbEOxkjtzdu.31fGU98Yn2FF.VPHNK0LKV2SEwDAEcjMmK3tINlHRXabXAm9bEDNkYgcP+3OlUb7B4kWj3xrKfscjj9+Rv.Y5nALcwRZ6Eg1t46k8WdubwQMzrXXgKpjckbyEiYxkM.BkG3g99R4nB9mw00+M4c8gBdDSi3Py8C7egTMnFxA3hCmQ2agqOmv+1G9ve7rkJbVynS3x94clKv1upqs4vN5J2a.ObLSa31fm2IrafEGYCxJ6eBK4ZiZrycyqyf.7c5vuclAOn0joGZ0uUhgMNj+taQTq+5c+t0gt25t9xz8e9y2otev8HbsDsCGLr2B5367aamdhc6VbyOQLIAJulNOMq5hmzSMBrJQOIuX5S2S.anTQoBhY90V1k64Lf5+41UX2GHS3lIEW9++1tr6KDejeetgNbwXbsEfQnV6yAFyeCfu1uSbLLaeF.W2+ze5yy5dzOpRsKQ6QLZNTq3ed5nP3slnLv5RISXm+3slsCO6bU6YaDHjIibG9G3ImYM6Yubl0tkIZDgpUull0kaeGiG5n.XR5derx98rmwKn4dDTE9ZJcdU8IBVeUEbmUUvFqpf6tpB1bUEbuUUv8uaAsCINJEV.m01fP852wML1yqiaJhqZE8u+I.ZsB
-
C CyberGen marked this topic as a question
-
Maybe
setCustomAutomation
can help - https://docs.hise.dev/scripting/scripting-api/userpresethandler/index.html#setcustomautomation -
@d-healey you genius!
This re-establishes connection. I haven't fully tested it with all knobs but it looks like this solves the issue. It does create a bunch of additional steps, so I'm not sure that I won't run into more trouble, but I can live with that.
I wish you would have posted it 20 minutes ago, before I posted the issue on github.
I'll remove it.
thanks man.
-
C CyberGen has marked this topic as solved
-
@CyberGen said in Sliders not responding to "Consumed" MIDI CCs:
before I posted the issue on github
I got the notification about the github post and it reminded me to check in here :)
-
@d-healey @d-healey said in Sliders not responding to "Consumed" MIDI CCs:
setCustomAutomation
Now that I've had a bit more time, there are a number of hurdles with using this method.
Issues Encountered
MIDI Learn disappears
The "MIDI Learn" option no longer appears in the right-click context menu of knobs β unless an automationId has been manually assigned in the Properties panel.automationId overrides control callbacks
Assigning an automationId disables the knob's regular controlCallback, which is where most of my knob logic lives (e.g., updating processors, linked components, states, etc.).Workaround via automation callback
You can attach a callback to a specific automation and call the original controlCallback logic from there β but this adds boilerplate and breaks modularity.Avoiding feedback loops crashes HISE
Trying to assign a knob as the target of its own automation (to bypass issue #2) results in an infinite loop that crashes HISE.Controller numbers donβt carry over
If you switch the automationId to a new target, the MIDI CC assignment doesn't carry over. It must be learned again manually β making it difficult to share CC control across multiple processors or targets.Current (very clunky) workaround
To make everything function:I had to create an object with dedicated automationIds for all knobs I want to automate.
Each automation ID maps to a dummy knob.
That dummy knob triggers the original controlCallback logic manually.
This has to be repeated for each variation (e.g., 4x per knob) in a multi-processor setup.