X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fsession_process.cc;h=680f2861de2a2bdae8e90515ea89c96ef1fdd0d8;hb=f6aaa1660bbce1782b8292d106c8adfb1ecbdc16;hp=6a24198bec303ca1799a7ea86394548d8ac309c8;hpb=1ab61b8564f9934c533d1c1a229888bc7e2fd557;p=ardour.git diff --git a/libs/ardour/session_process.cc b/libs/ardour/session_process.cc index 6a24198bec..680f2861de 100644 --- a/libs/ardour/session_process.cc +++ b/libs/ardour/session_process.cc @@ -35,6 +35,7 @@ #include "ardour/graph.h" #include "ardour/port.h" #include "ardour/process_thread.h" +#include "ardour/scene_changer.h" #include "ardour/session.h" #include "ardour/slave.h" #include "ardour/ticker.h" @@ -83,9 +84,12 @@ Session::process (pframes_t nframes) */ try { - if (!_engine.freewheeling() && Config->get_send_midi_clock() && transport_speed() == 1.0f && midi_clock->has_midi_port()) { + if (!_silent && !_engine.freewheeling() && Config->get_send_midi_clock() && (transport_speed() == 1.0f || transport_speed() == 0.0f) && midi_clock->has_midi_port()) { midi_clock->tick (transport_at_start, nframes); } + + _scene_changer->run (transport_at_start, transport_at_start + nframes); + } catch (...) { /* don't bother with a message */ } @@ -421,7 +425,9 @@ Session::process_with_events (pframes_t nframes) check_declick_out (); } - _engine.split_cycle (this_nframes); + if (nframes > 0) { + _engine.split_cycle (this_nframes); + } /* now handle this event and all others scheduled for the same time */ @@ -491,7 +497,6 @@ Session::follow_slave (pframes_t nframes) goto noroll; } - _slave->process (nframes); _slave->speed_and_position (slave_speed, slave_transport_frame); DEBUG_TRACE (DEBUG::Slave, string_compose ("Slave position %1 speed %2\n", slave_transport_frame, slave_speed)); @@ -874,7 +879,7 @@ Session::process_audition (pframes_t nframes) /* if using a monitor section, run it because otherwise we don't hear anything */ - if (auditioner->needs_monitor()) { + if (_monitor_out && auditioner->needs_monitor()) { _monitor_out->monitor_run (_transport_frame, _transport_frame + nframes, nframes, false); } @@ -1009,7 +1014,7 @@ Session::process_event (SessionEvent* ev) switch (ev->type) { case SessionEvent::SetLoop: - set_play_loop (ev->yes_or_no); + set_play_loop (ev->yes_or_no, ev->speed); break; case SessionEvent::AutoLoop: