Add first version of the PC2Scene script
Allows you to launch Scenes via MIDI Program Change messages from external sources.
This commit is contained in:
commit
b0ec46916d
70
pc2scene.control.js
Normal file
70
pc2scene.control.js
Normal file
|
@ -0,0 +1,70 @@
|
|||
loadAPI(18);
|
||||
|
||||
// Remove this if you want to be able to use deprecated methods without causing script to stop.
|
||||
// This is useful during development.
|
||||
host.setShouldFailOnDeprecatedUse(true);
|
||||
|
||||
host.defineController("Generic", "PC2Scene", "0.1", "d8fd1407-e713-4c83-8ed1-1532c05895ba", "decibyte");
|
||||
host.defineMidiPorts(1, 0);
|
||||
|
||||
|
||||
function init() {
|
||||
// Set up the preferences for the controller script. There are 2 available
|
||||
// settings:
|
||||
// - The MIDI channel to listen for Program Change messages on.
|
||||
// - Whether to show Scene changes as notifications on the screen.
|
||||
preferences = host.getPreferences();
|
||||
midiChannel = preferences.getNumberSetting("MIDI channel for Program Change", "General", 1, 16, 1, "", 1);
|
||||
showNotifications = preferences.getBooleanSetting("Show scene change notifications", "General", false);
|
||||
|
||||
// Attach a callback to incoming MIDI events.
|
||||
midiIn = host.getMidiInPort(0);
|
||||
midiIn.setMidiCallback(onMidiIn);
|
||||
|
||||
// Set up a Scene bank and iterate over all of them, in order to mark
|
||||
// their names interesting (to be able to print them later on).
|
||||
sceneCount = 128;
|
||||
scenes = host.createSceneBank(sceneCount);
|
||||
for (i = 0; i < sceneCount; i++) {
|
||||
scene = scenes.getScene(i);
|
||||
scene.name().markInterested();
|
||||
}
|
||||
|
||||
host.println("PC2Scene initialized.");
|
||||
}
|
||||
|
||||
function flush() {
|
||||
}
|
||||
|
||||
function exit() {
|
||||
host.println("Exited.");
|
||||
}
|
||||
|
||||
function onMidiIn(status, data1, data2) {
|
||||
// Only look at Program Change messages.
|
||||
if (isProgramChange(status)) {
|
||||
// Get the MIDI channel for the incoming Program Change message and
|
||||
// the MIDI channel from the preferences.
|
||||
inChannel = MIDIChannel(status);
|
||||
prefChannel = midiChannel.get() * 15;
|
||||
|
||||
// Only change Scene if the Program Change message is from the
|
||||
// correct channel.
|
||||
if (inChannel == prefChannel) {
|
||||
// Get the Scene, launch it and scroll to it.
|
||||
scene = scenes.getScene(data1);
|
||||
scene.launch();
|
||||
scenes.scrollIntoView(data1);
|
||||
|
||||
// Print out debug information and optionally show the name of the
|
||||
// new Scene if toggled on in the preferences.
|
||||
sceneName = scene.name().get();
|
||||
host.println("Program Change " + data1 + " received on channel " + (MIDIChannel(status) + 1));
|
||||
message = 'Launching scene: "' + sceneName + '"';
|
||||
if (showNotifications.get()) {
|
||||
host.showPopupNotification(message);
|
||||
}
|
||||
host.println(message);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue