#include <inttypes.h>
#include <jack/types.h>
#include <jack/midiport.h>
-#include "musictime/time.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 <map>
class Source;
class AudioSource;
class Route;
- class Region;
+ class Region;
typedef jack_default_audio_sample_t Sample;
typedef float pan_t;
typedef uint64_t microseconds_t;
typedef jack_nframes_t pframes_t;
- /* Any position measured in audio frames.
- Assumed to be non-negative but not enforced.
- */
+ /* Any position measured in audio frames.
+ Assumed to be non-negative but not enforced.
+ */
typedef int64_t framepos_t;
- /* Any distance from a given framepos_t.
- Maybe positive or negative.
- */
+ /* Any distance from a given framepos_t.
+ Maybe positive or negative.
+ */
typedef int64_t frameoffset_t;
- /* Any count of audio frames.
- Assumed to be positive but not enforced.
- */
+ /* 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 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<std::pair<frameoffset_t,framecnt_t> > AudioIntervalResult;
- // associate a set of intervals with regions (e.g. for silence detection)
- typedef std::map<boost::shared_ptr<ARDOUR::Region>,AudioIntervalResult> AudioIntervalMap;
+ // 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 {
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 {
ExistingMaterial
};
+ enum AlignChoice {
+ UseCaptureTime,
+ UseExistingMaterial,
+ Automatic
+ };
+
enum MeterPoint {
MeterInput,
MeterPreFader,
MeterPostFader,
+ MeterOutput,
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,
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,
Type type;
- Timecode::Time timecode;
- BBT_Time bbt;
+ Timecode::Time timecode;
+ Timecode::BBT_Time bbt;
union {
framecnt_t frames;
};
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 {
framepos_t start;
framepos_t end;
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);
}
};
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 {
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 {
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 VUMeterStandard {
+ MeteringVUfrench, // + 2
+ MeteringVUamerican, // +-0
+ MeteringVUstandard // -4
+ };
+
+ 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 {
ShortCrossfade
};
- enum LayerModel {
- LaterHigher,
- MoveAddHigher,
- AddHigher
+ enum CrossfadeChoice {
+ RegionFades,
+ ConstantPowerMinus3dB,
+ ConstantPowerMinus6dB,
};
enum ListenPosition {
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,
AudioUnit,
LADSPA,
LV2,
- VST
+ Windows_VST,
+ LXVST,
};
enum RunContext {
enum SyncSource {
JACK,
MTC,
- MIDIClock
+ MIDIClock,
+ LTC
};
enum ShuttleBehaviour {
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;
+ typedef std::list<boost::shared_ptr<Route> > RouteList;
+ typedef std::list<boost::weak_ptr <Route> > WeakRouteList;
class Bundle;
typedef std::vector<boost::shared_ptr<Bundle> > BundleList;
Rectified
};
- enum QuantizeType {
- Plain,
- Legato,
- Groove
- };
-
struct CleanupReport {
std::vector<std::string> paths;
size_t space;
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
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);
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);
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" */