From 0d077ee67618f059ea597bea9c34c78f1fba18e6 Mon Sep 17 00:00:00 2001 From: Hans Baier Date: Wed, 6 Aug 2008 23:35:15 +0000 Subject: [PATCH] * I dont know whether this works, but I'll commit it anyway git-svn-id: svn://localhost/ardour2/branches/3.0@3665 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/ardour/slave.h | 2 ++ libs/ardour/midi_clock_slave.cc | 23 ++++++++++++++--------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/libs/ardour/ardour/slave.h b/libs/ardour/ardour/slave.h index 6efab3ff95..4831fd0c98 100644 --- a/libs/ardour/ardour/slave.h +++ b/libs/ardour/ardour/slave.h @@ -114,6 +114,7 @@ class MIDIClock_Slave : public Slave, public sigc::trackable { bool locked() const; bool ok() const; + bool starting() const { return _starting; } nframes_t resolution() const; bool requires_seekahead () const { return true; } @@ -139,6 +140,7 @@ class MIDIClock_Slave : public Slave, public sigc::trackable { void stop (MIDI::Parser& parser); void update_midi_clock (MIDI::Parser& parser); void read_current (SafeTime *) const; + bool _starting; bool _started; }; diff --git a/libs/ardour/midi_clock_slave.cc b/libs/ardour/midi_clock_slave.cc index 4b6efdd949..9b1ba935ac 100644 --- a/libs/ardour/midi_clock_slave.cc +++ b/libs/ardour/midi_clock_slave.cc @@ -82,7 +82,7 @@ MIDIClock_Slave::update_midi_clock (Parser& parser) const Tempo& current_tempo = session.tempo_map().tempo_at(now); const Meter& current_meter = session.tempo_map().meter_at(now); double frames_per_beat = - current_tempo.frames_per_beat(session.nominal_frame_rate(), + current_tempo.frames_per_beat(session.frame_rate(), current_meter); double quarter_notes_per_beat = 4.0 / current_tempo.note_type(); @@ -121,8 +121,10 @@ MIDIClock_Slave::start (Parser& parser) { std::cerr << "MIDIClock_Slave got start message" << endl; - midi_clock_speed = 1.0f; - _started = true; + session.request_transport_speed (1.0); + midi_clock_speed = 1.0; + _starting = true; + _started = true; } void @@ -130,14 +132,12 @@ MIDIClock_Slave::stop (Parser& parser) { std::cerr << "MIDIClock_Slave got stop message" << endl; + session.request_transport_speed (0); midi_clock_speed = 0.0f; midi_clock_frame = 0; + _starting = false; _started = false; - - current.guard1++; - current.position = midi_clock_frame; - current.timestamp = 0; - current.guard2++; + reset(); } void @@ -199,7 +199,12 @@ MIDIClock_Slave::speed_and_position (float& speed, nframes_t& pos) return false; } - speed_now = (float) ((last.position - first_midi_clock_frame) / (double) (now - first_midi_clock_time)); + if(_starting) { + speed_now = 1.0; + _starting = false; + } else { + speed_now = (float) ((last.position - first_midi_clock_frame) / (double) (now - first_midi_clock_time)); + } cerr << "speed_and_position: speed_now: " << speed_now ;