prepare GUI for auditioning midi files

This commit is contained in:
Robin Gareus 2014-01-22 15:26:23 +01:00
parent 8aa6585702
commit acaf46c27d

View File

@ -279,6 +279,38 @@ SoundFileBox::setup_labels (const string& filename)
string error_msg;
if (SMFSource::safe_midi_file_extension (path)) {
boost::shared_ptr<SMFSource> ms =
boost::dynamic_pointer_cast<SMFSource> (
SourceFactory::createExternal (DataType::MIDI, *_session,
path, 0, Source::Flag (0), false));
preview_label.set_markup (_("<b>Midi File Information</b>"));
format_text.set_text ("MIDI");
samplerate_value.set_text ("-");
tags_entry.get_buffer()->set_text ("");
timecode_clock.set (0);
tags_entry.set_sensitive (false);
if (ms) {
channels_value.set_text (to_string(ms->num_tracks(), std::dec));
length_clock.set (ms->length(ms->timeline_position()));
} else {
channels_value.set_text ("");
length_clock.set (0);
}
if (_session && ms) {
play_btn.set_sensitive (true);
} else {
play_btn.set_sensitive (false);
}
return true;
}
if(!AudioFileSource::get_soundfile_info (filename, sf_info, error_msg)) {
preview_label.set_markup (_("<b>Sound File Information</b>"));
@ -363,11 +395,6 @@ SoundFileBox::audition ()
return;
}
if (SMFSource::safe_midi_file_extension (path)) {
error << _("Auditioning of MIDI files is not yet supported") << endmsg;
return;
}
_session->cancel_audition();
if (!Glib::file_test (path, Glib::FILE_TEST_EXISTS)) {
@ -376,6 +403,28 @@ SoundFileBox::audition ()
}
boost::shared_ptr<Region> r;
if (SMFSource::safe_midi_file_extension (path)) {
boost::shared_ptr<SMFSource> ms =
boost::dynamic_pointer_cast<SMFSource> (
SourceFactory::createExternal (DataType::MIDI, *_session,
path, 0, Source::Flag (0), false));
string rname = region_name_from_path (ms->path(), false);
PropertyList plist;
plist.add (ARDOUR::Properties::start, 0);
plist.add (ARDOUR::Properties::length, ms->length(ms->timeline_position()));
plist.add (ARDOUR::Properties::name, rname);
plist.add (ARDOUR::Properties::layer, 0);
r = boost::dynamic_pointer_cast<MidiRegion> (RegionFactory::create (boost::dynamic_pointer_cast<Source>(ms), plist, false));
assert(r);
} else {
SourceList srclist;
boost::shared_ptr<AudioFileSource> afs;
bool old_sbp = AudioSource::get_build_peakfiles ();
@ -421,6 +470,7 @@ SoundFileBox::audition ()
plist.add (ARDOUR::Properties::layer, 0);
r = boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (srclist, plist, false));
}
_session->audition_region(r);
}