X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fticker.cc;h=e02143e401f1764b8be388e4109e579df11e313e;hb=18713b7d1fc4a1fcec0a60f2c80a327b50b9c529;hp=9a2cff7b2363e2256fa8bc57eb33e73c752d4932;hpb=848e75aaeaa04a81883ed30bcd04abd862f9d1fd;p=ardour.git diff --git a/libs/ardour/ticker.cc b/libs/ardour/ticker.cc index 9a2cff7b23..e02143e401 100644 --- a/libs/ardour/ticker.cc +++ b/libs/ardour/ticker.cc @@ -25,6 +25,7 @@ #include "ardour/audioengine.h" #include "ardour/midi_buffer.h" #include "ardour/midi_port.h" +#include "ardour/lmath.h" #include "ardour/ticker.h" #include "ardour/session.h" #include "ardour/tempo.h" @@ -38,20 +39,20 @@ class MidiClockTicker::Position : public Timecode::BBT_Time { public: - Position() : speed(0.0f), frame(0) { } + Position() : speed(0.0f), frame(0), midi_beats(0) { } ~Position() { } - + /** Sync timing information taken from the given Session - * @return True if timings differed + * @return True if timings differed */ bool sync (Session* s) { bool changed = false; - + double sp = s->transport_speed(); framecnt_t fr = s->transport_frame(); - + if (speed != sp) { speed = sp; changed = true; @@ -74,7 +75,7 @@ public: double mb; /** Midi Beats in terms of Song Position Pointer is equivalent to total - * sixteenth notes at 'time' + * sixteenth notes at 'time' */ mb = (((bars - 1) * divisions) + beats - 1); @@ -94,7 +95,7 @@ public: framecnt_t frame; double midi_beats; double midi_clocks; - + void print (std::ostream& s) { s << "frames: " << frame << " midi beats: " << midi_beats << " speed: " << speed; } @@ -119,7 +120,7 @@ void MidiClockTicker::set_session (Session* s) { SessionHandlePtr::set_session (s); - + if (_session) { _session->TransportStateChange.connect_same_thread (_session_connections, boost::bind (&MidiClockTicker::transport_state_changed, this)); _session->TransportLooped.connect_same_thread (_session_connections, boost::bind (&MidiClockTicker::transport_looped, this)); @@ -229,7 +230,7 @@ MidiClockTicker::tick (const framepos_t& /* transport_frame */, pframes_t nframe send_position_event (llrint (_pos->midi_beats), 0, nframes); } else if (_pos->speed == 1.0f) { send_stop_event (0, nframes); - + if (_pos->frame == 0) { send_start_event (0, nframes); } else { @@ -248,21 +249,21 @@ MidiClockTicker::tick (const framepos_t& /* transport_frame */, pframes_t nframe if (_pos->speed == 1.0f) { if (_session->get_play_loop()) { assert(_session->locations()->auto_loop_location()); - + if (_pos->frame == _session->locations()->auto_loop_location()->start()) { send_start_event (0, nframes); } else { send_continue_event (0, nframes); } - + } else if (_pos->frame == 0) { send_start_event (0, nframes); } else { send_continue_event (0, nframes); } - + // send_midi_clock_event (0); - + } else if (_pos->speed == 0.0f) { send_stop_event (0, nframes); send_position_event (llrint (_pos->midi_beats), 0, nframes);