Loop Player Root Note
-
Does anyone know a way of changing the loop player Root Note parameter to display as notes (C3, C#3, etc) rather than MIDI numbers?
-
@paper_lung You'd need to make a custom UI
-
@d-healey I've just linked a combobox with all the notes, then linked a macro slider to control the combobox.
The part where I'm stuck now is that when a user imports their own sample into the loop player, the loop player automatically detects the pitch of a sample. Couple of Q's...
- Is there anyway to turn the automatic pitch detection off within the Loop player?
- If not, how would I go about updating the combobox/macro to update when a new sample is imported?
-
Just to be clear to anyone that might be a solution to this:
When importing a file into the audio loop player, the root note changes:
This slider on my UI doesn't update:
I'd like to either:
- Turn off pitch detection inside the loop player so root note is always set manually and doesn't change unless changed by the user.
- Have the UI slider update to the new value whenever a file is imported.
Does anyone have any suggestions? Thanks!
-
@paper_lung have you tried a broadcaster?
-
@DanH No, I've not used broadcasters yet as I'm quite new to this, do you know of any examples that demonstrates how that could work?
-
Would this be using something like 'attachtoComponentValue' within the sliders callback or a listener?
-
@paper_lung Ok, my first stab at creating a broadcaster - my main question is if I should be using attachToComponentValue or something else?
var audioLoopPlayer = Synth.getAudioSampleProcessor("AudioLoopPlayer1"); // Create a broadcaster var bc = Engine.createBroadcaster({ "id": "Root Note", "colour": -1, "args": ["component", "value"] }); // Attach the broadcaster to the RootNote parameter of the Audio Loop Player module bc.attachToComponentValue(audioLoopPlayer, "RootNote");
-
No you need to attach it to a module parameter - the component value is required when you want to listen to changes of your UI components on your interface (like an additional control callback).
const var bc = Engine.createBroadcaster({ "id": "root watcher", "args": ["processor", "parameter", "value"] }); bc.attachToModuleParameter("Audio Loop Player1", "RootNote", "watch attribute"); bc.addListener("", "update something", function(u1, u2, value) { Console.print(value); });
However I realized that once the root note is not 64, then it will not update the parameter anymore when you load a new file (I think it's some kind of protection so it doesn't override the parameter value when you load an existing preset).
-
@Christoph-Hart Thanks, I've got it all working on my end now. The value seems to always update for me, I'm not getting the issue you describe
-
Just coming back to this, does anyone know of a way to disable the RootNote changing when a sample is loaded? It looks like it automatically detects the file key/note and then changes it accordingly, but unsure. I can't find anything in the docs.
-
Hmm perhaps using setContentCallback - anyone have any insights?
-
@paper_lung said in Loop Player Root Note:
Hmm perhaps using setContentCallback - anyone have any insights?
I played around with the loop player for a project a while ago and ran into annoying issues like this (and your one about not being able to set the loop range colours). I switched to using a sampler instead.
You might want to checkout this example project - https://github.com/christophhart/hise_tutorial/tree/master/CustomSampleImport
-
@d-healey Thanks, yeah I've had a look at that project but the sample start mod doesn't work in the same way as it does for the looper, and it's quite crucial for this project. I'm also only shipping a few samples, so I can easily bundle the audio into the installer as well, whereas with the sampler they'd be a separate download.
If I can find a way to fix the root note change, the looper will be just fine for my project, although I'm not sure if it's doable. Do you know if setContentCallback works with the Looper/Audio Sample Processor?
-
@paper_lung I'm not sure what the solution is (if there is one). Try the callback and let us know.
-
Don't think setContentCallback works, as far as I can tell anyway.
-
@paper_lung why not have a dig in the source code? There's probably a couple of lines that could be commented out to prevent the root note auto-detect
-
@DanH yeah I did wonder that, but didn’t want to break anything plus I don’t know any c++ haha. Maybe @Christoph-Hart can offer some insight?
-
@paper_lung said in Loop Player Root Note:
plus I don’t know any c++
Don't let that put you off. Looking around in the source code you can figure out what a lot of stuff is doing without fully understanding it. I do this all the time, sometimes I break stuff, so then I undo that and try something else.
-
@d-healey ok will do. Do I need to recompile Hise if I try commenting out some of the code / Anything I should be aware of?