diff options
author | Hans Baier <hansfbaier@googlemail.com> | 2008-10-25 08:28:10 +0000 |
---|---|---|
committer | Hans Baier <hansfbaier@googlemail.com> | 2008-10-25 08:28:10 +0000 |
commit | fd824717a73676e2da3ff05eaba3dd4214239863 (patch) | |
tree | fb057077f6659d68f775e007cd17bafa7e4efde2 /libs/ardour | |
parent | 33d02c79023f0763321ffc31024ead0f11999f29 (diff) |
* fixed jitter problems for midi clock and removed superfluous UI elements
git-svn-id: svn://localhost/ardour2/branches/3.0@4008 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour')
-rw-r--r-- | libs/ardour/ardour/configuration_vars.h | 1 | ||||
-rw-r--r-- | libs/ardour/ardour/session.h | 10 | ||||
-rw-r--r-- | libs/ardour/ardour/slave.h | 6 | ||||
-rw-r--r-- | libs/ardour/midi_clock_slave.cc | 23 | ||||
-rw-r--r-- | libs/ardour/session_midi.cc | 27 |
5 files changed, 34 insertions, 33 deletions
diff --git a/libs/ardour/ardour/configuration_vars.h b/libs/ardour/ardour/configuration_vars.h index f433cf94a7..055d47b7c1 100644 --- a/libs/ardour/ardour/configuration_vars.h +++ b/libs/ardour/ardour/configuration_vars.h @@ -36,7 +36,6 @@ CONFIG_VARIABLE (bool, trace_midi_output, "trace-midi-output", false) CONFIG_VARIABLE (bool, send_mtc, "send-mtc", false) CONFIG_VARIABLE (bool, send_mmc, "send-mmc", true) CONFIG_VARIABLE (bool, mmc_control, "mmc-control", true) -CONFIG_VARIABLE (bool, midi_clock_control, "midi-clock-control", false) CONFIG_VARIABLE (bool, midi_feedback, "midi-feedback", false) CONFIG_VARIABLE (uint8_t, mmc_receive_device_id, "mmc-receive-device-id", 0) CONFIG_VARIABLE (uint8_t, mmc_send_device_id, "mmc-send-device-id", 0) diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index dff59e0243..ff2bc9c127 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -1306,13 +1306,9 @@ class Session : public PBD::StatefulDestructible void deliver_mmc (MIDI::MachineControl::Command, nframes_t); - void spp_start (MIDI::Parser&); - void spp_continue (MIDI::Parser&); - void spp_stop (MIDI::Parser&); - - void midi_clock_start (MIDI::Parser&); - void midi_clock_continue (MIDI::Parser&); - void midi_clock_stop (MIDI::Parser&); + void spp_start (MIDI::Parser&, nframes_t timestamp); + void spp_continue (MIDI::Parser&, nframes_t timestamp); + void spp_stop (MIDI::Parser&, nframes_t timestamp); void mmc_deferred_play (MIDI::MachineControl &); void mmc_stop (MIDI::MachineControl &); diff --git a/libs/ardour/ardour/slave.h b/libs/ardour/ardour/slave.h index 7c7f1d98ce..9460d4d83c 100644 --- a/libs/ardour/ardour/slave.h +++ b/libs/ardour/ardour/slave.h @@ -143,9 +143,9 @@ class MIDIClock_Slave : public Slave, public sigc::trackable { float average; void reset (); - void start (MIDI::Parser& parser); - void stop (MIDI::Parser& parser); - void update_midi_clock (MIDI::Parser& parser); + void start (MIDI::Parser& parser, nframes_t timestamp); + void stop (MIDI::Parser& parser, nframes_t timestamp); + void update_midi_clock (MIDI::Parser& parser, nframes_t timestamp); void read_current (SafeTime *) const; bool _started; diff --git a/libs/ardour/midi_clock_slave.cc b/libs/ardour/midi_clock_slave.cc index 42ce24c438..aee640e16e 100644 --- a/libs/ardour/midi_clock_slave.cc +++ b/libs/ardour/midi_clock_slave.cc @@ -26,12 +26,14 @@ #include <pbd/pthread_utils.h> #include <midi++/port.h> +#include <midi++/jack.h> #include <ardour/slave.h> #include <ardour/session.h> #include <ardour/audioengine.h> #include <ardour/cycles.h> #include <ardour/tempo.h> + #include "i18n.h" using namespace ARDOUR; @@ -73,9 +75,9 @@ MIDIClock_Slave::rebind (MIDI::Port& p) } void -MIDIClock_Slave::update_midi_clock (Parser& parser) +MIDIClock_Slave::update_midi_clock (Parser& parser, nframes_t timestamp) { - nframes_t now = session.engine().frame_time(); + nframes_t now = timestamp; SafeTime last; read_current (&last); @@ -109,8 +111,14 @@ MIDIClock_Slave::update_midi_clock (Parser& parser) average += accumulator[i]; average /= accumulator_size; + JACK_MidiPort *jack_port = dynamic_cast<JACK_MidiPort *>(port); + pthread_t process_thread_id = 0; + if(jack_port) { + process_thread_id = jack_port->get_process_thread(); + } - std::cerr << "got MIDI Clock message at time " << now + std::cerr << "Thread " << pthread_name() << " with id " << pthread_self() << " process Thread ID: " << process_thread_id + << " got MIDI Clock message at time " << now << " real delta: " << midi_clock_frame << " reference: " << one_ppqn_in_frames << " accu index: " << accumulator_index @@ -127,7 +135,7 @@ MIDIClock_Slave::update_midi_clock (Parser& parser) } void -MIDIClock_Slave::start (Parser& parser) +MIDIClock_Slave::start (Parser& parser, nframes_t timestamp) { nframes_t now = session.engine().frame_time(); @@ -154,7 +162,7 @@ MIDIClock_Slave::start (Parser& parser) } void -MIDIClock_Slave::stop (Parser& parser) +MIDIClock_Slave::stop (Parser& parser, nframes_t timestamp) { std::cerr << "MIDIClock_Slave got stop message" << endl; @@ -225,7 +233,7 @@ MIDIClock_Slave::speed_and_position (float& speed, nframes_t& pos) pos = last.position; session.request_locate (pos, false); session.request_transport_speed (0); - this->stop(*port->input()); + this->stop(*port->input(), now); reset(); return false; } @@ -238,7 +246,8 @@ MIDIClock_Slave::speed_and_position (float& speed, nframes_t& pos) speed = midi_clock_speed; - cerr << " final speed: " << speed << " elapsed: " << elapsed << " elapsed (scaled) " << elapsed * speed << " position: " << pos << endl; + cerr << " final speed: " << speed << " elapsed: " << elapsed << " elapsed (scaled) " << elapsed * speed << " position: " << pos + << " Thread ID: " << pthread_self() << endl; return true; } diff --git a/libs/ardour/session_midi.cc b/libs/ardour/session_midi.cc index dd927a3add..64903f24a2 100644 --- a/libs/ardour/session_midi.cc +++ b/libs/ardour/session_midi.cc @@ -317,10 +317,6 @@ Session::set_midi_clock_port (string port_tag) Config->set_midi_clock_port_name (port_tag); - _midi_clock_port->input()->start.connect (mem_fun (*this, &Session::midi_clock_start)); - _midi_clock_port->input()->contineu.connect (mem_fun (*this, &Session::midi_clock_continue)); - _midi_clock_port->input()->stop.connect (mem_fun (*this, &Session::midi_clock_stop)); - out: MIDIClock_PortChanged(); /* EMIT SIGNAL */ change_midi_ports (); @@ -496,7 +492,7 @@ Session::setup_midi_control () } void -Session::spp_start (Parser& ignored) +Session::spp_start (Parser& ignored, nframes_t timestamp) { if (Config->get_mmc_control() && (Config->get_slave_source() != MTC)) { request_transport_speed (1.0); @@ -504,40 +500,41 @@ Session::spp_start (Parser& ignored) } void -Session::spp_continue (Parser& ignored) +Session::spp_continue (Parser& ignored, nframes_t timestamp) { - spp_start (ignored); + spp_start (ignored, timestamp); } void -Session::spp_stop (Parser& ignored) +Session::spp_stop (Parser& ignored, nframes_t timestamp) { if (Config->get_mmc_control()) { request_stop (); } } - +/* void -Session::midi_clock_start (Parser& ignored) +Session::midi_clock_start (Parser& ignored, nframes_t timestamp) { - if (Config->get_midi_clock_control() && (Config->get_slave_source() == MIDIClock)) { + if (Config->get_slave_source() == MIDIClock) { request_transport_speed (1.0); } } void -Session::midi_clock_continue (Parser& ignored) +Session::midi_clock_continue (Parser& parser, nframes_t timestamp) { - midi_clock_start (ignored); + midi_clock_start (parser, 0); } void -Session::midi_clock_stop (Parser& ignored) +Session::midi_clock_stop (Parser& ignored, nframes_t timestamp) { - if (Config->get_midi_clock_control()) { + if (Config->get_slave_source() == MIDIClock) { request_stop (); } } +*/ void Session::mmc_deferred_play (MIDI::MachineControl &mmc) |