some love for session-scripts.
This commit is contained in:
parent
fe74c587f3
commit
c560ca67bd
@ -1,15 +1,14 @@
|
|||||||
ardour {
|
ardour {
|
||||||
["type"] = "session",
|
["type"] = "session",
|
||||||
name = "Example",
|
name = "Good Night",
|
||||||
license = "MIT",
|
license = "MIT",
|
||||||
author = "Robin Gareus",
|
author = "Robin Gareus",
|
||||||
email = "robin@gareus.org",
|
email = "robin@gareus.org",
|
||||||
site = "http://gareus.org",
|
site = "http://gareus.org",
|
||||||
description = [[
|
description = [[
|
||||||
An Example Ardour Session Process Plugin.
|
Example Ardour Session Script.
|
||||||
Install a 'hook' that is called on every process cycle
|
Session scripts are called at the beginning of every process-callback (before doing any audio processing).
|
||||||
(before doing any processing).
|
This example stops the transport after rolling for a configurable time which can be set when instantiating the script.]]
|
||||||
This example stops the transport after rolling for a specific time.]]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function sess_params ()
|
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