class AudioSource;
class Route;
class Region;
+ class Stripable;
+ class VCA;
+ class AutomationControl;
typedef float Sample;
typedef float pan_t;
*/
enum InsertMergePolicy {
- InsertMergeReject, // no overlaps allowed
- InsertMergeRelax, // we just don't care about overlaps
- InsertMergeReplace, // replace old with new
- InsertMergeTruncateExisting, // shorten existing to avoid overlap
- InsertMergeTruncateAddition, // shorten new to avoid overlap
- InsertMergeExtend // extend new (or old) to the range of old+new
+ InsertMergeReject, ///< no overlaps allowed
+ InsertMergeRelax, ///< we just don't care about overlaps
+ InsertMergeReplace, ///< replace old with new
+ InsertMergeTruncateExisting, ///< shorten existing to avoid overlap
+ InsertMergeTruncateAddition, ///< shorten new to avoid overlap
+ InsertMergeExtend ///< extend new (or old) to the range of old+new
};
/** See evoral/Parameter.hpp
+ *
+ * When you add things here, you REALLY SHOULD add a case clause to
+ * the constructor of ParameterDescriptor, unless the Controllables
+ * that the enum refers to are completely standard (0-1.0 range, 0.0 as
+ * normal, non-toggled, non-enumerated). Anything else needs to be
+ * added there so that things that try to represent them can do so
+ * with as much information as possible.
*/
enum AutomationType {
NullAutomation,
PluginAutomation,
PluginPropertyAutomation,
SoloAutomation,
+ SoloIsolateAutomation,
+ SoloSafeAutomation,
MuteAutomation,
MidiCCAutomation,
MidiPgmChangeAutomation,
MidiPitchBenderAutomation,
MidiChannelPressureAutomation,
+ MidiNotePressureAutomation,
MidiSystemExclusiveAutomation,
FadeInAutomation,
FadeOutAutomation,
EnvelopeAutomation,
RecEnableAutomation,
+ RecSafeAutomation,
TrimAutomation,
+ PhaseAutomation,
+ MonitoringAutomation,
+ EQGain,
+ EQFrequency,
+ EQQ,
+ EQShape,
+ EQHPF,
+ EQEnable,
+ CompThreshold,
+ CompSpeed,
+ CompMode,
+ CompMakeup,
+ CompRedux,
+ CompEnable,
+ BusSendLevel,
+ BusSendEnable,
};
enum AutoState {
MeterIEC2EBU = 0x0200,
MeterVU = 0x0400,
MeterK12 = 0x0800,
- MeterPeak0dB = 0x1000
+ MeterPeak0dB = 0x1000,
+ MeterMCP = 0x2000
};
enum TrackMode {
}
};
+ /* 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.
*/
AudioRange (framepos_t s, framepos_t e, uint32_t i) : start (s), end (e) , id (i) {}
- framecnt_t length() { return end - start + 1; }
+ framecnt_t length() const { return end - start + 1; }
bool operator== (const AudioRange& other) const {
return start == other.start && end == other.end && id == other.id;
DenormalFTZDAZ
};
- enum RemoteModel {
- UserOrdered,
- MixerOrdered
- };
-
enum LayerModel {
LaterHigher,
Manual
AutoConnectMaster = 0x2
};
+ enum TracksAutoNamingRule {
+ UseDefaultNames = 0x1,
+ NameAfterDriver = 0x2
+ };
+
enum SampleFormat {
FormatFloat = 0,
FormatInt24,
CAF,
AIFF,
iXML,
- RF64
+ RF64,
+ RF64_WAV,
+ MBWF,
};
struct PeakData {
typedef std::list<framepos_t> AnalysisFeatureList;
typedef std::list<boost::shared_ptr<Route> > RouteList;
+ typedef std::list<boost::shared_ptr<Stripable> > StripableList;
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<VCA> > VCAList;
class Bundle;
typedef std::vector<boost::shared_ptr<Bundle> > BundleList;
this equality cannot be assumed.
*/
TransportStopped = 0,
- TransportRolling = 1,
- TransportLooping = 2,
+ TransportRolling = 1,
+ TransportLooping = 2,
TransportStarting = 3,
};
/* these values happen to match the constants used by JACK but
this equality cannot be assumed.
*/
- IsInput = 0x1,
+ IsInput = 0x1,
IsOutput = 0x2,
IsPhysical = 0x4,
CanMonitor = 0x8,
- IsTerminal = 0x10
+ IsTerminal = 0x10,
+
+ /* non-JACK related flags */
+ Hidden = 0x20,
+ Shadow = 0x40
+ };
+
+ enum MidiPortFlags {
+ MidiPortMusic = 0x1,
+ MidiPortControl = 0x2,
+ MidiPortSelection = 0x4,
+ MidiPortVirtual = 0x8
};
struct LatencyRange {
uint32_t max; //< samples
};
-} // namespace ARDOUR
+ enum BufferingPreset {
+ Small,
+ Medium,
+ Large,
+ Custom,
+ };
+ enum AutoReturnTarget {
+ LastLocate = 0x1,
+ RangeSelectionStart = 0x2,
+ Loop = 0x4,
+ RegionSelectionStart = 0x8,
+ };
-/* 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::EditMode& sf);
-std::istream& operator>>(std::istream& o, ARDOUR::MonitorModel& 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::RemoteModel& 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::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::EditMode& sf);
-std::ostream& operator<<(std::ostream& o, const ARDOUR::MonitorModel& 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::RemoteModel& 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);
-
-
-/* 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);
+ enum PlaylistDisposition {
+ CopyPlaylist,
+ NewPlaylist,
+ SharePlaylist
+ };
+
+ enum MidiTrackNameSource {
+ SMFTrackNumber,
+ SMFTrackName,
+ SMFInstrumentName
+ };
-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);
+ enum MidiTempoMapDisposition {
+ SMFTempoIgnore,
+ SMFTempoUse,
+ };
+} // namespace ARDOUR
static inline ARDOUR::framepos_t
session_frame_to_track_frame (ARDOUR::framepos_t session_frame, double speed)
{
- return (ARDOUR::framepos_t) ((long double) session_frame * (long double) speed);
+ long double result = (long double) session_frame * (long double) speed;
+
+ if (result >= (long double) ARDOUR::max_framepos) {
+ return ARDOUR::max_framepos;
+ } else if (result <= (long double) (ARDOUR::max_framepos) * (ARDOUR::framepos_t)(-1)) {
+ return (ARDOUR::max_framepos * (ARDOUR::framepos_t)(-1));
+ } else {
+ return result;
+ }
}
static inline ARDOUR::framepos_t
track_frame_to_session_frame (ARDOUR::framepos_t track_frame, double speed)
{
- return (ARDOUR::framepos_t) ((long double) track_frame / (long double) speed);
+ /* NB - do we need a check for speed == 0 ??? */
+ long double result = (long double) track_frame / (long double) speed;
+
+ if (result >= (long double) ARDOUR::max_framepos) {
+ return ARDOUR::max_framepos;
+ } else if (result <= (long double) (ARDOUR::max_framepos) * (ARDOUR::framepos_t)(-1)) {
+ return (ARDOUR::max_framepos * (ARDOUR::framepos_t)(-1));
+ } else {
+ return result;
+ }
}
/* for now, break the rules and use "using" to make this "global" */
#endif /* __ardour_types_h__ */
-