fix missing Click outputs for new sessions
[ardour.git] / libs / ardour / ardour / types.h
index 417a9ed54d5f197edfbaa1c031e2bd671b7988ef..ee43d1f30f4b064016b33fa3dfcf4bb95edcf7bf 100644 (file)
 #include <boost/shared_ptr.hpp>
 #include <sys/types.h>
 #include <stdint.h>
+#include <pthread.h>
 
 #include <inttypes.h>
-#include <jack/types.h>
-#include <jack/midiport.h>
 
 #include "timecode/bbt_time.h"
 #include "timecode/time.h"
 
 #include "pbd/id.h"
 
+#include "evoral/Range.hpp"
+
 #include "ardour/chan_count.h"
 
 #include <map>
@@ -51,12 +52,12 @@ namespace ARDOUR {
        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 jack_nframes_t              pframes_t;
+       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;
 
        /* Any position measured in audio frames.
           Assumed to be non-negative but not enforced.
@@ -75,12 +76,15 @@ namespace ARDOUR {
 
        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<std::pair<frameoffset_t, frameoffset_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 {
@@ -98,17 +102,6 @@ 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.
        */
@@ -142,7 +135,8 @@ namespace ARDOUR {
                MidiSystemExclusiveAutomation,
                FadeInAutomation,
                FadeOutAutomation,
-               EnvelopeAutomation
+               EnvelopeAutomation,
+               RecEnableAutomation
        };
 
        enum AutoState {
@@ -182,6 +176,20 @@ namespace ARDOUR {
                MeterCustom
        };
 
+       enum MeterType {
+               MeterMaxSignal = 0x001,
+               MeterMaxPeak   = 0x002,
+               MeterPeak      = 0x004,
+               MeterKrms      = 0x008,
+               MeterK20       = 0x010,
+               MeterK14       = 0x020,
+               MeterIEC1DIN   = 0x040,
+               MeterIEC1NOR   = 0x080,
+               MeterIEC2BBC   = 0x100,
+               MeterIEC2EBU   = 0x200,
+               MeterVU        = 0x400
+       };
+
        enum TrackMode {
                Normal,
                NonLayered,
@@ -205,20 +213,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,
@@ -274,6 +270,9 @@ namespace ARDOUR {
                }
        };
 
+       /* 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;
@@ -291,8 +290,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);
                }
        };
 
@@ -322,10 +321,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 {
@@ -352,10 +353,15 @@ 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 {
@@ -371,6 +377,25 @@ namespace ARDOUR {
                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 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,
@@ -403,10 +428,10 @@ namespace ARDOUR {
                ShortCrossfade
        };
 
-       enum LayerModel {
-               LaterHigher,
-               MoveAddHigher,
-               AddHigher
+       enum CrossfadeChoice {
+               RegionFades,
+               ConstantPowerMinus3dB,
+               ConstantPowerMinus6dB,
        };
 
        enum ListenPosition {
@@ -420,15 +445,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,
@@ -462,7 +478,7 @@ namespace ARDOUR {
                AudioUnit,
                LADSPA,
                LV2,
-               VST,
+               Windows_VST,
                LXVST,
        };
 
@@ -473,9 +489,15 @@ namespace ARDOUR {
        };
 
        enum SyncSource {
-               JACK,
+               /* 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
+               MIDIClock,
+               LTC
        };
 
        enum ShuttleBehaviour {
@@ -498,19 +520,6 @@ 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<framepos_t> AnalysisFeatureList;
 
        typedef std::list<boost::shared_ptr<Route> > RouteList;
@@ -529,12 +538,6 @@ namespace ARDOUR {
                Rectified
        };
 
-       enum QuantizeType {
-               Plain,
-               Legato,
-               Groove
-       };
-
        struct CleanupReport {
                std::vector<std::string> paths;
                size_t                   space;
@@ -582,8 +585,34 @@ namespace ARDOUR {
                FadeLinear,
                FadeFast,
                FadeSlow,
-               FadeLogA,
-               FadeLogB
+               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
+       };
+
+       struct LatencyRange {
+           uint32_t min; //< samples
+           uint32_t max; //< samples
        };
 
 } // namespace ARDOUR
@@ -598,17 +627,19 @@ 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::VUMeterStandard& 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);
@@ -619,17 +650,19 @@ 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::VUMeterStandard& 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);