#include "ardour/ticker.h"
#include "ardour/types.h"
-#include "midi++/manager.h"
#include "midi++/mmc.h"
#include "i18n.h"
-#include <xmmintrin.h>
-
using namespace ARDOUR;
using namespace PBD;
using namespace std;
try {
if (!_engine.freewheeling() && Config->get_send_midi_clock() && transport_speed() == 1.0f && midi_clock->has_midi_port()) {
- midi_clock->tick (transport_at_start);
+ midi_clock->tick (transport_at_start, nframes);
}
} catch (...) {
/* don't bother with a message */
PT_TIMING_CHECK (10);
for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
- if ((*i)->is_hidden()) {
+ if ((*i)->is_auditioner()) {
continue;
}
int ret;
- if ((*i)->is_hidden()) {
+ if ((*i)->is_auditioner()) {
continue;
}
int ret;
- if ((*i)->is_hidden()) {
+ if ((*i)->is_auditioner()) {
continue;
}
* and prepare for rolling)
*/
if (_send_timecode_update) {
- send_full_time_code (_transport_frame);
+ send_full_time_code (_transport_frame, nframes);
}
if (!process_can_proceed()) {
}
end_frame = _transport_frame + frames_moved;
- _transport_frame = std::max((ARDOUR::framepos_t) 0, _transport_frame);
{
SessionEvent* this_event;
slave_speed = 0.0f;
}
- if (_slave->is_always_synced() || Config->get_timecode_source_is_synced()) {
+ if (_slave->is_always_synced() ||
+ (Config->get_timecode_source_is_synced() && (dynamic_cast<TimecodeSlave*>(_slave)) != 0)
+ ) {
/* if the TC source is synced, then we assume that its
speed is binary: 0.0 or 1.0
_slave_state, slave_transport_frame, slave_speed, this_delta, average_slave_delta));
- if (_slave_state == Running && !_slave->is_always_synced() && !Config->get_timecode_source_is_synced()) {
+ if (_slave_state == Running && !_slave->is_always_synced() &&
+ !(Config->get_timecode_source_is_synced() && (dynamic_cast<TimecodeSlave*>(_slave)) != 0)
+ ) {
if (_transport_speed != 0.0f) {
boost::shared_ptr<RouteList> r = routes.reader ();
for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
- if (!(*i)->is_hidden()) {
+ if (!(*i)->is_auditioner()) {
(*i)->silence (nframes);
}
}
/* if using a monitor section, run it because otherwise we don't hear anything */
if (auditioner->needs_monitor()) {
- _monitor_out->passthru (_transport_frame, _transport_frame + nframes, nframes, false);
+ _monitor_out->monitor_run (_transport_frame, _transport_frame + nframes, nframes, false);
}
/* handle pending events */
if (!Config->get_stop_at_session_end ()) {
return max_framepos;
}
+
+ if (_slave) {
+ return max_framepos;
+ }
+
bool const punching_in = (config.get_punch_in () && _locations->auto_punch_location());
bool const punching_out = (config.get_punch_out () && _locations->auto_punch_location());