summaryrefslogtreecommitdiff
path: root/libs/ardour/midi_clock_slave.cc
diff options
context:
space:
mode:
authorHans Baier <hansfbaier@googlemail.com>2008-08-06 23:35:15 +0000
committerHans Baier <hansfbaier@googlemail.com>2008-08-06 23:35:15 +0000
commit0d077ee67618f059ea597bea9c34c78f1fba18e6 (patch)
tree307a17e514efc09cd02925e72a974cf9c30c18bc /libs/ardour/midi_clock_slave.cc
parentce38b9cfc5dad1a303bdd877e936b25563827710 (diff)
* 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
Diffstat (limited to 'libs/ardour/midi_clock_slave.cc')
-rw-r--r--libs/ardour/midi_clock_slave.cc23
1 files changed, 14 insertions, 9 deletions
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 ;