diff --git a/share/scripts/trigger_mixer_scene.lua b/share/scripts/trigger_mixer_scene.lua new file mode 100644 index 0000000000..23355e6a07 --- /dev/null +++ b/share/scripts/trigger_mixer_scene.lua @@ -0,0 +1,48 @@ +ardour { + ["type"] = "session", + name = "Mixer Scene Sequencer", + license = "MIT", + author = "John Devlin, Robin Gareus", + description = [[Recall a Mixer Scene when the playhead passes over a Marker named 'MS ' where indicates the scene to recall.]] +} + +function factory () + + local MIXER_SCENE_MARKER_PREFIX = "MS " + + return function (n_samples) + if (not Session:transport_rolling()) then + -- not rolling, nothing to do. + return + end + + local pos = Session:transport_sample() -- current playhead position + local loc = Session:locations() -- all marker locations + + local tpos = Temporal.timepos_t(pos) + local mpos = loc:first_mark_after(tpos, false) + + if (mpos == Temporal.timepos_t.max(tpos:time_domain())) then + -- no marker was found + return + end + + local mloc = loc:first_mark_at(mpos, Temporal.timecnt_t(0)) + if not mloc then + -- no marker found at that location + return + end + + if (pos + n_samples > mpos:samples()) then + -- the marker is within this sample block + if mloc:name():sub(1, MIXER_SCENE_MARKER_PREFIX:len()) == MIXER_SCENE_MARKER_PREFIX then + -- the marker name begins with MIXER_SCENE_MARKER_PREFIX: get the remainder of the name (should be a number) + local msNum = tonumber(mloc:name():sub(MIXER_SCENE_MARKER_PREFIX:len() + 1)) + if msNum and msNum >= 1 and msNum <= 8 then + Session:apply_nth_mixer_scene(msNum - 1) + end + end + end + + end +end