X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fcrossfade.h;h=1c7075eb7dfc690d765ae82a9e42c5197944824d;hb=184c7cedf9974ecce3445b2686a1ebb32703694c;hp=148b501e518d2e5537f787d7dfcc32c62bc501e9;hpb=3c00a7ca2ae34cb65c8d3394d9a012f20c69ee77;p=ardour.git diff --git a/libs/ardour/ardour/crossfade.h b/libs/ardour/ardour/crossfade.h index 148b501e51..1c7075eb7d 100644 --- a/libs/ardour/ardour/crossfade.h +++ b/libs/ardour/ardour/crossfade.h @@ -30,12 +30,21 @@ #include "ardour/ardour.h" #include "ardour/audioregion.h" -#include "ardour/crossfade_compare.h" #include "evoral/Curve.hpp" namespace ARDOUR { + namespace Properties { + /* "active" is defined elsewhere but we use it with crossfade also */ + extern PBD::PropertyDescriptor active; + extern PBD::PropertyDescriptor follow_overlap; + } + +enum AnchorPoint { + StartOfIn, + EndOfIn, + EndOfOut +}; -class AudioRegion; class Playlist; class Crossfade : public ARDOUR::AudioRegion @@ -50,9 +59,8 @@ class Crossfade : public ARDOUR::AudioRegion /* constructor for "fixed" xfades at each end of an internal overlap */ Crossfade (boost::shared_ptr in, boost::shared_ptr out, - nframes_t position, - nframes_t initial_length, - AnchorPoint); + framecnt_t initial_length, + AnchorPoint); /* constructor for xfade between two regions that are overlapped in any way except the "internal" case. @@ -68,10 +76,10 @@ class Crossfade : public ARDOUR::AudioRegion /* the usual XML constructor */ - Crossfade (const Playlist&, XMLNode&); + Crossfade (const Playlist&, XMLNode const &); virtual ~Crossfade(); - bool operator== (const ARDOUR::Crossfade&); + static void make_property_quarks (); XMLNode& get_state (void); int set_state (const XMLNode&, int version); @@ -79,11 +87,9 @@ class Crossfade : public ARDOUR::AudioRegion boost::shared_ptr in() const { return _in; } boost::shared_ptr out() const { return _out; } - nframes_t read_at (Sample *buf, Sample *mixdown_buffer, - float *gain_buffer, sframes_t position, nframes_t cnt, - uint32_t chan_n, - nframes_t read_frames = 0, - nframes_t skip_frames = 0) const; + framecnt_t read_at (Sample *buf, Sample *mixdown_buffer, + float *gain_buffer, framepos_t position, framecnt_t cnt, + uint32_t chan_n) const; bool refresh (); @@ -103,18 +109,13 @@ class Crossfade : public ARDOUR::AudioRegion return (_in == a && _out == b) || (_in == b && _out == a); } - nframes_t overlap_length() const; + framecnt_t overlap_length() const; PBD::Signal1 > Invalidated; - PBD::Signal1 StateChanged; - bool covers (nframes_t frame) const { - return _position <= frame && frame < _position + _length; - } - - OverlapType coverage (nframes_t start, nframes_t end) const; + OverlapType coverage (framepos_t start, framepos_t end) const; - static void set_buffer_size (nframes_t); + static void set_buffer_size (framecnt_t); bool active () const { return _active; } void set_active (bool yn); @@ -126,32 +127,32 @@ class Crossfade : public ARDOUR::AudioRegion AutomationList& fade_in() { return _fade_in; } AutomationList& fade_out() { return _fade_out; } - nframes_t set_xfade_length (nframes_t); + framecnt_t set_xfade_length (framecnt_t); bool is_dependent() const { return true; } bool depends_on (boost::shared_ptr other) const { return other == _in || other == _out; } - static nframes_t short_xfade_length() { return _short_xfade_length; } - static void set_short_xfade_length (nframes_t n); + static framecnt_t short_xfade_length() { return _short_xfade_length; } + static void set_short_xfade_length (framecnt_t n); - static PBD::Change ActiveChanged; - static PBD::Change FollowOverlapChanged; + /** emitted when the actual fade curves change, as opposed to one of the Stateful properties */ + PBD::Signal0 FadesChanged; private: friend struct CrossfadeComparePtr; friend class AudioPlaylist; - static nframes_t _short_xfade_length; + static framecnt_t _short_xfade_length; boost::shared_ptr _in; boost::shared_ptr _out; - bool _active; + PBD::Property _active; + PBD::Property _follow_overlap; bool _in_update; OverlapType overlap_type; AnchorPoint _anchor_point; - bool _follow_overlap; bool _fixed; int32_t layer_relation; @@ -163,11 +164,14 @@ class Crossfade : public ARDOUR::AudioRegion static Sample* crossfade_buffer_in; void initialize (); + void register_properties (); int compute (boost::shared_ptr, boost::shared_ptr, CrossfadeModel); bool update (); + bool operator== (const ARDOUR::Crossfade&); + protected: - nframes_t read_raw_internal (Sample*, sframes_t, nframes_t, int) const; + framecnt_t read_raw_internal (Sample*, framepos_t, framecnt_t, int) const; };