ardour
|
The Slave interface can be used to sync ARDOURs tempo to an external source like MTC, MIDI Clock, etc. More...
#include <slave.h>
Public Member Functions | |
Slave () | |
virtual | ~Slave () |
virtual bool | speed_and_position (double &speed, framepos_t &position)=0 |
virtual bool | locked () const =0 |
virtual bool | ok () const =0 |
virtual bool | starting () const |
virtual framecnt_t | resolution () const =0 |
virtual bool | requires_seekahead () const =0 |
virtual framecnt_t | seekahead_distance () const |
virtual bool | is_always_synced () const |
virtual bool | give_slave_full_control_over_transport_speed () const |
virtual std::string | approximate_current_delta () const |
The Slave interface can be used to sync ARDOURs tempo to an external source like MTC, MIDI Clock, etc.
The name of the interface may be a bit misleading: A subclass of Slave actually acts as a time master for ARDOUR, that means ARDOUR will try to follow the speed and transport position of the implementation of Slave. Therefore it is rather that class, that makes ARDOUR a slave by connecting it to its external time master.
|
inlinevirtual |
Reimplemented in ARDOUR::MIDIClock_Slave, ARDOUR::LTC_Slave, and ARDOUR::MTC_Slave.
|
inlinevirtual |
Reimplemented in ARDOUR::MIDIClock_Slave, ARDOUR::LTC_Slave, and ARDOUR::MTC_Slave.
|
inlinevirtual |
Reimplemented in ARDOUR::Engine_Slave.
|
pure virtual |
reports to ARDOUR whether the Slave is currently synced to its external time source.
Implemented in ARDOUR::Engine_Slave, ARDOUR::MIDIClock_Slave, ARDOUR::LTC_Slave, and ARDOUR::MTC_Slave.
|
pure virtual |
reports to ARDOUR whether the slave is in a sane state
Implemented in ARDOUR::Engine_Slave, ARDOUR::MIDIClock_Slave, ARDOUR::LTC_Slave, and ARDOUR::MTC_Slave.
|
pure virtual |
Implemented in ARDOUR::Engine_Slave, ARDOUR::MIDIClock_Slave, ARDOUR::LTC_Slave, and ARDOUR::MTC_Slave.
|
pure virtual |
Implemented in ARDOUR::Engine_Slave, ARDOUR::MIDIClock_Slave, ARDOUR::LTC_Slave, and ARDOUR::MTC_Slave.
|
inlinevirtual |
Reimplemented in ARDOUR::LTC_Slave, and ARDOUR::MTC_Slave.
|
pure virtual |
This is the most important function to implement: Each process cycle, Session::follow_slave will call this method. and after the method call they should
Session::follow_slave will then try to follow the given position using a delay locked loop (DLL), starting with the first given transport speed. If the values of speed and position contradict each other, ARDOUR will always follow the position and disregard the speed. Although, a correct speed is important so that ARDOUR can sync to the master time source quickly.
For background information on delay locked loops, see http://www.kokkinizita.net/papers/usingdll.pdf
The method has the following precondition:
After the method call the following postconditions should be met:
Implemented in ARDOUR::Engine_Slave, ARDOUR::MIDIClock_Slave, ARDOUR::LTC_Slave, and ARDOUR::MTC_Slave.
|
inlinevirtual |
reports to ARDOUR whether the slave is in the process of starting to roll
Reimplemented in ARDOUR::Engine_Slave, and ARDOUR::MIDIClock_Slave.