X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=libs%2Fardour%2Fardour%2Ftypes.h;h=05d6d0b27d47563ca2950c5785f3afec74eda217;hb=4d49961c93fe23dc4f76a5bcb60c93d0c80bcd3c;hp=744c06f5522a6c96ad5d42c145c20e67f7e38dfe;hpb=15b5fce90480490455237da917167b0bcb5ce946;p=ardour.git diff --git a/libs/ardour/ardour/types.h b/libs/ardour/ardour/types.h index 744c06f552..05d6d0b27d 100644 --- a/libs/ardour/ardour/types.h +++ b/libs/ardour/ardour/types.h @@ -36,6 +36,8 @@ #include "pbd/id.h" +#include "evoral/Range.hpp" + #include "ardour/chan_count.h" #include @@ -68,19 +70,22 @@ namespace ARDOUR { */ typedef int64_t frameoffset_t; - /* Any count of audio frames. + /* Any count of audio frames. Assumed to be positive but not enforced. */ typedef int64_t framecnt_t; static const framepos_t max_framepos = INT64_MAX; static const framecnt_t max_framecnt = INT64_MAX; + static const layer_t max_layer = UINT32_MAX; - // a set of (time) intervals: first of pair is the offset within the region, second is the length of the interval - typedef std::list > AudioIntervalResult; + // 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 > AudioIntervalResult; // associate a set of intervals with regions (e.g. for silence detection) typedef std::map,AudioIntervalResult> AudioIntervalMap; + typedef std::list > RegionList; + struct IOChange { enum Type { @@ -98,29 +103,18 @@ namespace ARDOUR { ARDOUR::ChanCount after; }; - enum OverlapType { - OverlapNone, // no overlap - OverlapInternal, // the overlap is 100% with the object - OverlapStart, // overlap covers start, but ends within - OverlapEnd, // overlap begins within and covers end - OverlapExternal // overlap extends to (at least) begin+end - }; - - ARDOUR::OverlapType coverage (framepos_t sa, framepos_t ea, - framepos_t sb, framepos_t eb); - - /* policies for inserting/pasting material where overlaps - might be an issue. - */ + /* 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 - }; + 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 */ @@ -142,7 +136,8 @@ namespace ARDOUR { MidiSystemExclusiveAutomation, FadeInAutomation, FadeOutAutomation, - EnvelopeAutomation + EnvelopeAutomation, + RecEnableAutomation }; enum AutoState { @@ -168,13 +163,27 @@ namespace ARDOUR { ExistingMaterial }; + enum AlignChoice { + UseCaptureTime, + UseExistingMaterial, + Automatic + }; + enum MeterPoint { MeterInput, MeterPreFader, MeterPostFader, + MeterOutput, MeterCustom }; + enum MeterType { + MeterMaxSignal = 0x01, + MeterMaxPeak = 0x02, + MeterPeak = 0x04, + MeterKrms = 0x08 + }; + enum TrackMode { Normal, NonLayered, @@ -198,20 +207,8 @@ namespace ARDOUR { TrackColor }; - enum TimecodeFormat { - timecode_23976, - timecode_24, - timecode_24976, - timecode_25, - timecode_2997, - timecode_2997drop, - timecode_30, - timecode_30drop, - timecode_5994, - timecode_60 - }; - - struct AnyTime { + class AnyTime { + public: enum Type { Timecode, BBT, @@ -230,10 +227,10 @@ namespace ARDOUR { }; AnyTime() { type = Frames; frames = 0; } - + bool operator== (AnyTime const & other) const { if (type != other.type) { return false; } - + switch (type) { case Timecode: return timecode == other.timecode; @@ -244,8 +241,9 @@ namespace ARDOUR { case Seconds: return seconds == other.seconds; } + return false; // get rid of warning } - + bool not_zero() const { switch (type) { @@ -259,9 +257,16 @@ namespace ARDOUR { case Seconds: return seconds != 0; } + + /* NOTREACHED */ + assert (false); + return false; } }; + /* XXX: slightly unfortunate that there is this and Evoral::Range<>, + but this has a uint32_t id which Evoral::Range<> does not. + */ struct AudioRange { framepos_t start; framepos_t end; @@ -279,8 +284,8 @@ namespace ARDOUR { return start == other.start && end == other.end; } - OverlapType coverage (framepos_t s, framepos_t e) const { - return ARDOUR::coverage (start, end, s, e); + Evoral::OverlapType coverage (framepos_t s, framepos_t e) const { + return Evoral::coverage (start, end, s, e); } }; @@ -310,10 +315,12 @@ namespace ARDOUR { MeterFalloffOff = 0, MeterFalloffSlowest = 1, MeterFalloffSlow = 2, - MeterFalloffMedium = 3, - MeterFalloffFast = 4, - MeterFalloffFaster = 5, - MeterFalloffFastest = 6 + MeterFalloffSlowish = 3, + MeterFalloffModerate = 4, + MeterFalloffMedium = 5, + MeterFalloffFast = 6, + MeterFalloffFaster = 7, + MeterFalloffFastest = 8, }; enum MeterHold { @@ -340,10 +347,54 @@ namespace ARDOUR { PostFader }; + enum RouteSortOrderKey { + EditorSort, + MixerSort + }; + enum MonitorModel { - HardwareMonitoring, - SoftwareMonitoring, - ExternalMonitoring + 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 = 0x4, + }; + + enum MonitorState { + MonitoringSilence = 0x1, + MonitoringInput = 0x2, + MonitoringDisk = 0x4, + }; + + enum MeterState { + MeteringInput, ///< meter the input IO, regardless of what is going through the route + MeteringRoute ///< meter what is going through the route + }; + + 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 DenormalModel { @@ -364,10 +415,10 @@ namespace ARDOUR { ShortCrossfade }; - enum LayerModel { - LaterHigher, - MoveAddHigher, - AddHigher + enum CrossfadeChoice { + RegionFades, + ConstantPowerMinus3dB, + ConstantPowerMinus6dB, }; enum ListenPosition { @@ -381,15 +432,6 @@ namespace ARDOUR { AutoConnectMaster = 0x2 }; - struct InterThreadInfo { - InterThreadInfo () : done (false), cancel (false), progress (0), thread (0) {} - - volatile bool done; - volatile bool cancel; - volatile float progress; - pthread_t thread; - }; - enum SampleFormat { FormatFloat = 0, FormatInt24, @@ -423,7 +465,8 @@ namespace ARDOUR { AudioUnit, LADSPA, LV2, - VST + Windows_VST, + LXVST, }; enum RunContext { @@ -435,7 +478,8 @@ namespace ARDOUR { enum SyncSource { JACK, MTC, - MIDIClock + MIDIClock, + LTC }; enum ShuttleBehaviour { @@ -458,22 +502,10 @@ namespace ARDOUR { SrcFastest }; - struct TimeFXRequest : public InterThreadInfo { - TimeFXRequest() - : time_fraction(0), pitch_fraction(0), - quick_seek(false), antialias(false), opts(0) {} - float time_fraction; - float pitch_fraction; - /* SoundTouch */ - bool quick_seek; - bool antialias; - /* RubberBand */ - int opts; // really RubberBandStretcher::Options - }; - typedef std::list AnalysisFeatureList; - typedef std::list > RouteList; + typedef std::list > RouteList; + typedef std::list > WeakRouteList; class Bundle; typedef std::vector > BundleList; @@ -488,12 +520,6 @@ namespace ARDOUR { Rectified }; - enum QuantizeType { - Plain, - Legato, - Groove - }; - struct CleanupReport { std::vector paths; size_t space; @@ -529,20 +555,20 @@ namespace ARDOUR { bool meter_visibly_changed; }; - struct BusProfile { - AutoConnectOption input_ac; /* override the RC config for input auto-connection */ - AutoConnectOption output_ac; /* override the RC config for output auto-connection */ - uint32_t master_out_channels; /* how many channels for the master bus */ - uint32_t requested_physical_in; /* now many of the available physical inputs to consider usable */ - uint32_t requested_physical_out; /* now many of the available physical inputs to consider usable */ - }; + struct BusProfile { + AutoConnectOption input_ac; /* override the RC config for input auto-connection */ + AutoConnectOption output_ac; /* override the RC config for output auto-connection */ + uint32_t master_out_channels; /* how many channels for the master bus */ + uint32_t requested_physical_in; /* now many of the available physical inputs to consider usable */ + uint32_t requested_physical_out; /* now many of the available physical inputs to consider usable */ + }; enum FadeShape { FadeLinear, FadeFast, FadeSlow, - FadeLogA, - FadeLogB + FadeConstantPower, + FadeSymmetric, }; } // namespace ARDOUR @@ -557,15 +583,18 @@ 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::MeterLineUp& 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::CrossfadeModel& sf); +std::istream& operator>>(std::istream& o, ARDOUR::CrossfadeChoice& 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, ARDOUR::TimecodeFormat& 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::WaveformScale& sf); std::istream& operator>>(std::istream& o, ARDOUR::WaveformShape& sf); @@ -576,15 +605,18 @@ 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::MeterLineUp& 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::CrossfadeModel& sf); +std::ostream& operator<<(std::ostream& o, const ARDOUR::CrossfadeChoice& 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 ARDOUR::TimecodeFormat& 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::WaveformScale& sf); std::ostream& operator<<(std::ostream& o, const ARDOUR::WaveformShape& sf); @@ -593,13 +625,13 @@ std::ostream& operator<<(std::ostream& o, const ARDOUR::PositionLockStyle& sf); static inline ARDOUR::framepos_t session_frame_to_track_frame (ARDOUR::framepos_t session_frame, double speed) { - return (ARDOUR::framepos_t)( (double)session_frame * speed ); + return (ARDOUR::framepos_t) ((long double) session_frame * (long double) speed); } static inline ARDOUR::framepos_t track_frame_to_session_frame (ARDOUR::framepos_t track_frame, double speed) { - return (ARDOUR::framepos_t)( (double)track_frame / speed ); + return (ARDOUR::framepos_t) ((long double) track_frame / (long double) speed); } /* for now, break the rules and use "using" to make this "global" */