summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2010-09-16 16:11:26 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2010-09-16 16:11:26 +0000
commit8e00b86ebb0b6e3fd489b4cac58863d7c16465db (patch)
tree27e602cbd16a9c948728b578df112b78f0d62c12
parent084dda86a7c4391aba4e9f37f752af4846ded15d (diff)
make resampled sources (during import) report their "natural position" (i.e. BWF timecode) using the samplerate of the session, not the original source, for correct positioning; minor frame{pos,cnt}_t cleanup
git-svn-id: svn://localhost/ardour2/branches/3.0@7785 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--gtk2_ardour/editor_audio_import.cc4
-rw-r--r--gtk2_ardour/midi_region_view.cc2
-rw-r--r--libs/ardour/ardour/importable_source.h14
-rw-r--r--libs/ardour/ardour/resampled_source.h14
-rw-r--r--libs/ardour/ardour/sndfileimportable.h21
-rw-r--r--libs/ardour/import.cc1
-rw-r--r--libs/ardour/resampled_source.cc5
-rw-r--r--libs/ardour/sndfileimportable.cc8
8 files changed, 37 insertions, 32 deletions
diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc
index c1d51e11a4..db470fbe64 100644
--- a/gtk2_ardour/editor_audio_import.cc
+++ b/gtk2_ardour/editor_audio_import.cc
@@ -827,20 +827,16 @@ Editor::add_sources (vector<string> paths, SourceList& sources, nframes64_t& pos
if (as->natural_position() != 0) {
pos = as->natural_position();
- cerr << "\tgot " << pos << " from source TC info\n";
} else if (target_tracks == 1) {
/* hmm, no timestamp available, put it after the previous region
*/
if (n == 0) {
pos = get_preferred_edit_position ();
- cerr << "\tno timestamp, first file, use edit pos = " << pos << endl;
} else {
pos += rlen;
- cerr << "\tpacked-sequence-shuffle to " << pos << endl;
}
} else {
pos = get_preferred_edit_position ();
- cerr << "\tmultitracks, using edit position = " << pos << endl;
}
}
diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc
index f3e1b2cd98..505380cc25 100644
--- a/gtk2_ardour/midi_region_view.cc
+++ b/gtk2_ardour/midi_region_view.cc
@@ -1997,7 +1997,7 @@ MidiRegionView::move_selection(double dx, double dy, double cumulative_dy)
}
if (dy && !_selection.empty() && !no_sound_notes && trackview.editor().sound_notes()) {
-
+
if (to_play.size() > 1) {
PossibleChord shifted;
diff --git a/libs/ardour/ardour/importable_source.h b/libs/ardour/ardour/importable_source.h
index 7df346a782..c610d546f2 100644
--- a/libs/ardour/ardour/importable_source.h
+++ b/libs/ardour/ardour/importable_source.h
@@ -30,13 +30,13 @@ public:
ImportableSource () {}
virtual ~ImportableSource() {}
- virtual nframes_t read (Sample* buffer, nframes_t nframes) = 0;
- virtual float ratio() const { return 1.0f; }
- virtual uint32_t channels() const = 0;
- virtual nframes_t length() const = 0;
- virtual nframes_t samplerate() const = 0;
- virtual void seek (nframes_t pos) = 0;
- virtual nframes64_t natural_position() const = 0;
+ virtual nframes_t read (Sample* buffer, nframes_t nframes) = 0;
+ virtual float ratio() const { return 1.0f; }
+ virtual uint32_t channels() const = 0;
+ virtual framecnt_t length() const = 0;
+ virtual nframes_t samplerate() const = 0;
+ virtual void seek (nframes_t pos) = 0;
+ virtual framepos_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 b61303b65c..6d630bc44b 100644
--- a/libs/ardour/ardour/resampled_source.h
+++ b/libs/ardour/ardour/resampled_source.h
@@ -34,13 +34,13 @@ class ResampledImportableSource : public ImportableSource
~ResampledImportableSource ();
- nframes_t read (Sample* buffer, nframes_t nframes);
- float ratio() const { return src_data.src_ratio; }
- 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);
- nframes64_t natural_position() const { return source->natural_position(); }
+ nframes_t read (Sample* buffer, nframes_t nframes);
+ float ratio() const { return src_data.src_ratio; }
+ uint32_t channels() const { return source->channels(); }
+ framecnt_t length() const { return source->length(); }
+ nframes_t samplerate() const { return source->samplerate(); }
+ void seek (nframes_t);
+ framepos_t natural_position() const;
bool clamped_at_unity () const {
/* resampling may generate inter-sample peaks with magnitude > 1 */
diff --git a/libs/ardour/ardour/sndfileimportable.h b/libs/ardour/ardour/sndfileimportable.h
index 6e308415c9..aab8b6ac59 100644
--- a/libs/ardour/ardour/sndfileimportable.h
+++ b/libs/ardour/ardour/sndfileimportable.h
@@ -33,18 +33,23 @@ class SndFileImportableSource : public ImportableSource {
SndFileImportableSource (const std::string& path);
virtual ~SndFileImportableSource();
- nframes_t read (Sample* buffer, nframes_t nframes);
- uint32_t channels() const;
- nframes_t length() const;
- nframes_t samplerate() const;
- void seek (nframes_t pos);
- nframes64_t natural_position() const;
- bool clamped_at_unity () const;
+ nframes_t read (Sample* buffer, nframes_t nframes);
+ uint32_t channels() const;
+ framecnt_t length() const;
+ nframes_t samplerate() const;
+ void seek (nframes_t pos);
+ framepos_t natural_position() const;
+ bool clamped_at_unity () const;
protected:
SF_INFO sf_info;
boost::shared_ptr<SNDFILE> in;
- nframes_t timecode;
+
+ /* these are int64_t so as to be independent of whatever
+ types Ardour may use for framepos_t, framecnt_t etc.
+ */
+
+ int64_t timecode;
int64_t get_timecode_info (SNDFILE*, SF_BROADCAST_INFO*, bool&);
};
diff --git a/libs/ardour/import.cc b/libs/ardour/import.cc
index 784fedefdb..13fb859efe 100644
--- a/libs/ardour/import.cc
+++ b/libs/ardour/import.cc
@@ -214,7 +214,6 @@ create_mono_sources_for_writing (const vector<string>& new_paths, Session& sess,
{
const DataType type = SMFSource::safe_midi_file_extension (*i) ? DataType::MIDI : DataType::AUDIO;
-
source = SourceFactory::createWritable (type, sess,
i->c_str(),
false, // destructive
diff --git a/libs/ardour/resampled_source.cc b/libs/ardour/resampled_source.cc
index 675a0e426d..7379aa74af 100644
--- a/libs/ardour/resampled_source.cc
+++ b/libs/ardour/resampled_source.cc
@@ -134,3 +134,8 @@ ResampledImportableSource::seek (nframes_t pos)
src_data.end_of_input = 0;
}
+framepos_t
+ResampledImportableSource::natural_position () const
+{
+ return source->natural_position() * ratio ();
+}
diff --git a/libs/ardour/sndfileimportable.cc b/libs/ardour/sndfileimportable.cc
index 99697b888f..b51ad3634a 100644
--- a/libs/ardour/sndfileimportable.cc
+++ b/libs/ardour/sndfileimportable.cc
@@ -57,10 +57,10 @@ SndFileImportableSource::channels () const
return sf_info.channels;
}
-nframes_t
+framecnt_t
SndFileImportableSource::length () const
{
- return sf_info.frames;
+ return (framecnt_t) sf_info.frames;
}
nframes_t
@@ -75,10 +75,10 @@ SndFileImportableSource::seek (nframes_t /*pos*/)
sf_seek (in.get(), 0, SEEK_SET);
}
-nframes64_t
+framepos_t
SndFileImportableSource::natural_position () const
{
- return timecode;
+ return (framepos_t) timecode;
}
bool