X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fticker.h;h=f5cda677ede35c4852f9ce8c2e8923888f5ce1d2;hb=f25d9b122046d9ccf81108afc2fb466a32f9cbcc;hp=8e3ddd5547cd66a6bb8444067b15026b77c3977d;hpb=b3c3d932cd636819228803e7adb046936a16aa9d;p=ardour.git diff --git a/libs/ardour/ardour/ticker.h b/libs/ardour/ardour/ticker.h index 8e3ddd5547..f5cda677ed 100644 --- a/libs/ardour/ardour/ticker.h +++ b/libs/ardour/ardour/ticker.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2008 Hans Baier + Copyright (C) 2008 Hans Baier This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,35 +18,37 @@ $Id$ */ -#include + +#include "pbd/signals.h" #include "ardour/types.h" -#include "midi++/jack.h" +#include "ardour/session_handle.h" + #ifndef TICKER_H_ #define TICKER_H_ +namespace MIDI { + class Port; +} + namespace ARDOUR { class Session; -class Ticker : public sigc::trackable +class Ticker : public SessionHandlePtr { public: - Ticker() : _session(0) {}; - virtual ~Ticker() {}; - + Ticker() {}; + virtual ~Ticker() {} + virtual void tick( - const nframes_t& transport_frames, - const BBT_Time& transport_bbt, - const SMPTE::Time& transport_smpte) = 0; - - virtual void set_session(Session& s); - virtual void going_away() { _session = 0; } - -protected: - Session* _session; + const nframes_t& transport_frames, + const BBT_Time& transport_bbt, + const Timecode::Time& transport_timecode) = 0; + + void set_session (Session* s); }; class MidiClockTicker : public Ticker @@ -56,45 +58,45 @@ private: MidiClockTicker() : _midi_port(0), _ppqn(24), _last_tick(0.0) {}; MidiClockTicker( const MidiClockTicker& ); MidiClockTicker& operator= (const MidiClockTicker&); - + public: virtual ~MidiClockTicker() {}; - + static MidiClockTicker& instance() { static MidiClockTicker _instance; return _instance; } - + void tick( - const nframes_t& transport_frames, - const BBT_Time& transport_bbt, - const SMPTE::Time& transport_smpte); - - void set_session(Session& s); - void going_away() { _midi_port = 0; Ticker::going_away(); } + const nframes_t& transport_frames, + const BBT_Time& transport_bbt, + const Timecode::Time& transport_timecode); + + void set_session (Session* s); + void session_going_away(); /// 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::PositionChanged void position_changed(nframes_t position); /// slot for the signal session::TransportLooped void transport_looped(); - + /// pulses per quarter note (default 24) void set_ppqn(int ppqn) { _ppqn = ppqn; } -private: +private: MIDI::Port* _midi_port; int _ppqn; double _last_tick; double one_ppqn_in_frames(nframes_t transport_position); - + void send_midi_clock_event(nframes_t offset); void send_start_event(nframes_t offset); void send_continue_event(nframes_t offset);