summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2007-01-26 03:54:12 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2007-01-26 03:54:12 +0000
commitfccc2229ea0c31675949b4ad5648c27b841e4d2a (patch)
treecc7a350bba03b20ca15c7c28ffa930388d1b04cd /libs
parent5ee3e58718f65ef9eb62a1b90d424dac68e770ff (diff)
fix "make mono regions", mostly
git-svn-id: svn://localhost/ardour2/trunk@1392 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/audioregion.h2
-rw-r--r--libs/ardour/audioregion.cc34
2 files changed, 28 insertions, 8 deletions
diff --git a/libs/ardour/ardour/audioregion.h b/libs/ardour/ardour/audioregion.h
index 7a88655afe..ef5f5dc6e7 100644
--- a/libs/ardour/ardour/audioregion.h
+++ b/libs/ardour/ardour/audioregion.h
@@ -118,7 +118,7 @@ class AudioRegion : public Region
void set_envelope_active (bool yn);
void set_default_envelope ();
- int separate_by_channel (ARDOUR::Session&, vector<AudioRegion*>&) const;
+ int separate_by_channel (ARDOUR::Session&, vector<boost::shared_ptr<AudioRegion> >&) const;
/* filter */
diff --git a/libs/ardour/audioregion.cc b/libs/ardour/audioregion.cc
index 1fc7703cfa..9f76b0f19e 100644
--- a/libs/ardour/audioregion.cc
+++ b/libs/ardour/audioregion.cc
@@ -42,6 +42,7 @@
#include <ardour/audiofilter.h>
#include <ardour/audiofilesource.h>
#include <ardour/destructive_filesource.h>
+#include <ardour/region_factory.h>
#include "i18n.h"
#include <locale.h>
@@ -1020,25 +1021,44 @@ AudioRegion::recompute_at_start ()
}
int
-AudioRegion::separate_by_channel (Session& session, vector<AudioRegion*>& v) const
+AudioRegion::separate_by_channel (Session& session, vector<boost::shared_ptr<AudioRegion> >& v) const
{
SourceList srcs;
string new_name;
+ int n;
- for (SourceList::const_iterator i = master_sources.begin(); i != master_sources.end(); ++i) {
+ if (sources.size() < 2) {
+ return 0;
+ }
+
+ n = 0;
+
+ for (SourceList::const_iterator i = sources.begin(); i != sources.end(); ++i) {
srcs.clear ();
srcs.push_back (*i);
- /* generate a new name */
-
- if (session.region_name (new_name, _name)) {
- return -1;
+ new_name = _name;
+
+ if (sources.size() == 2) {
+ if (n == 0) {
+ new_name += "-L";
+ } else {
+ new_name += "-R";
+ }
+ } else {
+ new_name += '-';
+ new_name += ('0' + n + 1);
}
/* create a copy with just one source */
- v.push_back (new AudioRegion (srcs, _start, _length, new_name, _layer, _flags));
+ boost::shared_ptr<Region> r = RegionFactory::create (srcs, _start, _length, new_name, _layer, _flags);
+ boost::shared_ptr<AudioRegion> ar = boost::dynamic_pointer_cast<AudioRegion> (r);
+
+ v.push_back (ar);
+
+ ++n;
}
return 0;