diff --git a/libs/ardour/import.cc b/libs/ardour/import.cc index deba3efb05..5dbc146291 100644 --- a/libs/ardour/import.cc +++ b/libs/ardour/import.cc @@ -373,71 +373,88 @@ write_midi_data_to_new_files (Evoral::SMF* source, ImportStatus& status, vector >& newfiles) { uint32_t buf_size = 4; - uint8_t* buf = (uint8_t*)malloc(buf_size); + uint8_t* buf = (uint8_t*) malloc (buf_size); status.progress = 0.0f; + assert (newfiles.size() == source->num_tracks()); + try { + vector >::iterator s = newfiles.begin(); + + for (unsigned i = 1; i <= source->num_tracks(); ++i) { - for (unsigned i = 1; i <= source->num_tracks(); ++i) { - boost::shared_ptr smfs = boost::dynamic_pointer_cast(newfiles[i-1]); - smfs->drop_model(); + boost::shared_ptr smfs = boost::dynamic_pointer_cast (*s); - source->seek_to_track(i); - - uint64_t t = 0; - uint32_t delta_t = 0; - uint32_t size = 0; - bool first = true; - - while (!status.cancel) { - gint ignored; // imported files either don't have NoteID's or - // we ignore them. - - size = buf_size; + smfs->drop_model (); + source->seek_to_track (i); - int ret = source->read_event(&delta_t, &size, &buf, &ignored); - if (size > buf_size) - buf_size = size; - - if (ret < 0) { // EOT - break; - } - - t += delta_t; - - if (ret == 0) { // Meta - continue; - } + uint64_t t = 0; + uint32_t delta_t = 0; + uint32_t size = 0; + bool first = true; - if (first) { - smfs->mark_streaming_write_started (); - first = false; + while (!status.cancel) { + gint note_id_ignored; // imported files either don't have NoteID's or we ignore them. + + size = buf_size; + + int ret = source->read_event (&delta_t, &size, &buf, ¬e_id_ignored); + + if (size > buf_size) { + buf_size = size; + } + + if (ret < 0) { // EOT + break; + } + + t += delta_t; + + if (ret == 0) { // Meta + continue; + } + + if (first) { + smfs->mark_streaming_write_started (); + first = false; + } + + smfs->append_event_unlocked_beats(Evoral::Event(0, + (double)t / (double)source->ppqn(), + size, + buf)); + + if (status.progress < 0.99) { + status.progress += 0.01; + } } - - smfs->append_event_unlocked_beats(Evoral::Event(0, - (double)t / (double)source->ppqn(), - size, - buf)); - - if (status.progress < 0.99) - status.progress += 0.01; - } - - const framepos_t pos = 0; - const double length_beats = ceil(t / (double)source->ppqn()); - BeatsFramesConverter converter(smfs->session().tempo_map(), pos); - smfs->update_length(pos, converter.to(length_beats)); - smfs->mark_streaming_write_completed (); - - if (status.cancel) { - break; - } - } + + if (!first) { + + /* we wrote something */ + + const framepos_t pos = 0; + const double length_beats = ceil(t / (double)source->ppqn()); + BeatsFramesConverter converter(smfs->session().tempo_map(), pos); + smfs->update_length(pos, converter.to(length_beats)); + smfs->mark_streaming_write_completed (); + + if (status.cancel) { + break; + } + } + + ++s; // next source + } } catch (...) { - error << "Corrupt MIDI file " << source->file_path() << endl; + error << "Corrupt MIDI file " << source->file_path() << endmsg; } + + if (buf) { + free (buf); + } } static void @@ -498,6 +515,7 @@ Session::import_audiofiles (ImportStatus& status) Sources newfiles; framepos_t natural_position = source ? source->natural_position() : 0; + if (status.replace_existing_source) { fatal << "THIS IS NOT IMPLEMENTED YET, IT SHOULD NEVER GET CALLED!!! DYING!" << endmsg; status.cancel = !map_existing_mono_sources (new_paths, *this, frame_rate(), newfiles, this); diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index 4a190ff61b..e41ad62850 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -1431,7 +1431,6 @@ Session::count_existing_track_channels (ChanCount& in, ChanCount& out) for (RouteList::iterator i = r->begin(); i != r->end(); ++i) { boost::shared_ptr tr = boost::dynamic_pointer_cast (*i); if (tr && !tr->is_hidden()) { - cerr << "Using track i/o counts for " << tr->name() << endl; in += tr->n_inputs(); out += tr->n_outputs(); }