en/disable internal send+returns with tracks en/disable.
[ardour.git] / libs / ardour / session_process.cc
index 6a24198bec303ca1799a7ea86394548d8ac309c8..680f2861de2a2bdae8e90515ea89c96ef1fdd0d8 100644 (file)
@@ -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: