some love for session-scripts.
This commit is contained in:
parent
fe74c587f3
commit
c560ca67bd
@ -1,15 +1,14 @@
|
||||
ardour {
|
||||
["type"] = "session",
|
||||
name = "Example",
|
||||
name = "Good Night",
|
||||
license = "MIT",
|
||||
author = "Robin Gareus",
|
||||
email = "robin@gareus.org",
|
||||
site = "http://gareus.org",
|
||||
description = [[
|
||||
An Example Ardour Session Process Plugin.
|
||||
Install a 'hook' that is called on every process cycle
|
||||
(before doing any processing).
|
||||
This example stops the transport after rolling for a specific time.]]
|
||||
Example Ardour Session Script.
|
||||
Session scripts are called at the beginning of every process-callback (before doing any audio processing).
|
||||
This example stops the transport after rolling for a configurable time which can be set when instantiating the script.]]
|
||||
}
|
||||
|
||||
function sess_params ()
|
||||
|
42
scripts/stop_at_marker.lua
Normal file
42
scripts/stop_at_marker.lua
Normal file
@ -0,0 +1,42 @@
|
||||
ardour {
|
||||
["type"] = "session",
|
||||
name = "Stop at Marker",
|
||||
license = "MIT",
|
||||
author = "Robin Gareus",
|
||||
email = "robin@gareus.org",
|
||||
site = "http://gareus.org",
|
||||
description = [[An example session script which stops the transport on every location marker when rolling forward.]]
|
||||
}
|
||||
|
||||
function factory ()
|
||||
return function (n_samples)
|
||||
if (not Session:transport_rolling ()) then
|
||||
-- not rolling, nothing to do.
|
||||
return
|
||||
end
|
||||
|
||||
local pos = Session:transport_frame () -- current playhead position
|
||||
local loc = Session:locations () -- all marker locations
|
||||
|
||||
-- find first marker after the current playhead position, ignore loop + punch ranges
|
||||
-- (this only works when rolling forward, to extend this example see
|
||||
-- http://manual.ardour.org/lua-scripting/class_reference/#ARDOUR:Locations )
|
||||
local m = loc:first_mark_after (pos, false)
|
||||
|
||||
if (m == -1) then
|
||||
-- no marker was found
|
||||
return
|
||||
end
|
||||
|
||||
-- since ardour may split the process cycle for events,
|
||||
-- n_samples may be smaller.
|
||||
local blk = Session:get_block_size ()
|
||||
|
||||
-- transport stop can only happen on a process-cycle boundary.
|
||||
-- This callback happens from within the process callback,
|
||||
-- so we need to queue it ahead of time.
|
||||
if (pos + n_samples + blk >= m and pos + n_samples < m) then
|
||||
Session:request_transport_speed (0.0, true)
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue
Block a user