#include <sndfile.h>
#include <samplerate.h>
-#include <glib/gstdio.h>
+#include "pbd/gstdio_compat.h"
#include <glibmm.h>
#include <boost/scoped_array.hpp>
boost::shared_ptr<SMFSource> smfs = boost::dynamic_pointer_cast<SMFSource> (*s);
- smfs->drop_model ();
+ Glib::Threads::Mutex::Lock source_lock(smfs->mutex());
+
+ smfs->drop_model (source_lock);
source->seek_to_track (i);
uint64_t t = 0;
}
if (first) {
- smfs->mark_streaming_write_started ();
+ smfs->mark_streaming_write_started (source_lock);
first = false;
}
- smfs->append_event_unlocked_beats(
- Evoral::Event<Evoral::MusicalTime>(
+ smfs->append_event_beats(
+ source_lock,
+ Evoral::Event<Evoral::Beats>(
0,
- Evoral::MusicalTime::ticks_at_rate(t, source->ppqn()),
+ Evoral::Beats::ticks_at_rate(t, source->ppqn()),
size,
buf));
/* we wrote something */
- const framepos_t pos = 0;
- const Evoral::MusicalTime length_beats = Evoral::MusicalTime::ticks_at_rate(t, source->ppqn());
- BeatsFramesConverter converter(smfs->session().tempo_map(), pos);
+ const framepos_t pos = 0;
+ const Evoral::Beats length_beats = Evoral::Beats::ticks_at_rate(t, source->ppqn());
+ BeatsFramesConverter converter(smfs->session().tempo_map(), pos);
smfs->update_length(pos + converter.to(length_beats.round_up_to_beat()));
- smfs->mark_streaming_write_completed ();
+ smfs->mark_streaming_write_completed (source_lock);
if (status.cancel) {
break;
}
} else {
- warning << string_compose (_("Track %1 of %2 contained no usable MIDI data"), i, source->file_path()) << endmsg;
+ info << string_compose (_("Track %1 of %2 contained no usable MIDI data"), i, source->num_tracks()) << endmsg;
}
++s; // next source
}
- } catch (...) {
- error << string_compose (_("MIDI file %1 was not readable (no reason available)"), source->file_path()) << endmsg;
+ } catch (exception& e) {
+ error << string_compose (_("MIDI file could not be written (best guess: %1)"), e.what()) << endmsg;
}
if (buf) {
return;
}
}
-
+
if (channels == 0) {
error << _("Import: file contains no channels.") << endmsg;
continue;
Analyser::queue_source_for_analysis (boost::static_pointer_cast<Source>(*x), false);
}
}
-
+
/* imported, copied files cannot be written or removed
*/
} catch (...) {
error << _("Failed to remove some files after failed/cancelled import operation") << endmsg;
}
-
+
}
status.done = true;