From 3a61a355eeac2a0013c3f89ff7b28e0840879a90 Mon Sep 17 00:00:00 2001 From: Brent Baccala Date: Wed, 12 Nov 2025 19:07:32 -0500 Subject: [PATCH] MIDI PC/CC script: allow roll_transport() to start playback at a marker --- share/scripts/midi_pc_and_cc.lua | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/share/scripts/midi_pc_and_cc.lua b/share/scripts/midi_pc_and_cc.lua index 5976092685..3e72427b00 100644 --- a/share/scripts/midi_pc_and_cc.lua +++ b/share/scripts/midi_pc_and_cc.lua @@ -35,6 +35,9 @@ MIDI CC 93: end There's a convenience function to roll transport at a start time in seconds: MIDI CC 93: roll_transport(value, 0) +You can also roll transport at a marker: +MIDI CC 93: roll_transport(value, "01") + Another convenience function to activate or deactivate a plugin: MIDI CC 91: activate_processor_by_name(route, value, "Gigaverb") @@ -97,17 +100,34 @@ end -- -- a convenience function to start or stop the transport -- value is 0 to stop transport and not 0 to start transport --- location is a value in seconds +-- location is either a value in seconds or a string matching a marker + +function string.starts(String,Start) + return string.sub(String,1,string.len(Start))==Start +end function roll_transport(value, location) if value==0 then Session:request_stop (false, false, ARDOUR.TransportRequestSource.TRS_UI) else -- default value of location is 0 (start of session) - if not location then location = 0 end - start_sample = Session:nominal_sample_rate() * location; - Session:request_locate(location, false, ARDOUR.LocateTransportDisposition.MustStop, ARDOUR.TransportRequestSource.TRS_UI) - Session:request_roll (ARDOUR.TransportRequestSource.TRS_UI) + if not location then + start_sample = 0 + elseif type(location) == "string" then + for loc in Session:locations():list():iter() do + if loc:is_mark() then + if string.starts(loc:name(), location) then + start_sample = loc:start():samples(); + end + end + end + else + start_sample = Session:nominal_sample_rate() * location; + end + if start_sample then + Session:request_locate(start_sample, false, ARDOUR.LocateTransportDisposition.MustStop, ARDOUR.TransportRequestSource.TRS_UI) + Session:request_roll (ARDOUR.TransportRequestSource.TRS_UI) + end end end