+ /// slot for the signal session::MIDIClock_PortChanged
+ void update_midi_clock_port();
+
+ /// slot for the signal session::TransportStateChange
+ void transport_state_changed();
+
+ /// slot for the signal session::TransportLooped
+ void transport_looped();
+
+ /// slot for the signal session::Located
+ void session_located();
+
+ /// pulses per quarter note (default 24)
+ void set_ppqn(int ppqn) { _ppqn = ppqn; }
+
+ private:
+ boost::shared_ptr<MidiPort> _midi_port;
+ int _ppqn;
+ double _last_tick;
+ bool _send_pos;
+ bool _send_state;
+
+ class Position;
+ boost::scoped_ptr<Position> _pos;
+
+ double one_ppqn_in_frames (framepos_t transport_position);
+
+ void send_midi_clock_event (pframes_t offset, pframes_t nframes);
+ void send_start_event (pframes_t offset, pframes_t nframes);
+ void send_continue_event (pframes_t offset, pframes_t nframes);
+ void send_stop_event (pframes_t offset, pframes_t nframes);
+ void send_position_event (uint32_t midi_clocks, pframes_t offset, pframes_t nframes);
+};