+ /**
+ * 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
+ * <em>position</em> 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:
+ * <ul>
+ * <li>
+ * Slave::ok() should return true, otherwise playback will stop
+ * immediately and the method will not be called
+ * </li>
+ * <li>
+ * when the references speed and position are passed into the Slave
+ * they are uninitialized
+ * </li>
+ * </ul>
+ *
+ * After the method call the following postconditions should be met:
+ * <ul>
+ * <li>
+ * The first position value on transport start should be 0,
+ * otherwise ARDOUR will try to locate to the new position
+ * rather than move to it
+ * </li>
+ * <li>
+ * the references speed and position should be assigned
+ * to the Slaves current requested transport speed
+ * and transport position.
+ * </li>
+ * <li>
+ * Slave::resolution() should be greater than the maximum distance of
+ * ARDOURs transport position to the slaves requested transport position.
+ * </li>
+ * <li>Slave::locked() should return true, otherwise Session::no_roll will be called</li>
+ * <li>Slave::starting() should be false, otherwise the transport will not move until it becomes true</li> *
+ * </ul>
+ *
+ * @param speed - The transport speed requested
+ * @param position - The transport position requested
+ * @return - The return value is currently ignored (see Session::follow_slave)
+ */
+ virtual bool speed_and_position (double& speed, framepos_t& position) = 0;
+
+ /**
+ * reports to ARDOUR whether the Slave is currently synced to its external
+ * time source.
+ *
+ * @return - when returning false, the transport will stop rolling
+ */