X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Ftypes.h;h=05d6d0b27d47563ca2950c5785f3afec74eda217;hb=4d49961c93fe23dc4f76a5bcb60c93d0c80bcd3c;hp=435cf8d4167888f0117bc8e3a3f0578699ff670c;hpb=b9dca83832afe48f8f3f94e702c571a3f57aef7a;p=ardour.git diff --git a/libs/ardour/ardour/types.h b/libs/ardour/ardour/types.h index 435cf8d416..05d6d0b27d 100644 --- a/libs/ardour/ardour/types.h +++ b/libs/ardour/ardour/types.h @@ -20,22 +20,24 @@ #ifndef __ardour_types_h__ #define __ardour_types_h__ -#ifndef __STDC_FORMAT_MACROS -#define __STDC_FORMAT_MACROS /* PRI; C++ requires explicit requesting of these */ -#endif - #include #include +#include #include #include +#include #include #include #include -#include "control_protocol/timecode.h" + +#include "timecode/bbt_time.h" +#include "timecode/time.h" + #include "pbd/id.h" -#include "ardour/bbt_time.h" +#include "evoral/Range.hpp" + #include "ardour/chan_count.h" #include @@ -49,28 +51,41 @@ namespace ARDOUR { class Source; class AudioSource; class Route; + class Region; typedef jack_default_audio_sample_t Sample; typedef float pan_t; typedef float gain_t; typedef uint32_t layer_t; typedef uint64_t microseconds_t; - typedef uint32_t nframes_t; - typedef int64_t nframes64_t; - + typedef jack_nframes_t pframes_t; - /** "Session frames", frames relative to the session timeline. - * Everything related to transport position etc. should be of this type. - * We might want to make this a compile time option for 32-bitters who - * don't want to pay for extremely long session times they don't need... - */ - typedef int64_t sframes_t; + /* Any position measured in audio frames. + Assumed to be non-negative but not enforced. + */ typedef int64_t framepos_t; - /* any offset from a framepos_t, measured in audio frames */ + + /* Any distance from a given framepos_t. + Maybe positive or negative. + */ 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 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 { @@ -88,48 +103,41 @@ 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. - */ - - 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 parameter.h - * XXX: I don't think/hope these hex values matter anymore. + /* 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 */ enum AutomationType { - NullAutomation = 0x0, - GainAutomation = 0x1, - PanAutomation = 0x2, - PluginAutomation = 0x4, - SoloAutomation = 0x8, - MuteAutomation = 0x10, - MidiCCAutomation = 0x20, - MidiPgmChangeAutomation = 0x21, - MidiPitchBenderAutomation = 0x22, - MidiChannelPressureAutomation = 0x23, - MidiSystemExclusiveAutomation = 0x24, - FadeInAutomation = 0x40, - FadeOutAutomation = 0x80, - EnvelopeAutomation = 0x100 + NullAutomation, + GainAutomation, + PanAzimuthAutomation, + PanElevationAutomation, + PanWidthAutomation, + PanFrontBackAutomation, + PanLFEAutomation, + PluginAutomation, + SoloAutomation, + MuteAutomation, + MidiCCAutomation, + MidiPgmChangeAutomation, + MidiPitchBenderAutomation, + MidiChannelPressureAutomation, + MidiSystemExclusiveAutomation, + FadeInAutomation, + FadeOutAutomation, + EnvelopeAutomation, + RecEnableAutomation }; enum AutoState { @@ -155,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, @@ -185,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, @@ -208,25 +218,63 @@ namespace ARDOUR { Type type; - Timecode::Time timecode; - BBT_Time bbt; + Timecode::Time timecode; + Timecode::BBT_Time bbt; union { - nframes_t frames; + framecnt_t frames; double seconds; }; 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; + case BBT: + return bbt == other.bbt; + case Frames: + return frames == other.frames; + 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 Frames: + return frames != 0; + 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 { - nframes_t start; - nframes_t end; + framepos_t start; + framepos_t end; uint32_t id; - AudioRange (nframes_t s, nframes_t e, uint32_t i) : start (s), end (e) , id (i) {} + AudioRange (framepos_t s, framepos_t e, uint32_t i) : start (s), end (e) , id (i) {} - nframes_t length() { return end - start + 1; } + framecnt_t length() { return end - start + 1; } bool operator== (const AudioRange& other) const { return start == other.start && end == other.end && id == other.id; @@ -236,17 +284,17 @@ namespace ARDOUR { return start == other.start && end == other.end; } - OverlapType coverage (nframes_t s, nframes_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); } }; struct MusicRange { - BBT_Time start; - BBT_Time end; + Timecode::BBT_Time start; + Timecode::BBT_Time end; uint32_t id; - MusicRange (BBT_Time& s, BBT_Time& e, uint32_t i) + MusicRange (Timecode::BBT_Time& s, Timecode::BBT_Time& e, uint32_t i) : start (s), end (e), id (i) {} bool operator== (const MusicRange& other) const { @@ -267,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 { @@ -297,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 { @@ -321,10 +415,10 @@ namespace ARDOUR { ShortCrossfade }; - enum LayerModel { - LaterHigher, - MoveAddHigher, - AddHigher + enum CrossfadeChoice { + RegionFades, + ConstantPowerMinus3dB, + ConstantPowerMinus6dB, }; enum ListenPosition { @@ -338,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, @@ -380,7 +465,8 @@ namespace ARDOUR { AudioUnit, LADSPA, LV2, - VST + Windows_VST, + LXVST, }; enum RunContext { @@ -392,7 +478,8 @@ namespace ARDOUR { enum SyncSource { JACK, MTC, - MIDIClock + MIDIClock, + LTC }; enum ShuttleBehaviour { @@ -415,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 AnalysisFeatureList; - - typedef std::list > RouteList; + typedef std::list > RouteList; + typedef std::list > WeakRouteList; class Bundle; typedef std::vector > BundleList; @@ -445,12 +520,6 @@ namespace ARDOUR { Rectified }; - enum QuantizeType { - Plain, - Legato, - Groove - }; - struct CleanupReport { std::vector paths; size_t space; @@ -486,13 +555,21 @@ 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, + FadeConstantPower, + FadeSymmetric, + }; } // namespace ARDOUR @@ -506,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); @@ -525,36 +605,38 @@ 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); std::ostream& operator<<(std::ostream& o, const ARDOUR::PositionLockStyle& sf); -static inline ARDOUR::nframes64_t -session_frame_to_track_frame (ARDOUR::nframes64_t session_frame, double speed) +static inline ARDOUR::framepos_t +session_frame_to_track_frame (ARDOUR::framepos_t session_frame, double speed) { - return (ARDOUR::nframes64_t)( (double)session_frame * speed ); + return (ARDOUR::framepos_t) ((long double) session_frame * (long double) speed); } -static inline ARDOUR::nframes64_t -track_frame_to_session_frame (ARDOUR::nframes64_t track_frame, double speed) +static inline ARDOUR::framepos_t +track_frame_to_session_frame (ARDOUR::framepos_t track_frame, double speed) { - return (ARDOUR::nframes64_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 these "global" */ +/* for now, break the rules and use "using" to make this "global" */ -using ARDOUR::nframes_t; -using ARDOUR::nframes64_t; +using ARDOUR::framepos_t; #endif /* __ardour_types_h__ */