set_default_envelope ();
listen_to_my_curves ();
- listen_to_my_sources ();
+ connect_to_analysis_changed ();
}
/** Constructor for use by derived types only */
, _envelope (new AutomationList(Evoral::Parameter(EnvelopeAutomation)))
{
init ();
+ assert (_sources.size() == _master_sources.size());
}
/** Basic AudioRegion constructor (one channel) */
}
init ();
+ assert (_sources.size() == _master_sources.size());
}
/* Basic AudioRegion constructor (one channel) */
}
init ();
+ assert (_sources.size() == _master_sources.size());
}
/** Basic AudioRegion constructor (many channels) */
, _envelope (new AutomationList(Evoral::Parameter(EnvelopeAutomation)))
{
init ();
- listen_to_my_sources ();
+ connect_to_analysis_changed ();
+ assert (_sources.size() == _master_sources.size());
}
/** Create a new AudioRegion, that is part of an existing one */
, _fade_out (new AutomationList(*other->_fade_out))
, _envelope (new AutomationList(*other->_envelope, offset, offset + length))
{
- set<boost::shared_ptr<Source> > unique_srcs;
-
- for (SourceList::const_iterator i= other->_sources.begin(); i != other->_sources.end(); ++i) {
- _sources.push_back (*i);
-
- pair<set<boost::shared_ptr<Source> >::iterator,bool> result;
-
- result = unique_srcs.insert (*i);
-
- if (result.second) {
- boost::shared_ptr<AudioFileSource> afs = boost::dynamic_pointer_cast<AudioFileSource> (*i);
- if (afs) {
- afs->HeaderPositionOffsetChanged.connect (mem_fun (*this, &AudioRegion::source_offset_changed));
- }
- }
- }
+ connect_to_header_position_offset_changed ();
/* return to default fades if the existing ones are too long */
assert(_type == DataType::AUDIO);
listen_to_my_curves ();
- listen_to_my_sources ();
+ connect_to_analysis_changed ();
+
+ assert (_sources.size() == _master_sources.size());
}
AudioRegion::AudioRegion (boost::shared_ptr<const AudioRegion> other)
set_default_fades ();
listen_to_my_curves ();
- listen_to_my_sources ();
+ connect_to_analysis_changed ();
+
+ assert (_sources.size() == _master_sources.size());
}
AudioRegion::AudioRegion (boost::shared_ptr<const AudioRegion> other, const SourceList& srcs,
{
/* make-a-sort-of-copy-with-different-sources constructor (used by audio filter) */
- set<boost::shared_ptr<AudioSource> > unique_srcs;
-
- for (SourceList::const_iterator i=srcs.begin(); i != srcs.end(); ++i) {
-
- _sources.push_back (*i);
- _master_sources.push_back (*i);
+ for (SourceList::const_iterator i = _sources.begin(); i != _sources.end(); ++i) {
boost::shared_ptr<AudioFileSource> afs = boost::dynamic_pointer_cast<AudioFileSource> ((*i));
if (afs) {
_fade_out_disabled = 0;
listen_to_my_curves ();
- listen_to_my_sources ();
+ connect_to_analysis_changed ();
+
+ assert (_sources.size() == _master_sources.size());
}
AudioRegion::AudioRegion (boost::shared_ptr<AudioSource> src, const XMLNode& node)
}
assert(_type == DataType::AUDIO);
- listen_to_my_sources ();
+ connect_to_analysis_changed ();
+
+ assert (_sources.size() == _master_sources.size());
}
AudioRegion::AudioRegion (SourceList& srcs, const XMLNode& node)
}
assert(_type == DataType::AUDIO);
- listen_to_my_sources ();
+ connect_to_analysis_changed ();
+ assert (_sources.size() == _master_sources.size());
}
AudioRegion::~AudioRegion ()
}
void
-AudioRegion::listen_to_my_sources ()
+AudioRegion::connect_to_analysis_changed ()
{
for (SourceList::const_iterator i = _sources.begin(); i != _sources.end(); ++i) {
(*i)->AnalysisChanged.connect (mem_fun (*this, &AudioRegion::invalidate_transients));
}
}
+void
+AudioRegion::connect_to_header_position_offset_changed ()
+{
+ set<boost::shared_ptr<Source> > unique_srcs;
+
+ for (SourceList::const_iterator i = _sources.begin(); i != _sources.end(); ++i) {
+
+ if (unique_srcs.find (*i) == unique_srcs.end ()) {
+ unique_srcs.insert (*i);
+ boost::shared_ptr<AudioFileSource> afs = boost::dynamic_pointer_cast<AudioFileSource> (*i);
+ if (afs) {
+ afs->HeaderPositionOffsetChanged.connect (mem_fun (*this, &AudioRegion::source_offset_changed));
+ }
+ }
+ }
+}
+
void
AudioRegion::listen_to_my_curves ()
{