Ardour  9.0-pre0-822-g12e3bc5c20
region.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2000-2017 Paul Davis <paul@linuxaudiosystems.com>
3  * Copyright (C) 2006-2014 David Robillard <d@drobilla.net>
4  * Copyright (C) 2007-2012 Carl Hetherington <carl@carlh.net>
5  * Copyright (C) 2013-2019 Robin Gareus <robin@gareus.org>
6  * Copyright (C) 2015-2017 Nick Mainsbridge <mainsbridge@gmail.com>
7  * Copyright (C) 2018 Ben Loftis <ben@harrisonconsoles.com>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License along
20  * with this program; if not, write to the Free Software Foundation, Inc.,
21  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22  */
23 
24 #pragma once
25 
26 #include <memory>
27 #include <vector>
28 
29 #include "temporal/domain_swap.h"
30 #include "temporal/timeline.h"
31 #include "temporal/range.h"
32 
33 #include "pbd/undo.h"
34 #include "pbd/signals.h"
35 #include "ardour/ardour.h"
36 #include "ardour/data_type.h"
37 #include "ardour/automatable.h"
38 #include "ardour/movable.h"
39 #include "ardour/readable.h"
40 #include "ardour/session_object.h"
41 #include "ardour/trimmable.h"
42 #include "ardour/types_convert.h"
43 
44 class XMLNode;
45 
46 namespace PBD {
47  class Progress;
48 }
49 
50 namespace ARDOUR {
51 
52 namespace Properties {
66  LIBARDOUR_API extern PBD::PropertyDescriptor<bool> valid_transients; // used for signal only
78  LIBARDOUR_API extern PBD::PropertyDescriptor<bool> contents; // type doesn't matter here, used for signal only
79  LIBARDOUR_API extern PBD::PropertyDescriptor<bool> region_fx; // type doesn't matter here, used for signal only
80 };
81 
82 class Playlist;
83 class Filter;
84 class ExportSpecification;
85 class Plugin;
86 class RegionFxPlugin;
87 
91  EditChangesID = 2
92 };
93 
96  InnerSplit = 1, // when splitting a Range, there's left/center/right parts of the split
98  Paste = 4
99 };
100 
102  : public SessionObject
103  , public std::enable_shared_from_this<Region>
104  , public Trimmable
105  , public Movable
107 {
108 public:
109  typedef std::vector<std::shared_ptr<Source> > SourceList;
110  typedef std::list<std::shared_ptr<RegionFxPlugin>> RegionFxList;
111 
112  static void make_property_quarks ();
113 
114  static PBD::Signal<void(std::shared_ptr<RegionList>, const PBD::PropertyChange&)> RegionsPropertyChanged;
115 
117 
118  typedef std::map <PBD::PropertyChange, RegionList> ChangeMap;
119 
120  virtual ~Region();
121 
123  bool set_name (const std::string& str);
124 
125  PBD::PropertyList derive_properties (bool with_times = true, bool with_envelope = false) const;
126 
127  const DataType& data_type () const { return _type; }
131 
139  timepos_t position () const { return _length.val().position(); }
140  timepos_t start () const { return _start.val(); }
141  timecnt_t length () const { return _length.val(); }
142  timepos_t end() const;
143  timepos_t nt_last() const { return end().decrement(); }
144 
145  virtual timecnt_t tail () const { return timecnt_t (0); }
146 
150 
151  samplepos_t position_sample () const { return position().samples(); }
152  samplecnt_t start_sample () const { return _start.val().samples(); }
153  samplecnt_t length_samples () const { return _length.val().samples(); }
154 
155  layer_t layer () const { return _layer; }
156 
157  void set_selected_for_solo(bool yn);
158 
159  timepos_t source_length (uint32_t n) const;
160  uint32_t max_source_level () const;
161 
162  /* these two are valid ONLY during a StateChanged signal handler */
163 
164  timepos_t last_position () const { return _last_length.position(); }
165  timecnt_t last_length () const { return _last_length; }
166 
167  samplecnt_t ancestral_start_sample () const { return _ancestral_start.val().samples(); }
168  samplecnt_t ancestral_length_samples () const { return _ancestral_length.val().samples(); }
169  timepos_t ancestral_start () const { return _ancestral_start.val(); }
170  timecnt_t ancestral_length () const { return _ancestral_length.val(); }
171 
183  {
184  Glib::Threads::Mutex::Lock lm (_operation_rgroup_mutex);
185  if (_retained_group_id == 0) {
186  _retained_take_cnt = 0;
187  ++_next_group_id;
188  _operation_rgroup_map.clear (); // this is used for split & paste operations that honor the region's prior grouping
189  _retained_group_id = _next_group_id << 4; // this is used for newly created regions via recording or importing
190  _clear_on_destruction = true;
191  } else {
192  _clear_on_destruction = false;
193  }
194  }
196  {
197  if (_clear_on_destruction) {
198  Glib::Threads::Mutex::Lock lm (_operation_rgroup_mutex);
199  _retained_group_id = 0;
200  _next_group_id += _retained_take_cnt;
201  _operation_rgroup_map.clear();
202  }
203  }
205  };
206 
207  static uint64_t next_group_id () { return _next_group_id; }
208  static void set_next_group_id (uint64_t ngid) { _next_group_id = ngid; }
209 
210  /* access the retained group-id for actions like Recording, Import.
211  *
212  * Note When a single take creates multiple layered regions (e.g. loop recording)
213  * then the group id need to be bumped for each take
214  */
215  static uint64_t get_retained_group_id (uint64_t take = 0) {
216  _retained_take_cnt = std::max (_retained_take_cnt, take);
217  return _retained_group_id + (take << 4);
218  }
219 
220  /* access the group-id for an operation on a region, honoring the existing region's group status */
221  static uint64_t get_region_operation_group_id (uint64_t old_region_group, RegionOperationFlag flags);
222 
223  uint64_t region_group () const { return _reg_group; }
224  void set_region_group (uint64_t rg, bool explicitly = false) { _reg_group = rg | (explicitly ? Explicit : NoGroup); }
225  void unset_region_group (bool explicitly = false) { _reg_group = (explicitly ? Explicit : NoGroup); }
226 
227  bool is_explicitly_grouped() { return (_reg_group & Explicit) == Explicit; }
228  bool is_implicitly_ungrouped() { return (_reg_group == NoGroup); }
229  bool is_explicitly_ungrouped() { return (_reg_group == Explicit); }
230 
231  float stretch () const { return _stretch; }
232  float shift () const { return _shift; }
233 
234  void set_ancestral_data (timepos_t const & start, timecnt_t const & length, float stretch, float shift);
235 
236  timecnt_t sync_offset (int& dir) const;
238 
240 
241  /* first_sample() is an alias; last_sample() just hides some math */
242 
243  samplepos_t first_sample () const { return position().samples(); }
244  samplepos_t last_sample () const { return first_sample() + length_samples() - 1; }
245 
254 
256  return Temporal::TimeRange (last_position(), last_position() + _last_length);
257  }
258 
260  return Temporal::TimeRange (timepos_t (first_sample()), timepos_t (first_sample() + length_samples()));
261  }
262 
264  return Temporal::TimeRange (position(), position() + length());
265  }
266 
267  bool hidden () const { return _hidden; }
268  bool muted () const { return _muted; }
269  bool opaque () const { return _opaque; }
270  bool locked () const { return _locked; }
271  bool position_locked () const { return _position_locked; }
272  bool video_locked () const { return _video_locked; }
273  bool automatic () const { return _automatic; }
274  bool whole_file () const { return _whole_file; }
275  bool captured () const { return !(_import || _external); }
276  bool can_move () const { return !_position_locked && !_locked; }
277  bool sync_marked () const { return _sync_marked; }
278  bool external () const { return _external; }
279  bool import () const { return _import; }
280 
282 
286 
288 
289  bool covers (samplepos_t sample) const {
290  return first_sample() <= sample && sample <= last_sample();
291  }
292 
293  bool covers (timepos_t const & pos) const {
294  return position() <= pos && pos <= nt_last();
295  }
296 
303  Temporal::OverlapType coverage (timepos_t const & start, timepos_t const & end, bool with_tail = false) const {
304  return Temporal::coverage_exclusive_ends (position(), with_tail ? nt_last() + tail() : nt_last(), start, end);
305  }
306 
307  bool exact_equivalent (std::shared_ptr<const Region>) const;
308  bool size_equivalent (std::shared_ptr<const Region>) const;
309  bool overlap_equivalent (std::shared_ptr<const Region>) const;
310  bool enclosed_equivalent (std::shared_ptr<const Region>) const;
311  bool layer_and_time_equivalent (std::shared_ptr<const Region>) const;
312  bool source_equivalent (std::shared_ptr<const Region>) const;
313  bool any_source_equivalent (std::shared_ptr<const Region>) const;
314  bool uses_source (std::shared_ptr<const Source>, bool shallow = false) const;
315  void deep_sources (std::set<std::shared_ptr<Source> >&) const;
316 
317  std::string source_string () const;
318 
319 
320  /* EDITING OPERATIONS */
321 
322  void set_length (timecnt_t const &);
323  void set_start (timepos_t const &);
324  void set_position (timepos_t const &);
327  virtual void update_after_tempo_map_change (bool send_change = true);
328  void nudge_position (timecnt_t const &);
329 
330  bool at_natural_position () const;
332 
333  void move_start (timecnt_t const & distance);
334  void trim_front (timepos_t const & new_position);
335  void trim_end (timepos_t const & new_position);
336  void trim_to (timepos_t const & pos, timecnt_t const & length);
337 
338  /* fades are inherently audio in nature and we specify them in samples */
339  virtual void fade_range (samplepos_t, samplepos_t) {}
340 
341  void cut_front (timepos_t const & new_position);
342  void cut_end (timepos_t const & new_position);
343 
344  void raise ();
345  void lower ();
346  void raise_to_top ();
348 
349  void set_sync_position (timepos_t const & n);
351  void set_hidden (bool yn);
352  void set_muted (bool yn);
353  void set_whole_file (bool yn);
354  void set_automatic (bool yn);
355  void set_opaque (bool yn);
356  void set_locked (bool yn);
357  void set_video_locked (bool yn);
358  void set_position_locked (bool yn);
359 
360  /* ONLY Playlist can call this */
361  void set_layer (layer_t l);
364  void modify_front_unchecked (timepos_t const & new_position, bool reset_fade);
365  void modify_end_unchecked (timepos_t const & new_position, bool reset_fade);
366 
370  return timepos_t (position().distance (region_beats_to_absolute_time (beats)));
371  }
374  return position().distance (region_beats_to_absolute_time (beats)).beats ();
375  }
378 
381 
384 
387  return timepos_t (position().distance (source_beats_to_absolute_time (beats)));
388  }
391 
393 
395 
396  int apply (Filter &, PBD::Progress* progress = 0);
397 
398  std::shared_ptr<ARDOUR::Playlist> playlist () const { return _playlist.lock(); }
399  virtual void set_playlist (std::weak_ptr<ARDOUR::Playlist>);
400 
401  void source_deleted (std::weak_ptr<Source>);
402 
403  bool is_compound () const;
404 
405  std::shared_ptr<Source> source (uint32_t n=0) const { return _sources[ (n < _sources.size()) ? n : 0 ]; }
406 
407  SourceList& sources_for_edit () { return _sources; }
408  const SourceList& sources () const { return _sources; }
409  const SourceList& master_sources () const { return _master_sources; }
410 
411  std::vector<std::string> master_source_names();
413 
414  /* automation */
415 
416  virtual std::shared_ptr<Evoral::Control>
417  control (const Evoral::Parameter& id, bool create=false) = 0;
418 
419  virtual std::shared_ptr<const Evoral::Control>
420  control (const Evoral::Parameter& id) const = 0;
421 
422  /* tags */
423 
424  std::string tags() const { return _tags; }
425  virtual bool set_tags (const std::string& str) {
426  if (_tags != str) {
427  _tags = str;
428  PropertyChanged (PBD::PropertyChange (Properties::tags));
429  }
430  return true;
431  }
432 
433  /* serialization */
434 
435  XMLNode& get_state () const;
436  virtual int set_state (const XMLNode&, int version);
437 
438  virtual bool do_export (std::string const&) const = 0;
439 
440  virtual std::shared_ptr<Region> get_parent() const;
441 
442  uint64_t layering_index () const { return _layering_index; }
443  void set_layering_index (uint64_t when) { _layering_index = when; }
444 
445  virtual bool is_dependent() const { return false; }
446  virtual bool depends_on (std::shared_ptr<Region> /*other*/) const { return false; }
447 
448  virtual void add_transient (samplepos_t) {
449  // no transients, but its OK
450  }
451 
452  virtual void clear_transients () {
453  // no transients, but its OK
454  }
455 
456  virtual void update_transient (samplepos_t /* old_position */, samplepos_t /* new_position */) {
457  // no transients, but its OK
458  }
459 
460  virtual void remove_transient (samplepos_t /* where */) {
461  // no transients, but its OK
462  }
463 
464  virtual void set_onsets (AnalysisFeatureList&) {
465  // no transients, but its OK
466  }
467 
472 
473  void captured_xruns (XrunPositions&, bool abs = false) const;
474 
482  // no transients, but its OK
483  }
484 
485  /* wrapper to the above for easy access throug Lua */
488  get_transients (rv);
489  return rv;
490  }
491 
492  bool has_transients () const;
493 
494  virtual int separate_by_channel (std::vector< std::shared_ptr<Region> >&) const {
495  return -1;
496  }
497 
499 
500  void drop_sources ();
501 
502  /* Allow to collect RegionsPropertyChanged signal emissions */
503  void set_changemap (ChangeMap* changemap) {
504  _changemap = changemap;
505  }
506 
507  void get_cue_markers (CueMarkers&, bool abs = false) const;
508  void move_cue_marker (CueMarker const &, timepos_t const & region_relative_position);
509  void rename_cue_marker (CueMarker&, std::string const &);
510 
511  /* Region Fx */
512  bool load_plugin (ARDOUR::PluginType type, std::string const& name);
513  bool add_plugin (std::shared_ptr<RegionFxPlugin>, std::shared_ptr<RegionFxPlugin> pos = std::shared_ptr<RegionFxPlugin> ());
514  virtual bool remove_plugin (std::shared_ptr<RegionFxPlugin>) { return false; }
515  virtual void reorder_plugins (RegionFxList const&);
516 
517  bool has_region_fx () const {
518  Glib::Threads::RWLock::ReaderLock lm (_fx_lock);
519  return !_plugins.empty ();
520  }
521 
522  size_t n_region_fx () const {
523  Glib::Threads::RWLock::ReaderLock lm (_fx_lock);
524  return _plugins.size ();
525  }
526 
527  std::shared_ptr<RegionFxPlugin> nth_plugin (uint32_t n) const {
528  Glib::Threads::RWLock::ReaderLock lm (_fx_lock);
529  for (auto const& i : _plugins) {
530  if (0 == n--) {
531  return i;
532  }
533  }
534  return std::shared_ptr<RegionFxPlugin> ();
535  }
536 
537  void foreach_plugin (std::function<void(std::weak_ptr<RegionFxPlugin>)> method) const {
538  Glib::Threads::RWLock::ReaderLock lm (_fx_lock);
539  for (auto const& i : _plugins) {
540  method (std::weak_ptr<RegionFxPlugin> (i));
541  }
542  }
543 
544 protected:
545  virtual XMLNode& state () const;
546 
547  friend class RegionFactory;
548 
550  Region (const SourceList& srcs);
551 
553  Region (std::shared_ptr<const Region>);
554 
556  Region (std::shared_ptr<const Region>, timecnt_t const & start_offset);
557 
559  Region (std::shared_ptr<const Region>, const SourceList&);
560 
562  Region (Session& s, timepos_t const & start, timecnt_t const & length, const std::string& name, DataType);
563 
564  virtual bool can_trim_start_before_source_start () const {
565  return false;
566  }
567 
568 protected:
569  virtual bool _add_plugin (std::shared_ptr<RegionFxPlugin>, std::shared_ptr<RegionFxPlugin>, bool) { return false; }
570  virtual void fx_latency_changed (bool no_emit);
571  virtual void fx_tail_changed (bool no_emit);
572 
573  virtual void send_change (const PBD::PropertyChange&);
574  virtual int _set_state (const XMLNode&, int version, PBD::PropertyChange& what_changed, bool send_signal);
575  virtual void set_position_internal (timepos_t const & pos);
576  virtual void set_length_internal (timecnt_t const &);
577  virtual void set_start_internal (timepos_t const &);
579  void first_edit ();
580 
581  void override_opaqueness (bool yn) {
582  _opaque = yn;
583  }
584 
585  /* This is always using AudioTime. convenient for evenlopes in AudioRegion */
586  timepos_t len_as_tpos () const { return timepos_t((samplepos_t)_length.val().samples()); }
587 
589 
590  mutable Glib::Threads::RWLock _fx_lock;
591  uint32_t _fx_latency;
592  uint32_t _fx_tail;
594 
603 
607 
608  std::weak_ptr<ARDOUR::Playlist> _playlist;
609 
611 
612  AnalysisFeatureList _onsets; // used by the Ferret (Aubio OnsetDetector)
613 
614  // _transient_user_start is covered by _valid_transients
616  samplepos_t _transient_user_start; // region's _start relative to user_transients
617 
618  // these are used by Playlist::find_next_transient() in absence of onsets
619  AnalysisFeatureList _transients; // Source Analysis (QM Transient), user read-only
622 
624 
625 private:
627 
629 
630  void maybe_uncopy ();
632 
633  bool verify_start (timepos_t const &);
635 
636  virtual void recompute_at_start () = 0;
637  virtual void recompute_at_end () = 0;
638 
656  PBD::Property<bool> _contents; // type is irrelevant
657 
661 
663 
665 
666  void use_sources (SourceList const &);
667 
668  enum RegionGroupFlags : uint64_t {
669  NoGroup = 0x0, // no flag: implicitly grouped if the id is nonzero; or implicitly 'un-grouped' if the group-id is zero
670  Explicit = 0x1, // the user has explicitly grouped or ungrouped this region. explicitly grouped regions can cross track-group boundaries
671  };
672  static uint64_t _retained_group_id;
673  static uint64_t _retained_take_cnt;
674  static uint64_t _next_group_id;
675 
676  static Glib::Threads::Mutex _operation_rgroup_mutex;
677  static std::map<uint64_t, uint64_t> _operation_rgroup_map;
678 
679  std::atomic<int> _source_deleted;
680  Glib::Threads::Mutex _source_list_lock;
682 };
683 
684 } /* namespace ARDOUR */
685 
Temporal::timepos_t source_beats_to_region_time(Temporal::Beats beats) const
Definition: region.h:386
void trim_front(timepos_t const &new_position)
void lower_to_bottom()
bool exact_equivalent(std::shared_ptr< const Region >) const
void set_hidden(bool yn)
timepos_t sync_position() const
void set_region_group(uint64_t rg, bool explicitly=false)
Definition: region.h:224
virtual void set_length_internal(timecnt_t const &)
AnalysisFeatureList _user_transients
Definition: region.h:615
void use_sources(SourceList const &)
virtual timecnt_t tail() const
Definition: region.h:145
void set_position_unchecked(timepos_t const &)
static uint64_t get_retained_group_id(uint64_t take=0)
Definition: region.h:215
bool covers(samplepos_t sample) const
Definition: region.h:289
void set_master_sources(const SourceList &)
samplepos_t first_sample() const
Definition: region.h:243
Temporal::Beats region_beats_to_source_beats(Temporal::Beats beats) const
Definition: region.h:373
void merge_features(AnalysisFeatureList &, const AnalysisFeatureList &, const sampleoffset_t) const
RegionFxList _plugins
Definition: region.h:593
Temporal::Beats source_beats_to_absolute_beats(Temporal::Beats beats) const
timecnt_t ancestral_length() const
Definition: region.h:170
virtual void set_playlist(std::weak_ptr< ARDOUR::Playlist >)
timepos_t earliest_possible_position() const
PBD::Property< bool > _import
Definition: region.h:645
PBD::Property< bool > _opaque
Definition: region.h:640
void set_layering_index(uint64_t when)
Definition: region.h:443
std::weak_ptr< ARDOUR::Playlist > _playlist
Definition: region.h:608
virtual void remove_transient(samplepos_t)
Definition: region.h:460
Temporal::timepos_t region_beats_to_region_time(Temporal::Beats beats) const
Definition: region.h:369
std::shared_ptr< Source > source(uint32_t n=0) const
Definition: region.h:405
virtual void add_transient(samplepos_t)
Definition: region.h:448
virtual void recompute_at_end()=0
static uint64_t next_group_id()
Definition: region.h:207
void suspend_property_changes()
timepos_t last_position() const
Definition: region.h:164
void transients(AnalysisFeatureList &)
virtual int _set_state(const XMLNode &, int version, PBD::PropertyChange &what_changed, bool send_signal)
virtual void update_after_tempo_map_change(bool send_change=true)
virtual void update_transient(samplepos_t, samplepos_t)
Definition: region.h:456
float stretch() const
Definition: region.h:231
Temporal::timepos_t absolute_time_to_region_time(Temporal::timepos_t const &) const
PBD::Property< bool > _valid_transients
Definition: region.h:598
void foreach_plugin(std::function< void(std::weak_ptr< RegionFxPlugin >)> method) const
Definition: region.h:537
void set_whole_file(bool yn)
samplecnt_t length_samples() const
Definition: region.h:153
Region(Session &s, timepos_t const &start, timecnt_t const &length, const std::string &name, DataType)
Temporal::timepos_t source_beats_to_absolute_time(Temporal::Beats beats) const
void finish_domain_bounce(Temporal::DomainBounceInfo &)
bool source_equivalent(std::shared_ptr< const Region >) const
void trim_end(timepos_t const &new_position)
virtual bool can_trim_start_before_source_start() const
Definition: region.h:564
bool at_natural_position() const
virtual void clear_transients()
Definition: region.h:452
void set_initial_position(timepos_t const &)
PBD::Property< timepos_t > _start
Definition: region.h:599
void set_automatic(bool yn)
virtual bool depends_on(std::shared_ptr< Region >) const
Definition: region.h:446
Region(std::shared_ptr< const Region >)
bool size_equivalent(std::shared_ptr< const Region >) const
void get_cue_markers(CueMarkers &, bool abs=false) const
samplecnt_t start_sample() const
Definition: region.h:152
virtual bool do_export(std::string const &) const =0
std::shared_ptr< RegionFxPlugin > nth_plugin(uint32_t n) const
Definition: region.h:527
uint32_t max_source_level() const
PBD::Property< float > _stretch
Definition: region.h:651
bool set_name(const std::string &str)
PBD::Property< bool > _sync_marked
Definition: region.h:595
bool has_transients() const
bool enclosed_equivalent(std::shared_ptr< const Region >) const
PBD::Property< bool > _hidden
Definition: region.h:647
static uint64_t _retained_take_cnt
Definition: region.h:673
bool verify_start(timepos_t const &)
void trim_to(timepos_t const &pos, timecnt_t const &length)
bool is_implicitly_ungrouped()
Definition: region.h:228
static std::map< uint64_t, uint64_t > _operation_rgroup_map
Definition: region.h:677
float shift() const
Definition: region.h:232
virtual bool _add_plugin(std::shared_ptr< RegionFxPlugin >, std::shared_ptr< RegionFxPlugin >, bool)
Definition: region.h:569
timepos_t adjust_to_sync(timepos_t const &) const
samplecnt_t ancestral_start_sample() const
Definition: region.h:167
virtual std::shared_ptr< const Evoral::Control > control(const Evoral::Parameter &id) const =0
timecnt_t _last_length
Definition: region.h:658
Region(std::shared_ptr< const Region >, timecnt_t const &start_offset)
void maybe_invalidate_transients()
static uint64_t _retained_group_id
Definition: region.h:672
void set_position_locked(bool yn)
virtual void fx_tail_changed(bool no_emit)
bool is_explicitly_grouped()
Definition: region.h:227
timepos_t start() const
Definition: region.h:140
std::atomic< int > _source_deleted
Definition: region.h:679
timecnt_t sync_offset(int &dir) const
DataType _type
Definition: region.h:588
void move_cue_marker(CueMarker const &, timepos_t const &region_relative_position)
void drop_sources()
timepos_t source_length(uint32_t n) const
void set_position(timepos_t const &)
virtual void fx_latency_changed(bool no_emit)
AnalysisFeatureList _transients
Definition: region.h:619
Temporal::OverlapType coverage(timepos_t const &start, timepos_t const &end, bool with_tail=false) const
Definition: region.h:303
bool has_region_fx() const
Definition: region.h:517
void set_length_unchecked(timecnt_t const &)
bool muted() const
Definition: region.h:268
void clear_sync_position()
PBD::Property< float > _shift
Definition: region.h:652
bool whole_file() const
Definition: region.h:274
void trim_to_internal(timepos_t const &position, timecnt_t const &length)
PBD::Property< timepos_t > _ancestral_start
Definition: region.h:649
virtual std::shared_ptr< Region > get_parent() const
static uint64_t _next_group_id
Definition: region.h:674
uint64_t layering_index() const
Definition: region.h:442
void set_start(timepos_t const &)
uint32_t _fx_latency
Definition: region.h:591
void modify_end_unchecked(timepos_t const &new_position, bool reset_fade)
std::vector< std::string > master_source_names()
uint64_t region_group() const
Definition: region.h:223
Temporal::TimeRange range() const
Definition: region.h:263
std::shared_ptr< ARDOUR::Playlist > playlist() const
Definition: region.h:398
PBD::Signal< void()> RegionFxChanged
Definition: region.h:116
bool sync_marked() const
Definition: region.h:277
void set_sync_position(timepos_t const &n)
timepos_t source_position() const
virtual int set_state(const XMLNode &, int version)
bool automatic() const
Definition: region.h:273
void override_opaqueness(bool yn)
Definition: region.h:581
virtual void fade_range(samplepos_t, samplepos_t)
Definition: region.h:339
Temporal::TimeDomain position_time_domain() const
bool uses_source(std::shared_ptr< const Source >, bool shallow=false) const
virtual ~Region()
static void make_property_quarks()
void set_layer(layer_t l)
void set_locked(bool yn)
XMLNode & get_state() const
PBD::Property< bool > _left_of_split
Definition: region.h:596
Glib::Threads::RWLock _fx_lock
Definition: region.h:590
bool load_plugin(ARDOUR::PluginType type, std::string const &name)
samplepos_t position_sample() const
Definition: region.h:151
timecnt_t last_length() const
Definition: region.h:165
uint32_t _fx_tail
Definition: region.h:592
static void set_next_group_id(uint64_t ngid)
Definition: region.h:208
void special_set_position(timepos_t const &)
AnalysisFeatureList _onsets
Definition: region.h:612
virtual bool remove_plugin(std::shared_ptr< RegionFxPlugin >)
Definition: region.h:514
timecnt_t source_relative_position(Temporal::timepos_t const &) const
bool verify_length(timecnt_t &)
timecnt_t length() const
Definition: region.h:141
void deep_sources(std::set< std::shared_ptr< Source > > &) const
PBD::ScopedConnectionList _source_deleted_connections
Definition: region.h:681
PBD::Property< timepos_t > _sync_position
Definition: region.h:602
void set_changemap(ChangeMap *changemap)
Definition: region.h:503
void set_video_locked(bool yn)
void set_length(timecnt_t const &)
PBD::Property< bool > _locked
Definition: region.h:641
virtual bool is_dependent() const
Definition: region.h:445
timepos_t end() const
std::map< PBD::PropertyChange, RegionList > ChangeMap
Definition: region.h:118
PBD::PropertyList derive_properties(bool with_times=true, bool with_envelope=false) const
std::string tags() const
Definition: region.h:424
PBD::Property< bool > _right_of_split
Definition: region.h:597
static PBD::Signal< void(std::shared_ptr< RegionList >, const PBD::PropertyChange &)> RegionsPropertyChanged
Definition: region.h:114
void set_selected_for_solo(bool yn)
const SourceList & sources() const
Definition: region.h:408
void mid_thaw(const PBD::PropertyChange &)
samplepos_t _transient_user_start
Definition: region.h:616
virtual void reorder_plugins(RegionFxList const &)
void register_properties()
virtual std::shared_ptr< Evoral::Control > control(const Evoral::Parameter &id, bool create=false)=0
PBD::Property< bool > _video_locked
Definition: region.h:642
virtual void send_change(const PBD::PropertyChange &)
void recompute_position_from_time_domain()
PBD::Property< bool > _contents
Definition: region.h:656
virtual bool set_tags(const std::string &str)
Definition: region.h:425
size_t n_region_fx() const
Definition: region.h:522
void set_muted(bool yn)
void rename_cue_marker(CueMarker &, std::string const &)
AnalysisFeatureList transients()
Definition: region.h:486
virtual void recompute_at_start()=0
timecnt_t region_relative_position(Temporal::timepos_t const &) const
void unset_region_group(bool explicitly=false)
Definition: region.h:225
bool add_plugin(std::shared_ptr< RegionFxPlugin >, std::shared_ptr< RegionFxPlugin > pos=std::shared_ptr< RegionFxPlugin >())
virtual int separate_by_channel(std::vector< std::shared_ptr< Region > > &) const
Definition: region.h:494
Region(const SourceList &srcs)
timepos_t len_as_tpos() const
Definition: region.h:586
samplepos_t _transient_analysis_end
Definition: region.h:621
samplepos_t last_sample() const
Definition: region.h:244
samplepos_t _transient_analysis_start
Definition: region.h:620
timepos_t position() const
Definition: region.h:139
static uint64_t get_region_operation_group_id(uint64_t old_region_group, RegionOperationFlag flags)
Trimmable::CanTrim can_trim() const
bool covers(timepos_t const &pos) const
Definition: region.h:293
PBD::Property< timecnt_t > _length
Definition: region.h:600
bool can_move() const
Definition: region.h:276
std::string source_string() const
void cut_front(timepos_t const &new_position)
bool opaque() const
Definition: region.h:269
bool external() const
Definition: region.h:278
bool is_explicitly_ungrouped()
Definition: region.h:229
PBD::Property< uint64_t > _layering_index
Definition: region.h:653
PBD::Property< bool > _position_locked
Definition: region.h:648
SourceList & sources_for_edit()
Definition: region.h:407
timepos_t ancestral_start() const
Definition: region.h:169
PBD::Property< timecnt_t > _ancestral_length
Definition: region.h:650
bool layer_and_time_equivalent(std::shared_ptr< const Region >) const
PBD::Property< bool > _whole_file
Definition: region.h:644
void nudge_position(timecnt_t const &)
void source_deleted(std::weak_ptr< Source >)
const DataType & data_type() const
Definition: region.h:127
SourceList _master_sources
Definition: region.h:606
void move_start(timecnt_t const &distance)
void start_domain_bounce(Temporal::DomainBounceInfo &)
bool any_source_equivalent(std::shared_ptr< const Region >) const
virtual void set_onsets(AnalysisFeatureList &)
Definition: region.h:464
std::list< std::shared_ptr< RegionFxPlugin > > RegionFxList
Definition: region.h:110
Temporal::TimeRange last_range() const
Definition: region.h:255
timepos_t nt_last() const
Definition: region.h:143
bool locked() const
Definition: region.h:270
bool video_locked() const
Definition: region.h:272
bool verify_start_and_length(timepos_t const &, timecnt_t &)
virtual void get_transients(AnalysisFeatureList &)
Definition: region.h:481
Region(std::shared_ptr< const Region >, const SourceList &)
static Glib::Threads::Mutex _operation_rgroup_mutex
Definition: region.h:676
void raise_to_top()
void set_ancestral_data(timepos_t const &start, timecnt_t const &length, float stretch, float shift)
void captured_xruns(XrunPositions &, bool abs=false) const
samplepos_t latest_possible_sample() const
RegionEditState _first_edit
Definition: region.h:659
bool _soloSelected
Definition: region.h:623
bool captured() const
Definition: region.h:275
layer_t _layer
Definition: region.h:660
Temporal::TimeDomain time_domain() const
PBD::Property< bool > _automatic
Definition: region.h:643
virtual XMLNode & state() const
Temporal::Beats absolute_time_to_region_beats(Temporal::timepos_t const &) const
const SourceList & master_sources() const
Definition: region.h:409
layer_t layer() const
Definition: region.h:155
void move_to_natural_position()
PBD::Property< std::string > _tags
Definition: region.h:654
Temporal::timepos_t region_beats_to_absolute_time(Temporal::Beats beats) const
void cut_end(timepos_t const &new_position)
samplecnt_t ancestral_length_samples() const
Definition: region.h:168
bool is_compound() const
void set_position_time_domain(Temporal::TimeDomain ps)
Glib::Threads::Mutex _source_list_lock
Definition: region.h:680
void modify_front_unchecked(timepos_t const &new_position, bool reset_fade)
int apply(Filter &, PBD::Progress *progress=0)
virtual void set_position_internal(timepos_t const &pos)
void subscribe_to_source_drop()
bool overlap_equivalent(std::shared_ptr< const Region >) const
PBD::Property< bool > _external
Definition: region.h:646
virtual void set_start_internal(timepos_t const &)
Temporal::Beats region_distance_to_region_beats(Temporal::timecnt_t const &) const
std::vector< std::shared_ptr< Source > > SourceList
Definition: region.h:109
Temporal::TimeRange range_samples() const
Definition: region.h:259
PBD::Property< uint64_t > _reg_group
Definition: region.h:655
Temporal::Beats absolute_time_to_source_beats(Temporal::timepos_t const &) const
ChangeMap * _changemap
Definition: region.h:662
void set_opaque(bool yn)
PBD::Property< bool > _muted
Definition: region.h:639
bool hidden() const
Definition: region.h:267
void maybe_uncopy()
SourceList _sources
Definition: region.h:604
bool position_locked() const
Definition: region.h:271
timepos_t decrement() const
Definition: timeline.h:192
Definition: xml++.h:114
int64_t val() const
Definition: int62.h:70
#define LIBARDOUR_API
PBD::PropertyDescriptor< bool > hidden
Definition: region.h:64
PBD::PropertyDescriptor< uint64_t > layering_index
PBD::PropertyDescriptor< bool > contents
PBD::PropertyDescriptor< bool > valid_transients
PBD::PropertyDescriptor< timepos_t > sync_position
PBD::PropertyDescriptor< bool > left_of_split
PBD::PropertyDescriptor< std::string > name
PBD::PropertyDescriptor< bool > external
PBD::PropertyDescriptor< float > stretch
PBD::PropertyDescriptor< bool > sync_marked
PBD::PropertyDescriptor< bool > position_locked
PBD::PropertyDescriptor< timecnt_t > length
PBD::PropertyDescriptor< bool > muted
PBD::PropertyDescriptor< bool > region_fx
PBD::PropertyDescriptor< bool > whole_file
PBD::PropertyDescriptor< uint64_t > reg_group
PBD::PropertyDescriptor< timepos_t > ancestral_start
PBD::PropertyDescriptor< bool > automatic
PBD::PropertyDescriptor< timepos_t > start
PBD::PropertyDescriptor< bool > opaque
PBD::PropertyDescriptor< bool > locked
PBD::PropertyDescriptor< bool > video_locked
PBD::PropertyDescriptor< bool > right_of_split
PBD::PropertyDescriptor< layer_t > layer
PBD::PropertyDescriptor< timecnt_t > ancestral_length
PBD::PropertyDescriptor< float > shift
PBD::PropertyDescriptor< std::string > tags
std::list< samplepos_t > AnalysisFeatureList
std::set< CueMarker > CueMarkers
RegionOperationFlag
Definition: region.h:94
@ LeftOfSplit
Definition: region.h:95
@ RightOfSplit
Definition: region.h:97
@ InnerSplit
Definition: region.h:96
@ Paste
Definition: region.h:98
RegionEditState
Definition: region.h:88
@ EditChangesID
Definition: region.h:91
@ EditChangesName
Definition: region.h:90
@ EditChangesNothing
Definition: region.h:89
Temporal::samplecnt_t samplecnt_t
std::vector< samplepos_t > XrunPositions
Temporal::timecnt_t timecnt_t
Temporal::timepos_t timepos_t
Temporal::sampleoffset_t sampleoffset_t
Temporal::samplepos_t samplepos_t
uint32_t layer_t
DebugBits Properties
Definition: axis_view.h:42
OverlapType coverage_exclusive_ends(T sa, T eaE, T sb, T ebE)
Definition: range.h:127
Range TimeRange
Definition: range.h:199