fix import of multi-track SMF files with some tracks containing only meta-events; correctly push error to log window when MIDI import fails; remove debug msg
git-svn-id: svn://localhost/ardour2/branches/3.0@9271 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
9ca4623451
commit
05d8801812
@ -377,12 +377,16 @@ write_midi_data_to_new_files (Evoral::SMF* source, ImportStatus& status,
|
||||
|
||||
status.progress = 0.0f;
|
||||
|
||||
assert (newfiles.size() == source->num_tracks());
|
||||
|
||||
try {
|
||||
vector<boost::shared_ptr<Source> >::iterator s = newfiles.begin();
|
||||
|
||||
for (unsigned i = 1; i <= source->num_tracks(); ++i) {
|
||||
boost::shared_ptr<SMFSource> smfs = boost::dynamic_pointer_cast<SMFSource>(newfiles[i-1]);
|
||||
smfs->drop_model();
|
||||
|
||||
boost::shared_ptr<SMFSource> smfs = boost::dynamic_pointer_cast<SMFSource> (*s);
|
||||
|
||||
smfs->drop_model ();
|
||||
source->seek_to_track (i);
|
||||
|
||||
uint64_t t = 0;
|
||||
@ -391,14 +395,15 @@ write_midi_data_to_new_files (Evoral::SMF* source, ImportStatus& status,
|
||||
bool first = true;
|
||||
|
||||
while (!status.cancel) {
|
||||
gint ignored; // imported files either don't have NoteID's or
|
||||
// we ignore them.
|
||||
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, &ignored);
|
||||
if (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;
|
||||
@ -420,9 +425,14 @@ write_midi_data_to_new_files (Evoral::SMF* source, ImportStatus& status,
|
||||
size,
|
||||
buf));
|
||||
|
||||
if (status.progress < 0.99)
|
||||
if (status.progress < 0.99) {
|
||||
status.progress += 0.01;
|
||||
}
|
||||
}
|
||||
|
||||
if (!first) {
|
||||
|
||||
/* we wrote something */
|
||||
|
||||
const framepos_t pos = 0;
|
||||
const double length_beats = ceil(t / (double)source->ppqn());
|
||||
@ -435,8 +445,15 @@ write_midi_data_to_new_files (Evoral::SMF* source, ImportStatus& status,
|
||||
}
|
||||
}
|
||||
|
||||
++s; // next source
|
||||
}
|
||||
|
||||
} catch (...) {
|
||||
error << "Corrupt MIDI file " << source->file_path() << endl;
|
||||
error << "Corrupt MIDI file " << source->file_path() << endmsg;
|
||||
}
|
||||
|
||||
if (buf) {
|
||||
free (buf);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
@ -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<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
|
||||
if (tr && !tr->is_hidden()) {
|
||||
cerr << "Using track i/o counts for " << tr->name() << endl;
|
||||
in += tr->n_inputs();
|
||||
out += tr->n_outputs();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user