diff options
author | Carl Hetherington <carl@carlh.net> | 2010-04-09 14:11:47 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2010-04-09 14:11:47 +0000 |
commit | f4ac9430f3fc2c405334f3f02fe08a5782454396 (patch) | |
tree | 2858264db409fc1bfe778554f86100f01c1f0b3d /libs/ardour/ardour | |
parent | 77c09fc8248160ab60e2e229710d07934fe08894 (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.h | 3 | ||||
-rw-r--r-- | libs/ardour/ardour/importable_source.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/resampled_source.h | 8 | ||||
-rw-r--r-- | libs/ardour/ardour/silentfilesource.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/sndfileimportable.h | 1 | ||||
-rw-r--r-- | libs/ardour/ardour/sndfilesource.h | 2 |
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; |