#include <sys/types.h>
#include <sys/stat.h>
+#include <sys/time.h>
#include <errno.h>
#include <unistd.h>
Editor::external_audio_dialog ()
{
vector<Glib::ustring> paths;
+ uint32_t track_cnt;
if (session == 0) {
MessageDialog msg (0, _("You can't import or embed an audiofile until you have a session loaded."));
return;
}
+ track_cnt = 0;
+
+ for (TrackSelection::iterator x = selection->tracks.begin(); x != selection->tracks.end(); ++x) {
+ AudioTimeAxisView* atv = dynamic_cast<AudioTimeAxisView*>(*x);
+
+ if (!atv) {
+ continue;
+ } else if (atv->is_audio_track()) {
+ track_cnt++;
+ }
+ }
+
if (sfbrowser == 0) {
- sfbrowser = new SoundFileBrowser (*this, _("Add existing audio"), session, selection->tracks.size());
+ sfbrowser = new SoundFileOmega (*this, _("Add existing audio"), session, track_cnt);
} else {
- sfbrowser->reset (selection->tracks.size());
+ sfbrowser->reset (track_cnt);
}
sfbrowser->show_all ();
+ again:
int response = sfbrowser->run ();
- sfbrowser->hide ();
-
switch (response) {
+ case RESPONSE_APPLY:
+ // leave the dialog open
+ break;
+
case RESPONSE_OK:
+ sfbrowser->hide ();
break;
+
default:
// cancel from the browser - we are done
+ sfbrowser->hide ();
return;
}
break;
}
- if (sfbrowser->import.get_active()) {
- do_import (paths, chns, mode, where);
+ SrcQuality quality = sfbrowser->get_src_quality();
+
+ if (sfbrowser->copy_files_btn.get_active()) {
+ do_import (paths, chns, mode, quality, where);
} else {
do_embed (paths, chns, mode, where);
}
+
+ if (response == RESPONSE_APPLY) {
+ sfbrowser->clear_selection ();
+ goto again;
+ }
}
boost::shared_ptr<AudioTrack>
TrackSelection::iterator x;
for (x = selection->tracks.begin(); nth > 0 && x != selection->tracks.end(); ++x) {
- if (dynamic_cast<AudioTimeAxisView*>(*x)) {
+
+ atv = dynamic_cast<AudioTimeAxisView*>(*x);
+
+ if (!atv) {
+ continue;
+ } else if (atv->is_audio_track()) {
--nth;
}
}
atv = dynamic_cast<AudioTimeAxisView*>(*x);
}
- if (!atv) {
+ if (!atv || !atv->is_audio_track()) {
return boost::shared_ptr<AudioTrack>();
}
}
void
-Editor::do_import (vector<ustring> paths, ImportDisposition chns, ImportMode mode, nframes64_t& pos)
+Editor::do_import (vector<ustring> paths, ImportDisposition chns, ImportMode mode, SrcQuality quality, nframes64_t& pos)
{
boost::shared_ptr<AudioTrack> track;
vector<ustring> to_import;
track = get_nth_selected_audio_track (nth++);
}
- if (import_sndfiles (to_import, mode, pos, 1, -1, track)) {
+ if (import_sndfiles (to_import, mode, quality, pos, 1, -1, track)) {
goto out;
}
to_import.clear ();
to_import.push_back (*a);
- if (import_sndfiles (to_import, mode, pos, -1, -1, track)) {
+ if (import_sndfiles (to_import, mode, quality, pos, -1, -1, track)) {
goto out;
}
/* create 1 region from all paths, add to 1 track,
ignore "track"
*/
- if (import_sndfiles (paths, mode, pos, 1, 1, track)) {
+ if (import_sndfiles (paths, mode, quality, pos, 1, 1, track)) {
goto out;
}
break;
reuse "track" across paths
*/
- if (import_sndfiles (to_import, mode, pos, 1, 1, track)) {
+ if (import_sndfiles (to_import, mode, quality, pos, 1, 1, track)) {
goto out;
}
}
int
-Editor::import_sndfiles (vector<ustring> paths, ImportMode mode, nframes64_t& pos,
+Editor::import_sndfiles (vector<ustring> paths, ImportMode mode, SrcQuality quality, nframes64_t& pos,
int target_regions, int target_tracks, boost::shared_ptr<AudioTrack>& track)
{
WindowTitle title = string_compose (_("importing %1"), paths.front());
import_status.cancel = false;
import_status.freeze = false;
import_status.done = 0.0;
-
+ import_status.quality = quality;
+
interthread_progress_connection = Glib::signal_timeout().connect
(bind (mem_fun(*this, &Editor::import_progress_timeout), (gpointer) 0), 100);
goto out;
}
- if (add_sources (paths, import_status.sources, pos, mode, target_regions, target_tracks, track) == 0) {
+ if (add_sources (paths, import_status.sources, pos, mode, target_regions, target_tracks, track, false) == 0) {
session->save_state ("");
}
(*session, path, n,
(mode == ImportAsTapeTrack ?
AudioFileSource::Destructive :
- AudioFileSource::Flag (0))));
+ AudioFileSource::Flag (0)),
+ true, true));
} else {
source = boost::dynamic_pointer_cast<AudioFileSource> (s);
}
goto out;
}
- ret = add_sources (paths, sources, pos, mode, target_regions, target_tracks, track);
+ ret = add_sources (paths, sources, pos, mode, target_regions, target_tracks, track, true);
out:
track_canvas.get_window()->set_cursor (*current_canvas_cursor);
int
Editor::add_sources (vector<Glib::ustring> paths, SourceList& sources, nframes64_t& pos, ImportMode mode,
- int target_regions, int target_tracks, boost::shared_ptr<AudioTrack>& track)
+ int target_regions, int target_tracks, boost::shared_ptr<AudioTrack>& track, bool add_channel_suffix)
{
vector<boost::shared_ptr<AudioRegion> > regions;
ustring region_name;
/* take all the sources we have and package them up as a region */
- region_name = region_name_from_path (paths.front(), (sources.size() > 1));
+ region_name = region_name_from_path (paths.front(), (sources.size() > 1), false);
regions.push_back (boost::dynamic_pointer_cast<AudioRegion>
(RegionFactory::create (sources, 0, sources[0]->length(), region_name, 0,
SourceList just_one;
SourceList::iterator x;
+ uint32_t n;
- for (x = sources.begin(); x != sources.end(); ++x) {
+ for (n = 0, x = sources.begin(); x != sources.end(); ++x, ++n) {
just_one.clear ();
just_one.push_back (*x);
-
+
boost::shared_ptr<AudioFileSource> afs = boost::dynamic_pointer_cast<AudioFileSource> (*x);
- region_name = region_name_from_path (afs->path(), false);
-
+ region_name = region_name_from_path (afs->path(), false, true, sources.size(), n);
+
regions.push_back (boost::dynamic_pointer_cast<AudioRegion>
(RegionFactory::create (just_one, 0, (*x)->length(), region_name, 0,
Region::Flag (Region::DefaultFlags|Region::WholeFile|Region::External))));
output_chan = input_chan;
}
- for (vector<boost::shared_ptr<AudioRegion> >::iterator r = regions.begin(); r != regions.end(); ++r) {
+ int n = 0;
+
+ for (vector<boost::shared_ptr<AudioRegion> >::iterator r = regions.begin(); r != regions.end(); ++r, ++n) {
finish_bringing_in_audio (*r, input_chan, output_chan, pos, mode, track);
}
}
+ /* setup peak file building in another thread */
+
+ for (SourceList::iterator x = sources.begin(); x != sources.end(); ++x) {
+ SourceFactory::setup_peakfile (*x, true);
+ }
+
return 0;
}
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)
{
-
switch (mode) {
case ImportAsRegion:
/* relax, its been done */
{
if (!existing_track) {
- if (selection->tracks.empty()) {
- return -1;
- }
-
- AudioTimeAxisView* atv = dynamic_cast<AudioTimeAxisView*>(selection->tracks.front());
-
- if (!atv) {
+ existing_track = get_nth_selected_audio_track (0);
+
+ if (!existing_track) {
return -1;
}
-
- existing_track = atv->audio_track();
}
boost::shared_ptr<Playlist> playlist = existing_track->diskstream()->playlist();
{
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);
+ existing_track->set_name (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;