some love for session-scripts.

This commit is contained in:
Robin Gareus 2016-05-14 23:59:32 +02:00
parent fe74c587f3
commit c560ca67bd
2 changed files with 46 additions and 5 deletions

View File

@ -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 ()

View 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