#include <istream>
#include <vector>
#include <map>
+#include <set>
#include <boost/shared_ptr.hpp>
#include <sys/types.h>
#include <stdint.h>
class Stripable;
class VCA;
class AutomationControl;
+ class SlavableAutomationControl;
typedef float Sample;
typedef float pan_t;
TrimAutomation,
PhaseAutomation,
MonitoringAutomation,
- EQGain,
- EQFrequency,
- EQQ,
- EQShape,
- EQHPF,
- EQEnable,
- CompThreshold,
- CompSpeed,
- CompMode,
- CompMakeup,
- CompRedux,
- CompEnable,
BusSendLevel,
- BusSendEnable,
+ BusSendEnable
};
enum AutoState {
std::string auto_state_to_string (AutoState);
AutoState string_to_auto_state (std::string);
- enum AutoStyle {
- Absolute = 0x1,
- Trim = 0x2
- };
-
- std::string auto_style_to_string (AutoStyle);
- AutoStyle string_to_auto_style (std::string);
-
enum AlignStyle {
CaptureTime,
ExistingMaterial
TrackColor
};
- enum LocaleMode {
- SET_LC_ALL,
- SET_LC_MESSAGES,
- SET_LC_MESSAGES_AND_LC_NUMERIC
- };
-
enum RoundMode {
RoundDownMaybe = -2, ///< Round down only if necessary
RoundDownAlways = -1, ///< Always round down, even if on a division
}
};
+ /* used for translating audio frames to an exact musical position using a note divisor.
+ an exact musical position almost never falls exactly on an audio frame, but for sub-sample
+ musical accuracy we need to derive exact musical locations from a frame position
+ the division follows TempoMap::exact_beat_at_frame().
+ division
+ -1 musical location is the bar closest to frame
+ 0 musical location is the musical position of the frame
+ 1 musical location is the BBT beat closest to frame
+ n musical location is the quarter-note division n closest to frame
+ */
+ struct MusicFrame {
+ framepos_t frame;
+ int32_t division;
+
+ MusicFrame (framepos_t f, int32_t d) : frame (f), division (d) {}
+
+ void set (framepos_t f, int32_t d) {frame = f; division = d; }
+
+ MusicFrame operator- (MusicFrame other) { return MusicFrame (frame - other.frame, 0); }
+ };
+
/* XXX: slightly unfortunate that there is this and Evoral::Range<>,
but this has a uint32_t id which Evoral::Range<> does not.
*/
typedef std::list<boost::weak_ptr <Route> > WeakRouteList;
typedef std::list<boost::weak_ptr <Stripable> > WeakStripableList;
typedef std::list<boost::shared_ptr<AutomationControl> > ControlList;
+ typedef std::list<boost::shared_ptr<SlavableAutomationControl> > SlavableControlList;
+ typedef std::set <boost::shared_ptr<AutomationControl> > AutomationControlSet;
typedef std::list<boost::shared_ptr<VCA> > VCAList;
} // namespace ARDOUR
-
-/* these cover types declared above in this header. See enums.cc
- for the definitions.
-*/
-std::istream& operator>>(std::istream& o, ARDOUR::SampleFormat& sf);
-std::istream& operator>>(std::istream& o, ARDOUR::HeaderFormat& sf);
-std::istream& operator>>(std::istream& o, ARDOUR::AutoConnectOption& sf);
-std::istream& operator>>(std::istream& o, ARDOUR::TracksAutoNamingRule& sf);
-std::istream& operator>>(std::istream& o, ARDOUR::EditMode& sf);
-std::istream& operator>>(std::istream& o, ARDOUR::MonitorModel& sf);
-std::istream& operator>>(std::istream& o, ARDOUR::MonitorChoice& sf);
-std::istream& operator>>(std::istream& o, ARDOUR::PFLPosition& sf);
-std::istream& operator>>(std::istream& o, ARDOUR::AFLPosition& sf);
-std::istream& operator>>(std::istream& o, ARDOUR::ListenPosition& sf);
-std::istream& operator>>(std::istream& o, ARDOUR::LayerModel& sf);
-std::istream& operator>>(std::istream& o, ARDOUR::InsertMergePolicy& sf);
-std::istream& operator>>(std::istream& o, ARDOUR::SyncSource& sf);
-std::istream& operator>>(std::istream& o, ARDOUR::ShuttleBehaviour& sf);
-std::istream& operator>>(std::istream& o, ARDOUR::ShuttleUnits& sf);
-std::istream& operator>>(std::istream& o, Timecode::TimecodeFormat& sf);
-std::istream& operator>>(std::istream& o, ARDOUR::DenormalModel& sf);
-std::istream& operator>>(std::istream& o, ARDOUR::PositionLockStyle& sf);
-std::istream& operator>>(std::istream& o, ARDOUR::FadeShape& sf);
-std::istream& operator>>(std::istream& o, ARDOUR::RegionSelectionAfterSplit& sf);
-std::istream& operator>>(std::istream& o, ARDOUR::BufferingPreset& var);
-std::istream& operator>>(std::istream& o, ARDOUR::AutoReturnTarget& sf);
-std::istream& operator>>(std::istream& o, ARDOUR::MeterType& sf);
-
-std::ostream& operator<<(std::ostream& o, const ARDOUR::SampleFormat& sf);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::HeaderFormat& sf);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::AutoConnectOption& sf);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::TracksAutoNamingRule& sf);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::EditMode& sf);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::MonitorModel& sf);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::MonitorChoice& sf);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::PFLPosition& sf);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::AFLPosition& sf);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::ListenPosition& sf);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::LayerModel& sf);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::InsertMergePolicy& sf);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::SyncSource& sf);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::ShuttleBehaviour& sf);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::ShuttleUnits& sf);
-std::ostream& operator<<(std::ostream& o, const Timecode::TimecodeFormat& sf);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::DenormalModel& sf);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::PositionLockStyle& sf);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::FadeShape& sf);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::RegionSelectionAfterSplit& sf);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::BufferingPreset& var);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::AutoReturnTarget& sf);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::MeterType& sf);
-
-/* because these operators work on types which can be used when making
- a UI_CONFIG_VARIABLE (in gtk2_ardour) we need them to be exported.
-*/
-LIBARDOUR_API std::istream& operator>>(std::istream& o, ARDOUR::WaveformScale& sf);
-LIBARDOUR_API std::istream& operator>>(std::istream& o, ARDOUR::WaveformShape& sf);
-LIBARDOUR_API std::istream& operator>>(std::istream& o, ARDOUR::VUMeterStandard& sf);
-LIBARDOUR_API std::istream& operator>>(std::istream& o, ARDOUR::MeterLineUp& sf);
-LIBARDOUR_API std::istream& operator>>(std::istream& o, ARDOUR::LocaleMode& sf);
-
-LIBARDOUR_API std::ostream& operator<<(std::ostream& o, const ARDOUR::WaveformScale& sf);
-LIBARDOUR_API std::ostream& operator<<(std::ostream& o, const ARDOUR::WaveformShape& sf);
-LIBARDOUR_API std::ostream& operator<<(std::ostream& o, const ARDOUR::VUMeterStandard& sf);
-LIBARDOUR_API std::ostream& operator<<(std::ostream& o, const ARDOUR::MeterLineUp& sf);
-LIBARDOUR_API std::ostream& operator<<(std::ostream& o, const ARDOUR::LocaleMode& sf);
-
-
static inline ARDOUR::framepos_t
session_frame_to_track_frame (ARDOUR::framepos_t session_frame, double speed)
{