diff options
Diffstat (limited to 'libs/ardour/ardour/crossfade.h')
-rw-r--r-- | libs/ardour/ardour/crossfade.h | 180 |
1 files changed, 0 insertions, 180 deletions
diff --git a/libs/ardour/ardour/crossfade.h b/libs/ardour/ardour/crossfade.h deleted file mode 100644 index 1c7075eb7d..0000000000 --- a/libs/ardour/ardour/crossfade.h +++ /dev/null @@ -1,180 +0,0 @@ -/* - Copyright (C) 2000 Paul Davis - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -*/ - -#ifndef __ardour_overlap_h__ -#define __ardour_overlap_h__ - -#include <vector> -#include <algorithm> -#include <boost/shared_ptr.hpp> - - -#include "pbd/undo.h" -#include "pbd/statefuldestructible.h" - -#include "ardour/ardour.h" -#include "ardour/audioregion.h" -#include "evoral/Curve.hpp" - -namespace ARDOUR { - namespace Properties { - /* "active" is defined elsewhere but we use it with crossfade also */ - extern PBD::PropertyDescriptor<bool> active; - extern PBD::PropertyDescriptor<bool> follow_overlap; - } - -enum AnchorPoint { - StartOfIn, - EndOfIn, - EndOfOut -}; - -class Playlist; - -class Crossfade : public ARDOUR::AudioRegion -{ - public: - - class NoCrossfadeHere: std::exception { - public: - virtual const char *what() const throw() { return "no crossfade should be constructed here"; } - }; - - /* constructor for "fixed" xfades at each end of an internal overlap */ - - Crossfade (boost::shared_ptr<ARDOUR::AudioRegion> in, boost::shared_ptr<ARDOUR::AudioRegion> out, - framecnt_t initial_length, - AnchorPoint); - - /* constructor for xfade between two regions that are overlapped in any way - except the "internal" case. - */ - - Crossfade (boost::shared_ptr<ARDOUR::AudioRegion> in, boost::shared_ptr<ARDOUR::AudioRegion> out, CrossfadeModel, bool active); - - - /* copy constructor to copy a crossfade with new regions. used (for example) - when a playlist copy is made - */ - Crossfade (boost::shared_ptr<Crossfade>, boost::shared_ptr<ARDOUR::AudioRegion>, boost::shared_ptr<ARDOUR::AudioRegion>); - - /* the usual XML constructor */ - - Crossfade (const Playlist&, XMLNode const &); - virtual ~Crossfade(); - - static void make_property_quarks (); - - XMLNode& get_state (void); - int set_state (const XMLNode&, int version); - - boost::shared_ptr<ARDOUR::AudioRegion> in() const { return _in; } - boost::shared_ptr<ARDOUR::AudioRegion> out() const { return _out; } - - 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 (); - - uint32_t upper_layer () const { - return std::max (_in->layer(), _out->layer()); - } - - uint32_t lower_layer () const { - return std::min (_in->layer(), _out->layer()); - } - - bool involves (boost::shared_ptr<ARDOUR::AudioRegion> region) const { - return _in == region || _out == region; - } - - bool involves (boost::shared_ptr<ARDOUR::AudioRegion> a, boost::shared_ptr<ARDOUR::AudioRegion> b) const { - return (_in == a && _out == b) || (_in == b && _out == a); - } - - framecnt_t overlap_length() const; - - PBD::Signal1<void,boost::shared_ptr<Region> > Invalidated; - - OverlapType coverage (framepos_t start, framepos_t end) const; - - static void set_buffer_size (framecnt_t); - - bool active () const { return _active; } - void set_active (bool yn); - - bool following_overlap() const { return _follow_overlap; } - bool can_follow_overlap() const; - void set_follow_overlap (bool yn); - - AutomationList& fade_in() { return _fade_in; } - AutomationList& fade_out() { return _fade_out; } - - framecnt_t set_xfade_length (framecnt_t); - - bool is_dependent() const { return true; } - bool depends_on (boost::shared_ptr<Region> other) const { - return other == _in || other == _out; - } - - static framecnt_t short_xfade_length() { return _short_xfade_length; } - static void set_short_xfade_length (framecnt_t n); - - /** emitted when the actual fade curves change, as opposed to one of the Stateful properties */ - PBD::Signal0<void> FadesChanged; - - private: - friend struct CrossfadeComparePtr; - friend class AudioPlaylist; - - static framecnt_t _short_xfade_length; - - boost::shared_ptr<ARDOUR::AudioRegion> _in; - boost::shared_ptr<ARDOUR::AudioRegion> _out; - PBD::Property<bool> _active; - PBD::Property<bool> _follow_overlap; - bool _in_update; - OverlapType overlap_type; - AnchorPoint _anchor_point; - bool _fixed; - int32_t layer_relation; - - - mutable AutomationList _fade_in; - mutable AutomationList _fade_out; - - static Sample* crossfade_buffer_out; - static Sample* crossfade_buffer_in; - - void initialize (); - void register_properties (); - int compute (boost::shared_ptr<ARDOUR::AudioRegion>, boost::shared_ptr<ARDOUR::AudioRegion>, CrossfadeModel); - bool update (); - - bool operator== (const ARDOUR::Crossfade&); - - protected: - framecnt_t read_raw_internal (Sample*, framepos_t, framecnt_t, int) const; -}; - - -} // namespace ARDOUR - -#endif /* __ardour_overlap_h__ */ |