diff options
author | Robin Gareus <robin@gareus.org> | 2017-01-19 13:03:57 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2017-01-19 13:05:54 +0100 |
commit | 9c08a403c4c0a169acf44c741af1c40b16e23795 (patch) | |
tree | a237c82529b9e2bfddbac109336b0c807851c94e /libs/ardour/session_transport.cc | |
parent | e959a762b5a0d09b92a95e2171a22d86b655a1c5 (diff) |
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)
Diffstat (limited to 'libs/ardour/session_transport.cc')
-rw-r--r-- | libs/ardour/session_transport.cc | 27 |
1 files changed, 27 insertions, 0 deletions
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 @@ -171,12 +171,19 @@ Session::unset_preroll_record_punch () } void +Session::unset_preroll_record_trim () +{ + _preroll_record_trim_len = 0; +} + +void Session::request_preroll_record_punch (framepos_t rec_in, framecnt_t preroll) { if (actively_recording ()) { 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; @@ -191,6 +198,25 @@ Session::request_preroll_record_punch (framepos_t rec_in, framecnt_t preroll) } 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) { if (_slave && yn) { @@ -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. */ |