summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/SConscript3
-rw-r--r--libs/ardour/ardour/audioregion.h6
-rw-r--r--libs/ardour/ardour/filter.h (renamed from libs/ardour/ardour/audiofilter.h)31
-rw-r--r--libs/ardour/ardour/region.h3
-rw-r--r--libs/ardour/ardour/reverse.h6
-rw-r--r--libs/ardour/ardour/session.h2
-rw-r--r--libs/ardour/audioregion.cc8
-rw-r--r--libs/ardour/filter.cc (renamed from libs/ardour/audiofilter.cc)35
-rw-r--r--libs/ardour/region.cc8
-rw-r--r--libs/ardour/reverse.cc8
-rw-r--r--libs/ardour/session_state.cc15
-rw-r--r--libs/ardour/session_timefx.cc2
12 files changed, 74 insertions, 53 deletions
diff --git a/libs/ardour/SConscript b/libs/ardour/SConscript
index 5d56e198fb..a0070117e1 100644
--- a/libs/ardour/SConscript
+++ b/libs/ardour/SConscript
@@ -52,8 +52,8 @@ buffer_set.cc
meter.cc
amp.cc
panner.cc
+filter.cc
audiofilesource.cc
-audiofilter.cc
audioregion.cc
audiosource.cc
midi_source.cc
@@ -99,6 +99,7 @@ recent_sessions.cc
region.cc
region_factory.cc
reverse.cc
+quantize.cc
route.cc
route_group.cc
send.cc
diff --git a/libs/ardour/ardour/audioregion.h b/libs/ardour/ardour/audioregion.h
index 52a07679af..ddda1f4321 100644
--- a/libs/ardour/ardour/audioregion.h
+++ b/libs/ardour/ardour/audioregion.h
@@ -38,7 +38,7 @@ namespace ARDOUR {
class Route;
class Playlist;
class Session;
-class AudioFilter;
+class Filter;
class AudioSource;
class AudioRegion : public Region
@@ -115,10 +115,6 @@ class AudioRegion : public Region
int separate_by_channel (ARDOUR::Session&, vector<boost::shared_ptr<AudioRegion> >&) const;
- /* filter */
-
- int apply (AudioFilter&);
-
/* export */
int exportme (ARDOUR::Session&, ARDOUR::AudioExportSpecification&);
diff --git a/libs/ardour/ardour/audiofilter.h b/libs/ardour/ardour/filter.h
index 6b60544942..0e4c6b3de0 100644
--- a/libs/ardour/ardour/audiofilter.h
+++ b/libs/ardour/ardour/filter.h
@@ -1,5 +1,6 @@
/*
- Copyright (C) 2004 Paul Davis
+ Copyright (C) 2007 Paul Davis
+ Author: Dave Robillard
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
@@ -17,34 +18,34 @@
*/
-#ifndef __ardour_audiofilter_h__
-#define __ardour_audiofilter_h__
+#ifndef __ardour_filter_h__
+#define __ardour_filter_h__
#include <vector>
-#include <ardour/audioregion.h>
+#include <ardour/region.h>
namespace ARDOUR {
-class AudioRegion;
+class Region;
class Session;
-class AudioFilter {
+class Filter {
public:
- AudioFilter (ARDOUR::Session& s)
- : session (s){}
- virtual ~AudioFilter() {}
+ virtual ~Filter() {}
- virtual int run (boost::shared_ptr<ARDOUR::AudioRegion>) = 0;
- std::vector<boost::shared_ptr<ARDOUR::AudioRegion> > results;
+ virtual int run (boost::shared_ptr<ARDOUR::Region>) = 0;
+ std::vector<boost::shared_ptr<ARDOUR::Region> > results;
protected:
- ARDOUR::Session& session;
+ Filter (ARDOUR::Session& s) : session(s) {}
- int make_new_sources (boost::shared_ptr<ARDOUR::AudioRegion>, ARDOUR::SourceList&);
- int finish (boost::shared_ptr<ARDOUR::AudioRegion>, ARDOUR::SourceList&);
+ int make_new_sources (boost::shared_ptr<ARDOUR::Region>, ARDOUR::SourceList&);
+ int finish (boost::shared_ptr<ARDOUR::Region>, ARDOUR::SourceList&);
+
+ ARDOUR::Session& session;
};
} /* namespace */
-#endif /* __ardour_audiofilter_h__ */
+#endif /* __ardour_filter_h__ */
diff --git a/libs/ardour/ardour/region.h b/libs/ardour/ardour/region.h
index c3aac3dfa8..e6b799fdcf 100644
--- a/libs/ardour/ardour/region.h
+++ b/libs/ardour/ardour/region.h
@@ -35,6 +35,7 @@ class XMLNode;
namespace ARDOUR {
class Playlist;
+class Filter;
enum RegionEditState {
EditChangesNothing = 0,
@@ -165,6 +166,8 @@ class Region : public PBD::StatefulDestructible, public boost::enable_shared_fro
void set_opaque (bool yn);
void set_locked (bool yn);
void set_position_locked (bool yn);
+
+ int apply (Filter&);
virtual uint32_t read_data_count() const { return _read_data_count; }
diff --git a/libs/ardour/ardour/reverse.h b/libs/ardour/ardour/reverse.h
index 3296c77c62..7870b5aa2e 100644
--- a/libs/ardour/ardour/reverse.h
+++ b/libs/ardour/ardour/reverse.h
@@ -20,16 +20,16 @@
#ifndef __ardour_reverse_h__
#define __ardour_reverse_h__
-#include <ardour/audiofilter.h>
+#include <ardour/filter.h>
namespace ARDOUR {
-class Reverse : public AudioFilter {
+class Reverse : public Filter {
public:
Reverse (ARDOUR::Session&);
~Reverse ();
- int run (boost::shared_ptr<ARDOUR::AudioRegion>);
+ int run (boost::shared_ptr<ARDOUR::Region>);
};
} /* namespace */
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h
index 05d87620f2..63be24d9f7 100644
--- a/libs/ardour/ardour/session.h
+++ b/libs/ardour/ardour/session.h
@@ -553,7 +553,7 @@ class Session : public PBD::StatefulDestructible
int region_name (string& result, string base = string(""), bool newlevel = false) const;
string new_region_name (string);
- string path_from_region_name (string name, string identifier);
+ string path_from_region_name (DataType type, string name, string identifier);
boost::shared_ptr<Region> find_whole_file_parent (boost::shared_ptr<Region const>);
diff --git a/libs/ardour/audioregion.cc b/libs/ardour/audioregion.cc
index dcf17ba2ea..58ece331c3 100644
--- a/libs/ardour/audioregion.cc
+++ b/libs/ardour/audioregion.cc
@@ -38,7 +38,6 @@
#include <ardour/gain.h>
#include <ardour/dB.h>
#include <ardour/playlist.h>
-#include <ardour/audiofilter.h>
#include <ardour/audiofilesource.h>
#include <ardour/region_factory.h>
#include <ardour/runtime_functions.h>
@@ -977,13 +976,6 @@ AudioRegion::separate_by_channel (Session& session, vector<boost::shared_ptr<Aud
return 0;
}
-int
-AudioRegion::apply (AudioFilter& filter)
-{
- boost::shared_ptr<AudioRegion> ar = boost::dynamic_pointer_cast<AudioRegion> (shared_from_this());
- return filter.run (ar);
-}
-
nframes_t
AudioRegion::read_raw_internal (Sample* buf, nframes_t pos, nframes_t cnt) const
{
diff --git a/libs/ardour/audiofilter.cc b/libs/ardour/filter.cc
index d4d59d4a60..f655f71668 100644
--- a/libs/ardour/audiofilter.cc
+++ b/libs/ardour/filter.cc
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2004 Paul Davis
+ Copyright (C) 2004-2007 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
@@ -22,9 +22,10 @@
#include <pbd/basename.h>
#include <ardour/sndfilesource.h>
+#include <ardour/smf_source.h>
#include <ardour/session.h>
-#include <ardour/audioregion.h>
-#include <ardour/audiofilter.h>
+#include <ardour/region.h>
+#include <ardour/filter.h>
#include <ardour/region_factory.h>
#include <ardour/source_factory.h>
@@ -34,27 +35,28 @@ using namespace ARDOUR;
using namespace PBD;
int
-AudioFilter::make_new_sources (boost::shared_ptr<AudioRegion> region, SourceList& nsrcs)
+Filter::make_new_sources (boost::shared_ptr<Region> region, SourceList& nsrcs)
{
vector<string> names = region->master_source_names();
for (uint32_t i = 0; i < region->n_channels(); ++i) {
- string path = session.path_from_region_name (PBD::basename_nosuffix (names[i]), string (""));
+ string path = session.path_from_region_name (region->data_type(),
+ PBD::basename_nosuffix (names[i]), string (""));
if (path.length() == 0) {
- error << string_compose (_("audiofilter: error creating name for new audio file based on %1"), region->name())
+ error << string_compose (_("filter: error creating name for new file based on %1"), region->name())
<< endmsg;
return -1;
}
try {
- nsrcs.push_back (boost::dynamic_pointer_cast<AudioSource> (
- SourceFactory::createWritable (DataType::AUDIO, session, path, false, session.frame_rate())));
+ nsrcs.push_back (boost::dynamic_pointer_cast<Source> (
+ SourceFactory::createWritable (region->data_type(), session, path, false, session.frame_rate())));
}
catch (failed_constructor& err) {
- error << string_compose (_("audiofilter: error creating new audio file %1 (%2)"), path, strerror (errno)) << endmsg;
+ error << string_compose (_("filter: error creating new file %1 (%2)"), path, strerror (errno)) << endmsg;
return -1;
}
}
@@ -63,7 +65,7 @@ AudioFilter::make_new_sources (boost::shared_ptr<AudioRegion> region, SourceList
}
int
-AudioFilter::finish (boost::shared_ptr<AudioRegion> region, SourceList& nsrcs)
+Filter::finish (boost::shared_ptr<Region> region, SourceList& nsrcs)
{
string region_name;
@@ -75,20 +77,29 @@ AudioFilter::finish (boost::shared_ptr<AudioRegion> region, SourceList& nsrcs)
time (&xnow);
now = localtime (&xnow);
+ /* this is ugly. */
for (SourceList::iterator si = nsrcs.begin(); si != nsrcs.end(); ++si) {
boost::shared_ptr<AudioFileSource> afs = boost::dynamic_pointer_cast<AudioFileSource>(*si);
if (afs) {
afs->update_header (region->position(), *now, xnow);
afs->mark_immutable ();
}
+
+ boost::shared_ptr<SMFSource> smfs = boost::dynamic_pointer_cast<SMFSource>(*si);
+ if (smfs) {
+ smfs->update_header (region->position(), *now, xnow);
+ smfs->flush_footer ();
+ }
}
/* create a new region */
region_name = session.new_region_name (region->name());
results.clear ();
- results.push_back (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (nsrcs, 0, region->length(), region_name, 0,
- Region::Flag (Region::WholeFile|Region::DefaultFlags))));
+ results.push_back (RegionFactory::create (nsrcs, 0, region->length(), region_name, 0,
+ Region::Flag (Region::WholeFile|Region::DefaultFlags)));
return 0;
}
+
+
diff --git a/libs/ardour/region.cc b/libs/ardour/region.cc
index 8ac101282d..a828460bce 100644
--- a/libs/ardour/region.cc
+++ b/libs/ardour/region.cc
@@ -34,6 +34,7 @@
#include <ardour/session.h>
#include <ardour/source.h>
#include <ardour/region_factory.h>
+#include <ardour/filter.h>
#include "i18n.h"
@@ -1265,3 +1266,10 @@ Region::get_parent() const
return boost::shared_ptr<Region>();
}
+int
+Region::apply (Filter& filter)
+{
+ return filter.run (shared_from_this());
+}
+
+
diff --git a/libs/ardour/reverse.cc b/libs/ardour/reverse.cc
index c7ebecea31..02ec2924b0 100644
--- a/libs/ardour/reverse.cc
+++ b/libs/ardour/reverse.cc
@@ -33,7 +33,7 @@ using namespace std;
using namespace ARDOUR;
Reverse::Reverse (Session& s)
- : AudioFilter (s)
+ : Filter (s)
{
}
@@ -42,7 +42,7 @@ Reverse::~Reverse ()
}
int
-Reverse::run (boost::shared_ptr<AudioRegion> region)
+Reverse::run (boost::shared_ptr<Region> r)
{
SourceList nsrcs;
SourceList::iterator si;
@@ -53,6 +53,10 @@ Reverse::run (boost::shared_ptr<AudioRegion> region)
nframes_t to_read;
int ret = -1;
+ boost::shared_ptr<AudioRegion> region = boost::dynamic_pointer_cast<AudioRegion>(r);
+ if (!region)
+ return ret;
+
/* create new sources */
if (make_new_sources (region, nsrcs)) {
diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc
index f6debff123..a7c8dc0200 100644
--- a/libs/ardour/session_state.cc
+++ b/libs/ardour/session_state.cc
@@ -1502,19 +1502,24 @@ Session::get_sources_as_xml ()
}
string
-Session::path_from_region_name (string name, string identifier)
+Session::path_from_region_name (DataType type, string name, string identifier)
{
char buf[PATH_MAX+1];
uint32_t n;
SessionDirectory sdir(get_best_session_directory_for_new_source());
- string sound_dir = sdir.sound_path().to_string();
+ string sound_dir = ((type == DataType::AUDIO)
+ ? sdir.sound_path().to_string()
+ : sdir.midi_path().to_string());
+
+ string ext = ((type == DataType::AUDIO) ? ".wav" : ".mid");
for (n = 0; n < 999999; ++n) {
if (identifier.length()) {
- snprintf (buf, sizeof(buf), "%s/%s%s%" PRIu32 ".wav", sound_dir.c_str(), name.c_str(),
- identifier.c_str(), n);
+ snprintf (buf, sizeof(buf), "%s/%s%s%" PRIu32 "%s", sound_dir.c_str(), name.c_str(),
+ identifier.c_str(), n, ext.c_str());
} else {
- snprintf (buf, sizeof(buf), "%s/%s-%" PRIu32 ".wav", sound_dir.c_str(), name.c_str(), n);
+ snprintf (buf, sizeof(buf), "%s/%s-%" PRIu32 "%s", sound_dir.c_str(), name.c_str(),
+ n, ext.c_str());
}
if (!Glib::file_test (buf, Glib::FILE_TEST_EXISTS)) {
diff --git a/libs/ardour/session_timefx.cc b/libs/ardour/session_timefx.cc
index aac77a59c7..115d3eeeec 100644
--- a/libs/ardour/session_timefx.cc
+++ b/libs/ardour/session_timefx.cc
@@ -85,7 +85,7 @@ Session::tempoize_region (TimeStretchRequest& tsr)
rstr = names[i];
}
- string path = path_from_region_name (PBD::basename_nosuffix (rstr), ident);
+ string path = path_from_region_name (DataType::AUDIO, PBD::basename_nosuffix (rstr), ident);
if (path.length() == 0) {
error << string_compose (_("tempoize: error creating name for new audio file based on %1"), tsr.region->name())