summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_audio_import.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2007-09-02 15:17:13 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2007-09-02 15:17:13 +0000
commitf2a2e9c00281c9bfe5ff7df31cdc8860129b282c (patch)
treee45988a790da04e1e72e917d2b0f7935526fe8a2 /gtk2_ardour/editor_audio_import.cc
parent6c2728f9815bcdbf1cbd702f271344e295ddb074 (diff)
limited history depth (no GUI yet); more work on import dialog and semantics
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@2361 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_audio_import.cc')
-rw-r--r--gtk2_ardour/editor_audio_import.cc132
1 files changed, 77 insertions, 55 deletions
diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc
index 0f05b27449..d2bbfa1113 100644
--- a/gtk2_ardour/editor_audio_import.cc
+++ b/gtk2_ardour/editor_audio_import.cc
@@ -97,14 +97,6 @@ Editor::external_audio_dialog ()
/* lets do it */
- AudioTrack* track = 0;
-
- if (!selection->tracks.empty()) {
- AudioTimeAxisView* atv = dynamic_cast<AudioTimeAxisView*>(selection->tracks.front());
- if (atv) {
- track = atv->audio_track();
- }
- }
paths = browser.get_paths ();
ImportPosition pos = browser.get_position ();
@@ -128,24 +120,24 @@ Editor::external_audio_dialog ()
}
if (browser.import.get_active()) {
- do_import (paths, chns, mode, track, where);
+ do_import (paths, chns, mode, where);
} else {
- do_embed (paths, chns, mode, track, where);
+ do_embed (paths, chns, mode, where);
}
}
void
-Editor::do_import (vector<ustring> paths, ImportChannel chns, ImportMode mode, AudioTrack* track, nframes64_t& pos)
+Editor::do_import (vector<ustring> paths, ImportChannel chns, ImportMode mode, nframes64_t& pos)
{
switch (chns) {
- case Editing::ImportThingPerFile:
- case Editing::ImportThingForAll:
- import_status.multichan = true;
+ case Editing::ImportDistinctChannels:
+ import_status.multichan = false;
break;
- case Editing::ImportThingPerChannel:
- import_status.multichan = false;
+ default:
+ import_status.multichan = true;
break;
+
}
if (interthread_progress_window == 0) {
@@ -159,31 +151,31 @@ Editor::do_import (vector<ustring> paths, ImportChannel chns, ImportMode mode, A
to_import.clear ();
to_import.push_back (*a);
- import_sndfile (to_import, mode, track, pos);
+ import_sndfile (to_import, mode, pos);
}
interthread_progress_window->hide_all ();
}
bool
-Editor::idle_do_embed (vector<ustring> paths, ImportChannel chns, ImportMode mode, AudioTrack* track, nframes64_t& pos)
+Editor::idle_do_embed (vector<ustring> paths, ImportChannel chns, ImportMode mode, nframes64_t& pos)
{
- _do_embed (paths, chns, mode, track, pos);
+ _do_embed (paths, chns, mode, pos);
return false;
}
void
-Editor::do_embed (vector<ustring> paths, ImportChannel chns, ImportMode mode, AudioTrack* track, nframes64_t& pos)
+Editor::do_embed (vector<ustring> paths, ImportChannel chns, ImportMode mode, nframes64_t& pos)
{
#ifdef GTKOSX
- Glib::signal_idle().connect (bind (mem_fun (*this, &Editor::idle_do_embed), paths, chns, mode, track, pos));
+ Glib::signal_idle().connect (bind (mem_fun (*this, &Editor::idle_do_embed), paths, chns, mode, pos));
#else
- _do_embed (paths, chns, mode, track, pos);
+ _do_embed (paths, chns, mode, pos);
#endif
}
void
-Editor::_do_embed (vector<ustring> paths, ImportChannel chns, ImportMode mode, AudioTrack* track, nframes64_t& pos)
+Editor::_do_embed (vector<ustring> paths, ImportChannel chns, ImportMode mode, nframes64_t& pos)
{
bool multiple_files = paths.size() > 1;
bool check_sample_rate = true;
@@ -192,21 +184,22 @@ Editor::_do_embed (vector<ustring> paths, ImportChannel chns, ImportMode mode, A
switch (chns) {
- case Editing::ImportThingPerFile:
- case Editing::ImportThingPerChannel:
+ case Editing::ImportDistinctFiles:
+ case Editing::ImportDistinctChannels:
for (vector<ustring>::iterator a = paths.begin(); a != paths.end(); ++a) {
to_embed.clear ();
to_embed.push_back (*a);
- if (embed_sndfile (to_embed, chns, multiple_files, check_sample_rate, mode, track, pos) < -1) {
+ if (embed_sndfile (to_embed, chns, multiple_files, check_sample_rate, mode, pos) < -1) {
goto out;
}
}
break;
- case Editing::ImportThingForAll:
- if (embed_sndfile (paths, chns, multiple_files, check_sample_rate, mode, track, pos) < -1) {
+ case Editing::ImportSerializeFiles:
+ case Editing::ImportMergeFiles:
+ if (embed_sndfile (paths, chns, multiple_files, check_sample_rate, mode, pos) < -1) {
goto out;
}
break;
@@ -221,7 +214,7 @@ Editor::_do_embed (vector<ustring> paths, ImportChannel chns, ImportMode mode, A
}
int
-Editor::import_sndfile (vector<ustring> paths, ImportMode mode, AudioTrack* track, nframes64_t& pos)
+Editor::import_sndfile (vector<ustring> paths, ImportMode mode, nframes64_t& pos)
{
WindowTitle title = string_compose (_("importing %1"), paths.front());
@@ -261,10 +254,12 @@ Editor::import_sndfile (vector<ustring> paths, ImportMode mode, AudioTrack* trac
interthread_progress_connection.disconnect ();
/* import thread finished - see if we should build a new track */
+
+ boost::shared_ptr<AudioTrack> track;
if (!import_status.new_regions.empty()) {
boost::shared_ptr<AudioRegion> region (import_status.new_regions.front());
- finish_bringing_in_audio (region, region->n_channels(), region->n_channels(), track, pos, mode);
+ finish_bringing_in_audio (region, region->n_channels(), region->n_channels(), pos, mode, track, 0);
}
track_canvas.get_window()->set_cursor (*current_canvas_cursor);
@@ -272,9 +267,9 @@ Editor::import_sndfile (vector<ustring> paths, ImportMode mode, AudioTrack* trac
}
int
-Editor::embed_sndfile (vector<Glib::ustring> paths, Editing::ImportChannel chns, bool multiple_files, bool& check_sample_rate, ImportMode mode,
- AudioTrack* track, nframes64_t& pos)
+Editor::embed_sndfile (vector<Glib::ustring> paths, Editing::ImportChannel chns, bool multiple_files, bool& check_sample_rate, ImportMode mode, nframes64_t& pos)
{
+ boost::shared_ptr<AudioTrack> track;
boost::shared_ptr<AudioFileSource> source;
SourceList sources;
boost::shared_ptr<AudioRegion> region;
@@ -437,7 +432,7 @@ Editor::embed_sndfile (vector<Glib::ustring> paths, Editing::ImportChannel chns,
}
}
- if (chns == Editing::ImportThingPerFile || chns == Editing::ImportThingForAll) {
+ if (chns == Editing::ImportMergeFiles) {
/* take all the sources we have and package them up as a region */
@@ -452,9 +447,9 @@ Editor::embed_sndfile (vector<Glib::ustring> paths, Editing::ImportChannel chns,
output_chan = input_chan;
}
- finish_bringing_in_audio (region, input_chan, output_chan, track, pos, mode);
+ finish_bringing_in_audio (region, input_chan, output_chan, pos, mode, track, 0);
- } else {
+ } else { // SerializeFiles, DistinctFiles, DistinctChannels
/* take each source and create a region for each one */
@@ -462,8 +457,9 @@ Editor::embed_sndfile (vector<Glib::ustring> paths, Editing::ImportChannel chns,
SourceList::iterator x;
vector<Glib::ustring>::iterator p = paths.begin();
vector<Glib::ustring>::iterator next_path;
-
- for (x = sources.begin(); x != sources.end(); ++x) {
+ int nth;
+
+ for (nth = 0, x = sources.begin(); x != sources.end(); ++x, ++nth) {
just_one.clear ();
just_one.push_back (*x);
@@ -479,7 +475,16 @@ Editor::embed_sndfile (vector<Glib::ustring> paths, Editing::ImportChannel chns,
output_chan = input_chan;
}
- finish_bringing_in_audio (region, 1, output_chan, track, pos, mode);
+ finish_bringing_in_audio (region, 1, output_chan, pos, mode, track, nth);
+
+ if (chns == ImportSerializeFiles) {
+ pos += region->length();
+ }
+
+ if (chns == ImportDistinctChannels || chns == ImportDistinctFiles) {
+ /* make a new track for the next region */
+ track.reset ();
+ }
/* don't run out of paths */
@@ -499,39 +504,56 @@ Editor::embed_sndfile (vector<Glib::ustring> paths, Editing::ImportChannel chns,
}
int
-Editor::finish_bringing_in_audio (boost::shared_ptr<AudioRegion> region, uint32_t in_chans, uint32_t out_chans, AudioTrack* track, nframes64_t& pos, ImportMode mode)
+Editor::finish_bringing_in_audio (boost::shared_ptr<AudioRegion> region, uint32_t in_chans, uint32_t out_chans, nframes64_t& pos,
+ ImportMode mode, boost::shared_ptr<AudioTrack>& existing_track, int nth)
{
+ boost::shared_ptr<AudioTrack> track;
+
switch (mode) {
case ImportAsRegion:
/* relax, its been done */
break;
case ImportToTrack:
- if (track) {
- boost::shared_ptr<Playlist> playlist = track->diskstream()->playlist();
-
- boost::shared_ptr<AudioRegion> copy (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (region)));
- begin_reversible_command (_("insert sndfile"));
- XMLNode &before = playlist->get_state();
- playlist->add_region (copy, pos);
- session->add_command (new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
- commit_reversible_command ();
+ {
+ if (selection->tracks.empty()) {
+ return -1;
+ }
- pos += region->length();
+ AudioTimeAxisView* atv = dynamic_cast<AudioTimeAxisView*>(selection->tracks.front());
+
+ if (!atv) {
+ return -1;
}
- break;
+
+ track = atv->audio_track();
+ boost::shared_ptr<Playlist> playlist = track->diskstream()->playlist();
+ boost::shared_ptr<AudioRegion> copy (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (region)));
+ begin_reversible_command (_("insert sndfile"));
+ XMLNode &before = playlist->get_state();
+ playlist->add_region (copy, pos);
+ session->add_command (new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
+ commit_reversible_command ();
+ break;
+ }
+
case ImportAsTrack:
{
- list<boost::shared_ptr<AudioTrack> > at (session->new_audio_track (in_chans, out_chans, Normal, 1));
- if (!at.empty()) {
- boost::shared_ptr<AudioRegion> copy (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (region)));
- at.front()->set_name (basename_nosuffix (copy->name()), this);
- at.front()->diskstream()->playlist()->add_region (copy, pos);
+ if (!existing_track) {
+ list<boost::shared_ptr<AudioTrack> > at (session->new_audio_track (in_chans, out_chans, Normal, 1));
+ if (at.empty()) {
+ return -1;
+ }
+ existing_track = at.front();
+ existing_track->set_name (basename_nosuffix (region->name()), this);
}
+ boost::shared_ptr<AudioRegion> copy (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (region)));
+ existing_track->diskstream()->playlist()->add_region (copy, pos);
break;
}
+
case ImportAsTapeTrack:
{
list<boost::shared_ptr<AudioTrack> > at (session->new_audio_track (in_chans, out_chans, Destructive));