X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fticker.h;h=fbca0161d4fd29356807a757cf2d7071cc4cbc27;hb=eaa1dacf5fc9537cfff36e2339bd07aab348aa2e;hp=f87bca665d15b2a5e65c156c5b3ea6ea3201517c;hpb=bb9cc45cd22af67ac275a5e73accbe14fee664d8;p=ardour.git diff --git a/libs/ardour/ardour/ticker.h b/libs/ardour/ardour/ticker.h index f87bca665d..fbca0161d4 100644 --- a/libs/ardour/ardour/ticker.h +++ b/libs/ardour/ardour/ticker.h @@ -18,60 +18,36 @@ $Id$ */ -#include +#include +#include -#include "ardour/types.h" -#include "midi++/jack.h" - -#ifndef TICKER_H_ -#define TICKER_H_ - -namespace ARDOUR -{ +#include "pbd/signals.h" -class Session; +#include "ardour/libardour_visibility.h" +#include "ardour/types.h" +#include "ardour/session_handle.h" -class Ticker : public sigc::trackable -{ -public: - Ticker() : _session(0) {}; - virtual ~Ticker() {}; - virtual void tick( - const nframes_t& transport_frames, - const BBT_Time& transport_bbt, - const SMPTE::Time& transport_smpte) = 0; +#ifndef __libardour_ticker_h__ +#define __libardour_ticker_h__ - virtual void set_session(Session& s); - virtual void going_away() { _session = 0; } +namespace ARDOUR { -protected: - Session* _session; -}; +class Session; +class MidiPort; -class MidiClockTicker : public Ticker +class LIBARDOUR_API MidiClockTicker : public SessionHandlePtr, boost::noncopyable { - /// Singleton -private: - MidiClockTicker() : _midi_port(0), _ppqn(24), _last_tick(0.0) {}; - MidiClockTicker( const MidiClockTicker& ); - MidiClockTicker& operator= (const MidiClockTicker&); - public: - virtual ~MidiClockTicker() {}; + MidiClockTicker (); + virtual ~MidiClockTicker(); - static MidiClockTicker& instance() { - static MidiClockTicker _instance; - return _instance; - } + void tick (const framepos_t& transport_frames, pframes_t nframes); - void tick( - const nframes_t& transport_frames, - const BBT_Time& transport_bbt, - const SMPTE::Time& transport_smpte); + bool has_midi_port() const { return _midi_port != 0; } - void set_session(Session& s); - void going_away() { _midi_port = 0; Ticker::going_away(); } + void set_session (Session* s); + void session_going_away(); /// slot for the signal session::MIDIClock_PortChanged void update_midi_clock_port(); @@ -79,28 +55,34 @@ public: /// slot for the signal session::TransportStateChange void transport_state_changed(); - /// slot for the signal session::PositionChanged - void position_changed(nframes_t position); - /// 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: - MIDI::Port* _midi_port; - int _ppqn; - double _last_tick; + private: + boost::shared_ptr _midi_port; + int _ppqn; + double _last_tick; + bool _send_pos; + bool _send_state; - double one_ppqn_in_frames(nframes_t transport_position); + class Position; + boost::scoped_ptr _pos; - void send_midi_clock_event(nframes_t offset); - void send_start_event(nframes_t offset); - void send_continue_event(nframes_t offset); - void send_stop_event(nframes_t offset); -}; + 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); +}; } + // namespace -#endif /* TICKER_H_ */ +#endif /* __libardour_ticker_h__ */