Adding to this, just as an extra option if you’re using AbleSet 3 beta:
You can also automate console scene changes directly from the Project Script.
This lets AbleSet send the correct MIDI message automatically whenever the active song changes.
You’ll find this under:
Settings → MIDI Mapping, OSC & Scripting → Project Script
Here are two examples you can paste into the Project Script editor and adapt to your setup — one using Program Change, and one using Control Change:
Program Change example
// MIDI output that goes to your console
const midiOutput = "Console MIDI"; // must match the output name in AbleSet
// Song → Program Change mapping
const pcBySong = {
"Song 1": { program: 10, channel: 1 },
"Song 2": { program: 20, channel: 1 },
"Song 3": { program: 30, channel: 2 },
// And so on.. Add all the songs you need here
};
log("Project Script started (PC mode)");
onOscChange(
"/setlist/activeSongName",
([newSong]) => {
log("Song changed to:", newSong);
const data = pcBySong[newSong];
if (!data) {
log("No Program Change mapped for song:", newSong);
return;
}
const channel = data.channel ?? 1;
const program = data.program;
sendOsc("/midi/send/pc", midiOutput, channel, program);
log(
`Sent PC ${program} on channel ${channel} to "${midiOutput}" for song "${newSong}"`
);
},
true // fire immediately with current value
);
Control Change example
// MIDI output that goes to your console
const midiOutput = "Console MIDI"; // must match the output name in AbleSet
// Song → CC mapping
const ccBySong = {
"Song 1": { controller: 20, value: 1, channel: 1 },
"Song 2": { controller: 20, value: 2, channel: 1 },
"Song 3": { controller: 21, value: 10, channel: 2 },
// Same deal, add all your songs here
};
log("Project Script started (CC mode)");
onOscChange(
"/setlist/activeSongName",
([newSong]) => {
log("Song changed to:", newSong);
const data = ccBySong[newSong];
if (!data) {
log("No CC mapped for song:", newSong);
return;
}
const channel = data.channel ?? 1;
const controller = data.controller;
const value = data.value;
sendOsc("/midi/send/cc", midiOutput, channel, controller, value);
log(
`Sent CC ${controller} = ${value} on channel ${channel} to "${midiOutput}" for song "${newSong}"`
);
},
true // fire immediately with current value
);
Let me know if this helps!