diff options
Diffstat (limited to 'libs/ardour/ardour/types.h')
-rw-r--r-- | libs/ardour/ardour/types.h | 1356 |
1 files changed, 686 insertions, 670 deletions
diff --git a/libs/ardour/ardour/types.h b/libs/ardour/ardour/types.h index 366e303186..635b78334b 100644 --- a/libs/ardour/ardour/types.h +++ b/libs/ardour/ardour/types.h @@ -53,696 +53,712 @@ typedef int intptr_t; namespace ARDOUR { - class Source; - class AudioSource; - class Route; - class Region; - class Stripable; - class VCA; - class AutomationControl; - class SlavableAutomationControl; - - typedef float Sample; - typedef float pan_t; - typedef float gain_t; - typedef uint32_t layer_t; - typedef uint64_t microseconds_t; - typedef uint32_t pframes_t; - - /* rebind Temporal position types into ARDOUR namespace */ - typedef Temporal::samplecnt_t samplecnt_t; - typedef Temporal::samplepos_t samplepos_t; - typedef Temporal::sampleoffset_t sampleoffset_t; - - static const layer_t max_layer = UINT32_MAX; - - // a set of (time) intervals: first of pair is the offset of the start within the region, second is the offset of the end - typedef std::list<std::pair<sampleoffset_t, sampleoffset_t> > AudioIntervalResult; - // associate a set of intervals with regions (e.g. for silence detection) - typedef std::map<boost::shared_ptr<ARDOUR::Region>,AudioIntervalResult> AudioIntervalMap; - - typedef std::list<boost::shared_ptr<Region> > RegionList; - - struct IOChange { - - enum Type { - NoChange = 0, - ConfigurationChanged = 0x1, - ConnectionsChanged = 0x2 - } type; - - IOChange () : type (NoChange) {} - IOChange (Type t) : type (t) {} - - /** channel count of IO before a ConfigurationChanged, if appropriate */ - ARDOUR::ChanCount before; - /** channel count of IO after a ConfigurationChanged, if appropriate */ - ARDOUR::ChanCount after; - }; - - /* policies for inserting/pasting material where overlaps - might be an issue. - */ - - 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 - }; - - /** 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, - GainAutomation, - PanAzimuthAutomation, - PanElevationAutomation, - PanWidthAutomation, - PanFrontBackAutomation, - PanLFEAutomation, - PluginAutomation, - PluginPropertyAutomation, - SoloAutomation, - SoloIsolateAutomation, - SoloSafeAutomation, - MuteAutomation, - MidiCCAutomation, - MidiPgmChangeAutomation, - MidiPitchBenderAutomation, - MidiChannelPressureAutomation, - MidiNotePressureAutomation, - MidiSystemExclusiveAutomation, - FadeInAutomation, - FadeOutAutomation, - EnvelopeAutomation, - RecEnableAutomation, - RecSafeAutomation, - TrimAutomation, - PhaseAutomation, - MonitoringAutomation, - BusSendLevel, - BusSendEnable, - - /* used only by Controllable Descriptor to access send parameters */ - - SendLevelAutomation, - SendEnableAutomation, - SendAzimuthAutomation, - }; - - enum AutoState { - Off = 0x00, - Write = 0x01, - Touch = 0x02, - Play = 0x04, - Latch = 0x08 - }; - - std::string auto_state_to_string (AutoState); - AutoState string_to_auto_state (std::string); - - enum AlignStyle { - CaptureTime, - ExistingMaterial - }; - - enum AlignChoice { - UseCaptureTime, - UseExistingMaterial, - Automatic - }; - - enum MeterPoint { - MeterInput, - MeterPreFader, - MeterPostFader, - MeterOutput, - MeterCustom - }; - - enum DiskIOPoint { - DiskIOPreFader, /* after the trim control, but before other processors */ - DiskIOPostFader, /* before the main outs, after other processors */ - DiskIOCustom, /* up to the user. Caveat Emptor! */ - }; - - enum MeterType { - MeterMaxSignal = 0x0001, - MeterMaxPeak = 0x0002, - MeterPeak = 0x0004, - MeterKrms = 0x0008, - MeterK20 = 0x0010, - MeterK14 = 0x0020, - MeterIEC1DIN = 0x0040, - MeterIEC1NOR = 0x0080, - MeterIEC2BBC = 0x0100, - MeterIEC2EBU = 0x0200, - MeterVU = 0x0400, - MeterK12 = 0x0800, - MeterPeak0dB = 0x1000, - MeterMCP = 0x2000 - }; - - enum TrackMode { - Normal, - NonLayered, - Destructive - }; - - enum NoteMode { - Sustained, - Percussive - }; - - enum ChannelMode { - AllChannels = 0, ///< Pass through all channel information unmodified - FilterChannels, ///< Ignore events on certain channels - ForceChannel ///< Force all events to a certain channel - }; - - enum ColorMode { - MeterColors = 0, - ChannelColors, - TrackColor - }; - - enum RoundMode { - RoundDownMaybe = -2, ///< Round down only if necessary - RoundDownAlways = -1, ///< Always round down, even if on a division - RoundNearest = 0, ///< Round to nearest - RoundUpAlways = 1, ///< Always round up, even if on a division - RoundUpMaybe = 2 ///< Round up only if necessary - }; - - enum SnapPref { - SnapToAny_Visual = 0, /**< Snap to the editor's visual snap - * (incoprorating snap prefs and the current zoom scaling) - * this defines the behavior for visual mouse drags, for example */ - - SnapToGrid_Scaled = 1, /**< Snap to the selected grid quantization with visual scaling. - * Ignores other snap preferences (markers, regions, etc) - * this defines the behavior for nudging the playhead to next/prev grid, for example */ - - SnapToGrid_Unscaled = 2, /**< Snap to the selected grid quantization. - * If one is selected, and ignore any visual scaling - * this is the behavior for automated processes like "snap regions to grid" - * but note that midi quantization uses its own mechanism, not the grid */ - }; - - class AnyTime { - public: - enum Type { - Timecode, - BBT, - Samples, - Seconds - }; - - Type type; - - Timecode::Time timecode; - Timecode::BBT_Time bbt; - - union { - samplecnt_t samples; - double seconds; - }; - - AnyTime() { type = Samples; samples = 0; } - - bool operator== (AnyTime const & other) const { - if (type != other.type) { return false; } - - switch (type) { - case Timecode: - return timecode == other.timecode; - case BBT: - return bbt == other.bbt; - case Samples: - return samples == other.samples; - case Seconds: - return seconds == other.seconds; - } - return false; // get rid of warning - } - - bool not_zero() const - { - switch (type) { - case Timecode: - return timecode.hours != 0 || timecode.minutes != 0 || - timecode.seconds != 0 || timecode.frames != 0; - case BBT: - return bbt.bars != 0 || bbt.beats != 0 || bbt.ticks != 0; - case Samples: - return samples != 0; - case Seconds: - return seconds != 0; - } - - abort(); /* NOTREACHED */ - return false; - } - }; - - /* used for translating audio samples to an exact musical position using a note divisor. - an exact musical position almost never falls exactly on an audio sample, but for sub-sample - musical accuracy we need to derive exact musical locations from a sample position - the division follows TempoMap::exact_beat_at_sample(). - division - -1 musical location is the bar closest to sample - 0 musical location is the musical position of the sample - 1 musical location is the BBT beat closest to sample - n musical location is the quarter-note division n closest to sample - */ - struct MusicSample { - samplepos_t sample; - int32_t division; - - MusicSample (samplepos_t f, int32_t d) : sample (f), division (d) {} - - void set (samplepos_t f, int32_t d) {sample = f; division = d; } - - MusicSample operator- (MusicSample other) { return MusicSample (sample - other.sample, 0); } - }; - - /* XXX: slightly unfortunate that there is this and Evoral::Range<>, - but this has a uint32_t id which Evoral::Range<> does not. - */ - struct AudioRange { - samplepos_t start; - samplepos_t end; - uint32_t id; - - AudioRange (samplepos_t s, samplepos_t e, uint32_t i) : start (s), end (e) , id (i) {} - - samplecnt_t length() const { return end - start + 1; } - - bool operator== (const AudioRange& other) const { - return start == other.start && end == other.end && id == other.id; - } - - bool equal (const AudioRange& other) const { - return start == other.start && end == other.end; - } +class Source; +class AudioSource; +class Route; +class Region; +class Stripable; +class VCA; +class AutomationControl; +class SlavableAutomationControl; + +typedef float Sample; +typedef float pan_t; +typedef float gain_t; +typedef uint32_t layer_t; +typedef uint64_t microseconds_t; +typedef uint32_t pframes_t; + +/* rebind Temporal position types into ARDOUR namespace */ +typedef Temporal::samplecnt_t samplecnt_t; +typedef Temporal::samplepos_t samplepos_t; +typedef Temporal::sampleoffset_t sampleoffset_t; + +static const layer_t max_layer = UINT32_MAX; + +// a set of (time) intervals: first of pair is the offset of the start within the region, second is the offset of the end +typedef std::list<std::pair<sampleoffset_t, sampleoffset_t> > AudioIntervalResult; +// associate a set of intervals with regions (e.g. for silence detection) +typedef std::map<boost::shared_ptr<ARDOUR::Region>,AudioIntervalResult> AudioIntervalMap; + +typedef std::list<boost::shared_ptr<Region> > RegionList; + +struct IOChange { + + enum Type { + NoChange = 0, + ConfigurationChanged = 0x1, + ConnectionsChanged = 0x2 + } type; + + IOChange () : type (NoChange) {} + IOChange (Type t) : type (t) {} + + /** channel count of IO before a ConfigurationChanged, if appropriate */ + ARDOUR::ChanCount before; + /** channel count of IO after a ConfigurationChanged, if appropriate */ + ARDOUR::ChanCount after; +}; + +/* policies for inserting/pasting material where overlaps + might be an issue. +*/ - Evoral::OverlapType coverage (samplepos_t s, samplepos_t e) const { - return Evoral::coverage (start, end, s, e); +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 +}; + +/** 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, + GainAutomation, + PanAzimuthAutomation, + PanElevationAutomation, + PanWidthAutomation, + PanFrontBackAutomation, + PanLFEAutomation, + PluginAutomation, + PluginPropertyAutomation, + SoloAutomation, + SoloIsolateAutomation, + SoloSafeAutomation, + MuteAutomation, + MidiCCAutomation, + MidiPgmChangeAutomation, + MidiPitchBenderAutomation, + MidiChannelPressureAutomation, + MidiNotePressureAutomation, + MidiSystemExclusiveAutomation, + FadeInAutomation, + FadeOutAutomation, + EnvelopeAutomation, + RecEnableAutomation, + RecSafeAutomation, + TrimAutomation, + PhaseAutomation, + MonitoringAutomation, + BusSendLevel, + BusSendEnable, + + /* used only by Controllable Descriptor to access send parameters */ + + SendLevelAutomation, + SendEnableAutomation, + SendAzimuthAutomation, +}; + +enum AutoState { + Off = 0x00, + Write = 0x01, + Touch = 0x02, + Play = 0x04, + Latch = 0x08 +}; + +std::string auto_state_to_string (AutoState); +AutoState string_to_auto_state (std::string); + +enum AlignStyle { + CaptureTime, + ExistingMaterial +}; + +enum AlignChoice { + UseCaptureTime, + UseExistingMaterial, + Automatic +}; + +enum MeterPoint { + MeterInput, + MeterPreFader, + MeterPostFader, + MeterOutput, + MeterCustom +}; + +enum DiskIOPoint { + DiskIOPreFader, /* after the trim control, but before other processors */ + DiskIOPostFader, /* before the main outs, after other processors */ + DiskIOCustom, /* up to the user. Caveat Emptor! */ +}; + +enum MeterType { + MeterMaxSignal = 0x0001, + MeterMaxPeak = 0x0002, + MeterPeak = 0x0004, + MeterKrms = 0x0008, + MeterK20 = 0x0010, + MeterK14 = 0x0020, + MeterIEC1DIN = 0x0040, + MeterIEC1NOR = 0x0080, + MeterIEC2BBC = 0x0100, + MeterIEC2EBU = 0x0200, + MeterVU = 0x0400, + MeterK12 = 0x0800, + MeterPeak0dB = 0x1000, + MeterMCP = 0x2000 +}; + +enum TrackMode { + Normal, + NonLayered, + Destructive +}; + +enum NoteMode { + Sustained, + Percussive +}; + +enum ChannelMode { + AllChannels = 0, ///< Pass through all channel information unmodified + FilterChannels, ///< Ignore events on certain channels + ForceChannel ///< Force all events to a certain channel +}; + +enum ColorMode { + MeterColors = 0, + ChannelColors, + TrackColor +}; + +enum RoundMode { + RoundDownMaybe = -2, ///< Round down only if necessary + RoundDownAlways = -1, ///< Always round down, even if on a division + RoundNearest = 0, ///< Round to nearest + RoundUpAlways = 1, ///< Always round up, even if on a division + RoundUpMaybe = 2 ///< Round up only if necessary +}; + +enum SnapPref { + SnapToAny_Visual = 0, /**< Snap to the editor's visual snap + * (incoprorating snap prefs and the current zoom scaling) + * this defines the behavior for visual mouse drags, for example */ + + SnapToGrid_Scaled = 1, /**< Snap to the selected grid quantization with visual scaling. + * Ignores other snap preferences (markers, regions, etc) + * this defines the behavior for nudging the playhead to next/prev grid, for example */ + + SnapToGrid_Unscaled = 2, /**< Snap to the selected grid quantization. + * If one is selected, and ignore any visual scaling + * this is the behavior for automated processes like "snap regions to grid" + * but note that midi quantization uses its own mechanism, not the grid */ +}; + +class AnyTime { + public: + enum Type { + Timecode, + BBT, + Samples, + Seconds + }; + + Type type; + + Timecode::Time timecode; + Timecode::BBT_Time bbt; + + union { + samplecnt_t samples; + double seconds; + }; + + AnyTime() { type = Samples; samples = 0; } + + bool operator== (AnyTime const & other) const { + if (type != other.type) { return false; } + + switch (type) { + case Timecode: + return timecode == other.timecode; + case BBT: + return bbt == other.bbt; + case Samples: + return samples == other.samples; + case Seconds: + return seconds == other.seconds; } - }; - - struct MusicRange { - Timecode::BBT_Time start; - Timecode::BBT_Time end; - uint32_t id; - - MusicRange (Timecode::BBT_Time& s, Timecode::BBT_Time& e, uint32_t i) - : start (s), end (e), id (i) {} - - bool operator== (const MusicRange& other) const { - return start == other.start && end == other.end && id == other.id; + return false; // get rid of warning + } + + bool not_zero() const + { + switch (type) { + case Timecode: + return timecode.hours != 0 || timecode.minutes != 0 || + timecode.seconds != 0 || timecode.frames != 0; + case BBT: + return bbt.bars != 0 || bbt.beats != 0 || bbt.ticks != 0; + case Samples: + return samples != 0; + case Seconds: + return seconds != 0; } - bool equal (const MusicRange& other) const { - return start == other.start && end == other.end; - } - }; - - /* - Slowest = 6.6dB/sec falloff at update rate of 40ms - Slow = 6.8dB/sec falloff at update rate of 40ms - */ - - enum MeterFalloff { - MeterFalloffOff = 0, - MeterFalloffSlowest = 1, - MeterFalloffSlow = 2, - MeterFalloffSlowish = 3, - MeterFalloffModerate = 4, - MeterFalloffMedium = 5, - MeterFalloffFast = 6, - MeterFalloffFaster = 7, - MeterFalloffFastest = 8, - }; - - enum MeterHold { - MeterHoldOff = 0, - MeterHoldShort = 40, - MeterHoldMedium = 100, - MeterHoldLong = 200 - }; - - enum EditMode { - Slide, - Splice, - Ripple, - Lock - }; - - enum RegionSelectionAfterSplit { - None = 0, - NewlyCreatedLeft = 1, // bit 0 - NewlyCreatedRight = 2, // bit 1 - NewlyCreatedBoth = 3, - Existing = 4, // bit 2 - ExistingNewlyCreatedLeft = 5, - ExistingNewlyCreatedRight = 6, - ExistingNewlyCreatedBoth = 7 - }; - - enum RegionPoint { - Start, - End, - SyncPoint - }; - - enum Placement { - PreFader, - PostFader - }; - - enum MonitorModel { - HardwareMonitoring, ///< JACK does monitoring - SoftwareMonitoring, ///< Ardour does monitoring - ExternalMonitoring ///< we leave monitoring to the audio hardware - }; - - enum MonitorChoice { - MonitorAuto = 0, - MonitorInput = 0x1, - MonitorDisk = 0x2, - MonitorCue = 0x3, - }; - - enum MonitorState { - MonitoringSilence = 0x1, - MonitoringInput = 0x2, - MonitoringDisk = 0x4, - MonitoringCue = 0x6, - }; - - enum MeterState { - MeteringInput, ///< meter the input IO, regardless of what is going through the route - MeteringRoute ///< meter what is going through the route - }; - - enum VUMeterStandard { - MeteringVUfrench, // 0VU = -2dBu - MeteringVUamerican, // 0VU = 0dBu - MeteringVUstandard, // 0VU = +4dBu - MeteringVUeight // 0VU = +8dBu - }; - - enum MeterLineUp { - MeteringLineUp24, - MeteringLineUp20, - MeteringLineUp18, - MeteringLineUp15 - }; - - enum PFLPosition { - /** PFL signals come from before pre-fader processors */ - PFLFromBeforeProcessors, - /** PFL signals come pre-fader but after pre-fader processors */ - PFLFromAfterProcessors - }; - - enum AFLPosition { - /** AFL signals come post-fader and before post-fader processors */ - AFLFromBeforeProcessors, - /** AFL signals come post-fader but after post-fader processors */ - AFLFromAfterProcessors - }; - - enum ClockDeltaMode { - NoDelta, - DeltaEditPoint, - DeltaOriginMarker - }; - - enum DenormalModel { - DenormalNone, - DenormalFTZ, - DenormalDAZ, - DenormalFTZDAZ - }; - - enum LayerModel { - LaterHigher, - Manual - }; - - enum ListenPosition { - AfterFaderListen, - PreFaderListen - }; - - enum AutoConnectOption { - ManualConnect = 0x0, - AutoConnectPhysical = 0x1, - AutoConnectMaster = 0x2 - }; - - enum TracksAutoNamingRule { - UseDefaultNames = 0x1, - NameAfterDriver = 0x2 - }; - - enum SampleFormat { - FormatFloat = 0, - FormatInt24, - FormatInt16 - }; - - int format_data_width (ARDOUR::SampleFormat); - - enum CDMarkerFormat { - CDMarkerNone, - CDMarkerCUE, - CDMarkerTOC, - MP4Chaps - }; - - enum HeaderFormat { - BWF, - WAVE, - WAVE64, - CAF, - AIFF, - iXML, - RF64, - RF64_WAV, - MBWF, - }; + abort(); /* NOTREACHED */ + return false; + } +}; + +/* used for translating audio samples to an exact musical position using a note divisor. + an exact musical position almost never falls exactly on an audio sample, but for sub-sample + musical accuracy we need to derive exact musical locations from a sample position + the division follows TempoMap::exact_beat_at_sample(). + division + -1 musical location is the bar closest to sample + 0 musical location is the musical position of the sample + 1 musical location is the BBT beat closest to sample + n musical location is the quarter-note division n closest to sample +*/ +struct MusicSample { + samplepos_t sample; + int32_t division; - struct PeakData { - typedef Sample PeakDatum; + MusicSample (samplepos_t f, int32_t d) : sample (f), division (d) {} - PeakDatum min; - PeakDatum max; - }; + void set (samplepos_t f, int32_t d) {sample = f; division = d; } - enum RunContext { - ButlerContext = 0, - TransportContext, - ExportContext - }; + MusicSample operator- (MusicSample other) { return MusicSample (sample - other.sample, 0); } +}; - enum SyncSource { - /* These are "synonyms". It is important for JACK to be first - both here and in enums.cc, so that the string "JACK" is - correctly recognized in older session and preference files. - */ - JACK = 0, - Engine = 0, - MTC, - MIDIClock, - LTC - }; - - enum ShuttleBehaviour { - Sprung, - Wheel - }; - - enum ShuttleUnits { - Percentage, - Semitones - }; +/* XXX: slightly unfortunate that there is this and Evoral::Range<>, + but this has a uint32_t id which Evoral::Range<> does not. +*/ +struct AudioRange { + samplepos_t start; + samplepos_t end; + uint32_t id; - typedef std::vector<boost::shared_ptr<Source> > SourceList; + AudioRange (samplepos_t s, samplepos_t e, uint32_t i) : start (s), end (e) , id (i) {} - enum SrcQuality { - SrcBest, - SrcGood, - SrcQuick, - SrcFast, - SrcFastest - }; + samplecnt_t length() const { return end - start + 1; } - typedef std::list<samplepos_t> AnalysisFeatureList; + bool operator== (const AudioRange& other) const { + return start == other.start && end == other.end && id == other.id; + } - 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<SlavableAutomationControl> > SlavableControlList; - typedef std::set <boost::shared_ptr<AutomationControl> > AutomationControlSet; + bool equal (const AudioRange& other) const { + return start == other.start && end == other.end; + } - typedef std::list<boost::shared_ptr<VCA> > VCAList; + Evoral::OverlapType coverage (samplepos_t s, samplepos_t e) const { + return Evoral::coverage (start, end, s, e); + } +}; - class Bundle; - typedef std::vector<boost::shared_ptr<Bundle> > BundleList; +struct MusicRange { + Timecode::BBT_Time start; + Timecode::BBT_Time end; + uint32_t id; - enum RegionEquivalence { - Exact, - Enclosed, - Overlap - }; - - enum WaveformScale { - Linear, - Logarithmic - }; + MusicRange (Timecode::BBT_Time& s, Timecode::BBT_Time& e, uint32_t i) + : start (s), end (e), id (i) {} - enum WaveformShape { - Traditional, - Rectified - }; + bool operator== (const MusicRange& other) const { + return start == other.start && end == other.end && id == other.id; + } - struct CleanupReport { - std::vector<std::string> paths; - size_t space; - }; + bool equal (const MusicRange& other) const { + return start == other.start && end == other.end; + } +}; - enum PositionLockStyle { - AudioTime, - MusicTime - }; +/* + Slowest = 6.6dB/sec falloff at update rate of 40ms + Slow = 6.8dB/sec falloff at update rate of 40ms +*/ - /** A struct used to describe changes to processors in a route. - * This is useful because objects that respond to a change in processors - * can optimise what work they do based on details of what has changed. +enum MeterFalloff { + MeterFalloffOff = 0, + MeterFalloffSlowest = 1, + MeterFalloffSlow = 2, + MeterFalloffSlowish = 3, + MeterFalloffModerate = 4, + MeterFalloffMedium = 5, + MeterFalloffFast = 6, + MeterFalloffFaster = 7, + MeterFalloffFastest = 8, +}; + +enum MeterHold { + MeterHoldOff = 0, + MeterHoldShort = 40, + MeterHoldMedium = 100, + MeterHoldLong = 200 +}; + +enum EditMode { + Slide, + Splice, + Ripple, + Lock +}; + +enum RegionSelectionAfterSplit { + None = 0, + NewlyCreatedLeft = 1, // bit 0 + NewlyCreatedRight = 2, // bit 1 + NewlyCreatedBoth = 3, + Existing = 4, // bit 2 + ExistingNewlyCreatedLeft = 5, + ExistingNewlyCreatedRight = 6, + ExistingNewlyCreatedBoth = 7 +}; + +enum RegionPoint { + Start, + End, + SyncPoint +}; + +enum Placement { + PreFader, + PostFader +}; + +enum MonitorModel { + HardwareMonitoring, ///< JACK does monitoring + SoftwareMonitoring, ///< Ardour does monitoring + ExternalMonitoring ///< we leave monitoring to the audio hardware +}; + +enum MonitorChoice { + MonitorAuto = 0, + MonitorInput = 0x1, + MonitorDisk = 0x2, + MonitorCue = 0x3, +}; + +enum MonitorState { + MonitoringSilence = 0x1, + MonitoringInput = 0x2, + MonitoringDisk = 0x4, + MonitoringCue = 0x6, +}; + +enum MeterState { + MeteringInput, ///< meter the input IO, regardless of what is going through the route + MeteringRoute ///< meter what is going through the route +}; + +enum VUMeterStandard { + MeteringVUfrench, // 0VU = -2dBu + MeteringVUamerican, // 0VU = 0dBu + MeteringVUstandard, // 0VU = +4dBu + MeteringVUeight // 0VU = +8dBu +}; + +enum MeterLineUp { + MeteringLineUp24, + MeteringLineUp20, + MeteringLineUp18, + MeteringLineUp15 +}; + +enum PFLPosition { + /** PFL signals come from before pre-fader processors */ + PFLFromBeforeProcessors, + /** PFL signals come pre-fader but after pre-fader processors */ + PFLFromAfterProcessors +}; + +enum AFLPosition { + /** AFL signals come post-fader and before post-fader processors */ + AFLFromBeforeProcessors, + /** AFL signals come post-fader but after post-fader processors */ + AFLFromAfterProcessors +}; + +enum ClockDeltaMode { + NoDelta, + DeltaEditPoint, + DeltaOriginMarker +}; + +enum DenormalModel { + DenormalNone, + DenormalFTZ, + DenormalDAZ, + DenormalFTZDAZ +}; + +enum LayerModel { + LaterHigher, + Manual +}; + +enum ListenPosition { + AfterFaderListen, + PreFaderListen +}; + +enum AutoConnectOption { + ManualConnect = 0x0, + AutoConnectPhysical = 0x1, + AutoConnectMaster = 0x2 +}; + +enum TracksAutoNamingRule { + UseDefaultNames = 0x1, + NameAfterDriver = 0x2 +}; + +enum SampleFormat { + FormatFloat = 0, + FormatInt24, + FormatInt16 +}; + +int format_data_width (ARDOUR::SampleFormat); + +enum CDMarkerFormat { + CDMarkerNone, + CDMarkerCUE, + CDMarkerTOC, + MP4Chaps +}; + +enum HeaderFormat { + BWF, + WAVE, + WAVE64, + CAF, + AIFF, + iXML, + RF64, + RF64_WAV, + MBWF, +}; + +struct PeakData { + typedef Sample PeakDatum; + + PeakDatum min; + PeakDatum max; +}; + +enum RunContext { + ButlerContext = 0, + TransportContext, + ExportContext +}; + +enum SyncSource { + /* The first two are "synonyms". It is important for JACK to be first + both here and in enums.cc, so that the string "JACK" is + correctly recognized in older session and preference files. */ - struct RouteProcessorChange { - enum Type { - GeneralChange = 0x0, - MeterPointChange = 0x1, - RealTimeChange = 0x2 - }; - - RouteProcessorChange () : type (GeneralChange), meter_visibly_changed (true) - {} - - RouteProcessorChange (Type t) : type (t), meter_visibly_changed (true) - {} - - RouteProcessorChange (Type t, bool m) : type (t), meter_visibly_changed (m) - {} - - /** type of change; "GeneralChange" means anything could have changed */ - Type type; - /** true if, when a MeterPointChange has occurred, the change is visible to the user */ - bool meter_visibly_changed; - }; - - struct BusProfile { - uint32_t master_out_channels; /* how many channels for the master bus, 0: no master bus */ - }; - - enum FadeShape { - FadeLinear, - FadeFast, - FadeSlow, - FadeConstantPower, - FadeSymmetric, - }; - - enum TransportState { - /* these values happen to match the constants used by JACK but - this equality cannot be assumed. - */ - TransportStopped = 0, - TransportRolling = 1, - TransportLooping = 2, - TransportStarting = 3, - }; - - enum PortFlags { - /* these values happen to match the constants used by JACK but - this equality cannot be assumed. - */ - IsInput = 0x1, - IsOutput = 0x2, - IsPhysical = 0x4, - CanMonitor = 0x8, - IsTerminal = 0x10, - - /* non-JACK related flags */ - Hidden = 0x20, - Shadow = 0x40 - }; - - enum MidiPortFlags { - MidiPortMusic = 0x1, - MidiPortControl = 0x2, - MidiPortSelection = 0x4, - MidiPortVirtual = 0x8 - }; - - struct LatencyRange { - uint32_t min; //< samples - uint32_t max; //< samples - }; - - enum BufferingPreset { - Small, - Medium, - Large, - Custom, - }; - - enum AutoReturnTarget { - LastLocate = 0x1, - RangeSelectionStart = 0x2, - Loop = 0x4, - RegionSelectionStart = 0x8, - }; - - enum PlaylistDisposition { - CopyPlaylist, - NewPlaylist, - SharePlaylist - }; - - enum MidiTrackNameSource { - SMFTrackNumber, - SMFTrackName, - SMFInstrumentName - }; - - enum MidiTempoMapDisposition { - SMFTempoIgnore, - SMFTempoUse, - }; - - struct CaptureInfo { - samplepos_t start; - samplecnt_t samples; - }; - - typedef std::vector<CaptureInfo*> CaptureInfos; + JACK = 0, + Engine = 0, + MTC, + MIDIClock, + LTC, +}; + +enum TransportRequestSource { + TRS_Engine, + TRS_MTC, + TRS_MIDIClock, + TRS_LTC, + TRS_MMC, + TRS_UI, +}; + +enum TransportRequestType { + TR_Stop = 0x1, + TR_Start = 0x2, + TR_Speed = 0x4, + TR_Locate = 0x8 +}; + +enum ShuttleBehaviour { + Sprung, + Wheel +}; + +enum ShuttleUnits { + Percentage, + Semitones +}; + +typedef std::vector<boost::shared_ptr<Source> > SourceList; + +enum SrcQuality { + SrcBest, + SrcGood, + SrcQuick, + SrcFast, + SrcFastest +}; + +typedef std::list<samplepos_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<SlavableAutomationControl> > SlavableControlList; +typedef std::set <boost::shared_ptr<AutomationControl> > AutomationControlSet; + +typedef std::list<boost::shared_ptr<VCA> > VCAList; + +class Bundle; +typedef std::vector<boost::shared_ptr<Bundle> > BundleList; + +enum RegionEquivalence { + Exact, + Enclosed, + Overlap +}; + +enum WaveformScale { + Linear, + Logarithmic +}; + +enum WaveformShape { + Traditional, + Rectified +}; + +struct CleanupReport { + std::vector<std::string> paths; + size_t space; +}; + +enum PositionLockStyle { + AudioTime, + MusicTime +}; + +/** A struct used to describe changes to processors in a route. + * This is useful because objects that respond to a change in processors + * can optimise what work they do based on details of what has changed. + */ +struct RouteProcessorChange { + enum Type { + GeneralChange = 0x0, + MeterPointChange = 0x1, + RealTimeChange = 0x2 + }; + + RouteProcessorChange () : type (GeneralChange), meter_visibly_changed (true) + {} + + RouteProcessorChange (Type t) : type (t), meter_visibly_changed (true) + {} + + RouteProcessorChange (Type t, bool m) : type (t), meter_visibly_changed (m) + {} + + /** type of change; "GeneralChange" means anything could have changed */ + Type type; + /** true if, when a MeterPointChange has occurred, the change is visible to the user */ + bool meter_visibly_changed; +}; + +struct BusProfile { + uint32_t master_out_channels; /* how many channels for the master bus, 0: no master bus */ +}; + +enum FadeShape { + FadeLinear, + FadeFast, + FadeSlow, + FadeConstantPower, + FadeSymmetric, +}; + +enum TransportState { + /* these values happen to match the constants used by JACK but + this equality cannot be assumed. + */ + TransportStopped = 0, + TransportRolling = 1, + TransportLooping = 2, + TransportStarting = 3, +}; + +enum PortFlags { + /* these values happen to match the constants used by JACK but + this equality cannot be assumed. + */ + IsInput = 0x1, + IsOutput = 0x2, + IsPhysical = 0x4, + CanMonitor = 0x8, + IsTerminal = 0x10, + + /* non-JACK related flags */ + Hidden = 0x20, + Shadow = 0x40 +}; + +enum MidiPortFlags { + MidiPortMusic = 0x1, + MidiPortControl = 0x2, + MidiPortSelection = 0x4, + MidiPortVirtual = 0x8 +}; + +struct LatencyRange { + uint32_t min; //< samples + uint32_t max; //< samples +}; + +enum BufferingPreset { + Small, + Medium, + Large, + Custom, +}; + +enum AutoReturnTarget { + LastLocate = 0x1, + RangeSelectionStart = 0x2, + Loop = 0x4, + RegionSelectionStart = 0x8, +}; + +enum PlaylistDisposition { + CopyPlaylist, + NewPlaylist, + SharePlaylist +}; + +enum MidiTrackNameSource { + SMFTrackNumber, + SMFTrackName, + SMFInstrumentName +}; + +enum MidiTempoMapDisposition { + SMFTempoIgnore, + SMFTempoUse, +}; + +struct CaptureInfo { + samplepos_t start; + samplecnt_t samples; +}; + +typedef std::vector<CaptureInfo*> CaptureInfos; } // namespace ARDOUR |