Trigger Audio Loop Player with a Button
-
Is there a way to trigger the audio loop player with a button instead of midi notes? I want it for background sounds.
-
@bendurso
Synth.playNote()
-
@d-healey Thanks. Why the console says "function not found" when I trigger the button?
const var btnPlay = Content.getComponent("btnPlay"); const var AudioLoopPlayer1 = Synth.getChildSynth("Audio Loop Player1"); inline function onbtnPlayControl(component, value) { if (value) { AudioLoopPlayer1.playNote(40, 100); } }; Content.getComponent("btnPlay").setControlCallback(onbtnPlayControl);
-
@bendurso Because that isn't a valid function. As I said,
Synth.playNote()
is what you want :) -
@d-healey Oh, yeah, but I have other samplers/synths in the project. I want to play only the AudioLoopPlayer.
-
@bendurso then you need to put the script within the loop player
-
@d-healey Thanks! I didn't know how script midi processors worked inside samplers/loop players/etc, but this post helped me understand it. It works now :) https://forum.hise.audio/topic/1634/how-to-add-show-connect-the-interface-of-sampler-s-script-processor-to-the-main-interface/4
-
apologies for reviving this old topic but I have a similar question. Basically I'm trying to do the same, have two buttons connected to Audio Loop Players for additional ambience.
I managed to trigger one of the Loops by using a button and some scripting however I still trigger the audio loop when playing the keyboard. I scripted it this way;
//button atmos const var Button1 = Content.getComponent("Button1"); const var AudioLoopPlayer1 = Synth.getChildSynth("Audio Loop Player1"); reg eventId; inline function PlayAtmo(component, value) { if (value) { eventId = Synth.playNote(64, 100); } else Synth.noteOffByEventId(eventId); }; Content.getComponent("Button1").setControlCallback(PlayAtmo);
I assume this is correct? And when triggering the button I can loop it normally, however when there is a note off event I can still hear it if I play the keyboard on the user interface floating Point. I see that @d-healey mentioned that maybe this script should be put into the loop player itself, but am puzzled what exactly should go into the MIDI script processor that is hooked up to the Audio Loop Player, or better yet how exactly do these interconnect (what needs to be in the main init script, and what in the midi script processor)?
-
@fellowfinch The main interface script should contain anything related to the interface that the user needs to interact with. If you need to do any realtime MIDI stuff that should go in a separate (non-deferred script processor). More info here - https://forum.hise.audio/topic/79/scripting-best-practices
-
thank you for your help, however I'm still struggling a bit to understand what would be the best practice here.
Looking at the Scripting practices I think I understand the gist, comments added to showcase my though process
//button atmos const var Button1 = Content.addButton("Button1", 0, 0); // call for button to be added to the main script const var MIDIprocessor = Synth.getMidiProcessor("Midi Processor"); //calling a MIDI processor to be added Synth.deferCallbacks("true"); // need this to to run in the message thread instead of audio thread? ///call for a function function onControl(number, value) { MidiProcessor.setAttribute(0,value); //calling our Midi processor }
after this, jump into my MIDI processor & Script Processor, I have added this
const var processorButton = Content.addButton("processorButton", 0, 0); // adds a button to the MIDI processor const var AudioLoopPlayer1 = Synth.getChildSynth("Audio Loop Player1"); //connects to my Audio Loop Player? reg eventId; inline function playAtmo(component, value) //function to play the atmo button { if (value) { eventId = Synth.playNote(64, 100); } else Synth.noteOffByEventId(eventId); };
and then back to my interface with
Content.getComponent("processorButton");
I can see the button in both interface and MIDI processor but cannot get them linked up or to play a note. I'm still trying to wrap my head around how exactly to set up this trigger :) I'm assuming that I need to somehow tell my MIDI processor to trigger the button for the atmo.
-
edit:
needed to add this in inteface
Button1.setControlCallback(onControl);
and this in MIDI processor
processorButton.setControlCallback(playAtmo);
works fine now! however, I still get MIDI keyboard (floating tile) that plays the audio loop. What would be the best way to have the keyboard fltile be hooked only to the main sampler?