turn off relevant fade in/out before creating peakfiles for compound region sources

git-svn-id: svn://localhost/ardour2/branches/3.0@9596 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis
2011-05-26 13:56:19 +00:00
parent f38db9a4e3
commit 16c280e405
4 changed files with 39 additions and 10 deletions

View File

@@ -106,7 +106,8 @@ public:
void remove_dependents (boost::shared_ptr<Region> region);
void copy_dependents (const std::vector<TwoRegions>&, boost::shared_ptr<Playlist>);
void pre_combine (std::vector<boost::shared_ptr<Region> >&, boost::shared_ptr<Region>);
void pre_combine (std::vector<boost::shared_ptr<Region> >&);
void post_combine (std::vector<boost::shared_ptr<Region> >&, boost::shared_ptr<Region>);
void pre_uncombine (std::vector<boost::shared_ptr<Region> >&, boost::shared_ptr<Region>);
private:

View File

@@ -390,7 +390,13 @@ public:
framepos_t start;
};
virtual void pre_combine (std::vector<boost::shared_ptr<Region> >&, boost::shared_ptr<Region>) {}
/* this is called before we create a new compound region */
virtual void pre_combine (std::vector<boost::shared_ptr<Region> >&) {}
/* this is called before we create a new compound region */
virtual void post_combine (std::vector<boost::shared_ptr<Region> >&, boost::shared_ptr<Region>) {}
/* this is called before we remove a compound region and replace it
with its constituent regions
*/
virtual void pre_uncombine (std::vector<boost::shared_ptr<Region> >&, boost::shared_ptr<Region>) {}
};

View File

@@ -1083,10 +1083,31 @@ AudioPlaylist::copy_dependents (const vector<TwoRegions>& old_and_new, boost::sh
}
void
AudioPlaylist::pre_combine (vector<boost::shared_ptr<Region> >& originals, boost::shared_ptr<Region> compound_region)
AudioPlaylist::pre_combine (vector<boost::shared_ptr<Region> >& copies)
{
/* sort the originals into time order */
RegionSortByPosition cmp;
boost::shared_ptr<AudioRegion> ar;
sort (copies.begin(), copies.end(), cmp);
ar = boost::dynamic_pointer_cast<AudioRegion> (copies.front());
/* copy the fade in of the first into the compound region */
if (ar) {
ar->set_fade_in_active (false);
}
ar = boost::dynamic_pointer_cast<AudioRegion> (copies.back());
if (ar) {
ar->set_fade_out_active (false);
}
}
void
AudioPlaylist::post_combine (vector<boost::shared_ptr<Region> >& originals, boost::shared_ptr<Region> compound_region)
{
RegionSortByPosition cmp;
boost::shared_ptr<AudioRegion> ar;
boost::shared_ptr<AudioRegion> cr;
@@ -1103,9 +1124,6 @@ AudioPlaylist::pre_combine (vector<boost::shared_ptr<Region> >& originals, boost
if (ar) {
cr->set_fade_in (ar->fade_in());
/* disable the fade in of the first */
ar->set_fade_in_active (false);
}
@@ -1114,7 +1132,6 @@ AudioPlaylist::pre_combine (vector<boost::shared_ptr<Region> >& originals, boost
if (ar) {
/* copy the fade out of the last into the compound region */
cr->set_fade_out (ar->fade_out());
/* disable the fade out of the first */
ar->set_fade_out_active (false);
}
}

View File

@@ -3071,6 +3071,7 @@ Playlist::combine (const RegionList& r)
framepos_t earliest_position = max_framepos;
vector<TwoRegions> old_and_new_regions;
vector<boost::shared_ptr<Region> > originals;
vector<boost::shared_ptr<Region> > copies;
string parent_name;
string child_name;
uint32_t max_level = 0;
@@ -3105,6 +3106,7 @@ Playlist::combine (const RegionList& r)
old_and_new_regions.push_back (TwoRegions (original_region,copied_region));
originals.push_back (original_region);
copies.push_back (copied_region);
RegionFactory::add_compound_association (original_region, copied_region);
@@ -3123,6 +3125,8 @@ Playlist::combine (const RegionList& r)
pl->in_partition = false;
pre_combine (copies);
/* now create a new PlaylistSource for each channel in the new playlist */
SourceList sources;
@@ -3131,6 +3135,7 @@ Playlist::combine (const RegionList& r)
for (uint32_t chn = 0; chn < channels; ++chn) {
sources.push_back (SourceFactory::createFromPlaylist (_type, _session, pl, parent_name, chn, 0, extent.second, false, false));
}
/* now a new whole-file region using the list of sources */
@@ -3169,8 +3174,8 @@ Playlist::combine (const RegionList& r)
/* do type-specific stuff with the originals and the new compound
region
*/
pre_combine (originals, compound_region);
post_combine (originals, compound_region);
/* add the new region at the right location */