summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2010-04-09 14:11:47 +0000
committerCarl Hetherington <carl@carlh.net>2010-04-09 14:11:47 +0000
commitf4ac9430f3fc2c405334f3f02fe08a5782454396 (patch)
tree2858264db409fc1bfe778554f86100f01c1f0b3d /libs/ardour/ardour
parent77c09fc8248160ab60e2e229710d07934fe08894 (diff)
Prevent clipping during the import of files from sources that have
amplitudes greater than 1 when data is being stored in files that are clamped. e.g. when importing hot sources and resampling them when the session file format is integer. git-svn-id: svn://localhost/ardour2/branches/3.0@6879 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/ardour')
-rw-r--r--libs/ardour/ardour/audiosource.h3
-rw-r--r--libs/ardour/ardour/importable_source.h2
-rw-r--r--libs/ardour/ardour/resampled_source.h8
-rw-r--r--libs/ardour/ardour/silentfilesource.h2
-rw-r--r--libs/ardour/ardour/sndfileimportable.h1
-rw-r--r--libs/ardour/ardour/sndfilesource.h2
6 files changed, 17 insertions, 1 deletions
diff --git a/libs/ardour/ardour/audiosource.h b/libs/ardour/ardour/audiosource.h
index e78fb049d7..9677986449 100644
--- a/libs/ardour/ardour/audiosource.h
+++ b/libs/ardour/ardour/audiosource.h
@@ -100,6 +100,9 @@ class AudioSource : virtual public Source,
int prepare_for_peakfile_writes ();
void done_with_peakfile_writes (bool done = true);
+ /** @return true if the each source sample s must be clamped to -1 < s < 1 */
+ virtual bool clamped_at_unity () const = 0;
+
protected:
static bool _build_missing_peakfiles;
static bool _build_peakfiles;
diff --git a/libs/ardour/ardour/importable_source.h b/libs/ardour/ardour/importable_source.h
index 801e7888a9..7df346a782 100644
--- a/libs/ardour/ardour/importable_source.h
+++ b/libs/ardour/ardour/importable_source.h
@@ -37,6 +37,8 @@ public:
virtual nframes_t samplerate() const = 0;
virtual void seek (nframes_t pos) = 0;
virtual nframes64_t natural_position() const = 0;
+
+ virtual bool clamped_at_unity () const = 0;
};
}
diff --git a/libs/ardour/ardour/resampled_source.h b/libs/ardour/ardour/resampled_source.h
index efa1458152..b61303b65c 100644
--- a/libs/ardour/ardour/resampled_source.h
+++ b/libs/ardour/ardour/resampled_source.h
@@ -39,14 +39,20 @@ class ResampledImportableSource : public ImportableSource
uint32_t channels() const { return source->channels(); }
nframes_t length() const { return source->length(); }
nframes_t samplerate() const { return source->samplerate(); }
- void seek (nframes_t pos) { source->seek (pos); }
+ void seek (nframes_t);
nframes64_t natural_position() const { return source->natural_position(); }
+ bool clamped_at_unity () const {
+ /* resampling may generate inter-sample peaks with magnitude > 1 */
+ return false;
+ }
+
static const uint32_t blocksize;
private:
boost::shared_ptr<ImportableSource> source;
float* input;
+ int _src_type;
SRC_STATE* src_state;
SRC_DATA src_data;
};
diff --git a/libs/ardour/ardour/silentfilesource.h b/libs/ardour/ardour/silentfilesource.h
index 9b20f6f1b0..23128c4025 100644
--- a/libs/ardour/ardour/silentfilesource.h
+++ b/libs/ardour/ardour/silentfilesource.h
@@ -36,6 +36,8 @@ public:
bool destructive() const { return false; }
bool can_be_analysed() const { return false; }
+ bool clamped_at_unity() const { return false; }
+
protected:
friend class SourceFactory;
diff --git a/libs/ardour/ardour/sndfileimportable.h b/libs/ardour/ardour/sndfileimportable.h
index 95c6d80ebb..6e308415c9 100644
--- a/libs/ardour/ardour/sndfileimportable.h
+++ b/libs/ardour/ardour/sndfileimportable.h
@@ -39,6 +39,7 @@ class SndFileImportableSource : public ImportableSource {
nframes_t samplerate() const;
void seek (nframes_t pos);
nframes64_t natural_position() const;
+ bool clamped_at_unity () const;
protected:
SF_INFO sf_info;
diff --git a/libs/ardour/ardour/sndfilesource.h b/libs/ardour/ardour/sndfilesource.h
index 19dcb13536..96f39de2c8 100644
--- a/libs/ardour/ardour/sndfilesource.h
+++ b/libs/ardour/ardour/sndfilesource.h
@@ -57,6 +57,8 @@ class SndFileSource : public AudioFileSource {
bool one_of_several_channels () const;
+ bool clamped_at_unity () const;
+
static void setup_standard_crossfades (Session const &, nframes_t sample_rate);
static const Source::Flag default_writable_flags;