From 9c08a403c4c0a169acf44c741af1c40b16e23795 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Thu, 19 Jan 2017 13:03:57 +0100 Subject: Add alternative preroll record mode: * Start recording at preroll, trim region to skip preroll at rec-stop * Keep old punch-in rec-at-preroll API for tape-tracks (later) --- libs/ardour/session_transport.cc | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'libs/ardour/session_transport.cc') diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc index 35eb02bf3c..4a729700ab 100644 --- a/libs/ardour/session_transport.cc +++ b/libs/ardour/session_transport.cc @@ -170,6 +170,12 @@ Session::unset_preroll_record_punch () _preroll_record_punch_pos = -1; } +void +Session::unset_preroll_record_trim () +{ + _preroll_record_trim_len = 0; +} + void Session::request_preroll_record_punch (framepos_t rec_in, framecnt_t preroll) { @@ -177,6 +183,7 @@ Session::request_preroll_record_punch (framepos_t rec_in, framecnt_t preroll) return; } unset_preroll_record_punch (); + unset_preroll_record_trim (); framepos_t start = std::max ((framepos_t)0, rec_in - preroll); _preroll_record_punch_pos = rec_in; @@ -190,6 +197,25 @@ Session::request_preroll_record_punch (framepos_t rec_in, framecnt_t preroll) set_requested_return_frame (rec_in); } +void +Session::request_preroll_record_trim (framepos_t rec_in, framecnt_t preroll) +{ + if (actively_recording ()) { + return; + } + unset_preroll_record_punch (); + unset_preroll_record_trim (); + + config.set_punch_in (false); + config.set_punch_out (false); + + framepos_t pos = std::max ((framepos_t)0, rec_in - preroll); + _preroll_record_trim_len = preroll; + maybe_enable_record (); + request_locate (pos, true); + set_requested_return_frame (rec_in); +} + void Session::request_play_loop (bool yn, bool change_transport_roll) { @@ -819,6 +845,7 @@ Session::non_realtime_stop (bool abort, int on_entry, bool& finished) } clear_clicks(); + unset_preroll_record_trim (); /* do this before seeking, because otherwise the tracks will do the wrong thing in seamless loop mode. */ -- cgit v1.2.3