summaryrefslogtreecommitdiff
path: root/gtk2_ardour/sfdb_ui.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2014-01-23 13:41:20 -0500
committerPaul Davis <paul@linuxaudiosystems.com>2014-01-23 13:41:20 -0500
commit7000afdc66c9e0ae8dcf9ec080517dabba1e7f34 (patch)
tree19574ed8a1fbafa6bed222d8cf817ee1c8098314 /gtk2_ardour/sfdb_ui.cc
parent065e1e63342633f72725a5309926f71c87804293 (diff)
parent40d8c5ae01f25e02457c554170a53d537246a7d4 (diff)
fix merge conflict with master
Diffstat (limited to 'gtk2_ardour/sfdb_ui.cc')
-rw-r--r--gtk2_ardour/sfdb_ui.cc138
1 files changed, 94 insertions, 44 deletions
diff --git a/gtk2_ardour/sfdb_ui.cc b/gtk2_ardour/sfdb_ui.cc
index 90bb0a3dce..e476ced789 100644
--- a/gtk2_ardour/sfdb_ui.cc
+++ b/gtk2_ardour/sfdb_ui.cc
@@ -120,8 +120,8 @@ importmode2string (ImportMode mode)
SoundFileBox::SoundFileBox (bool persistent)
: table (6, 2),
- length_clock ("sfboxLengthClock", !persistent, "", false, false, true, false),
- timecode_clock ("sfboxTimecodeClock", !persistent, "", false, false, false, false),
+ length_clock ("sfboxLengthClock", true, "", false, false, true, false),
+ timecode_clock ("sfboxTimecodeClock", true, "", false, false, false, false),
main_box (false, 6),
autoplay_btn (_("Auto-play")),
seek_slider(0,1000,1),
@@ -281,6 +281,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>"));
@@ -365,11 +397,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)) {
@@ -378,51 +405,74 @@ SoundFileBox::audition ()
}
boost::shared_ptr<Region> r;
- SourceList srclist;
- boost::shared_ptr<AudioFileSource> afs;
- bool old_sbp = AudioSource::get_build_peakfiles ();
-
- /* don't even think of building peakfiles for these files */
-
- AudioSource::set_build_peakfiles (false);
-
- for (int n = 0; n < sf_info.channels; ++n) {
- try {
- afs = boost::dynamic_pointer_cast<AudioFileSource> (
- SourceFactory::createExternal (DataType::AUDIO, *_session,
- path, n,
- Source::Flag (0), false));
- if (afs->sample_rate() != _session->nominal_frame_rate()) {
- boost::shared_ptr<SrcFileSource> sfs (new SrcFileSource(*_session, afs, _src_quality));
- srclist.push_back(sfs);
- } else {
- srclist.push_back(afs);
- }
- } catch (failed_constructor& err) {
- error << _("Could not access soundfile: ") << path << endmsg;
- AudioSource::set_build_peakfiles (old_sbp);
- return;
+ 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 ();
+
+ /* don't even think of building peakfiles for these files */
+
+ AudioSource::set_build_peakfiles (false);
+
+ for (int n = 0; n < sf_info.channels; ++n) {
+ try {
+ afs = boost::dynamic_pointer_cast<AudioFileSource> (
+ SourceFactory::createExternal (DataType::AUDIO, *_session,
+ path, n,
+ Source::Flag (0), false));
+ if (afs->sample_rate() != _session->nominal_frame_rate()) {
+ boost::shared_ptr<SrcFileSource> sfs (new SrcFileSource(*_session, afs, _src_quality));
+ srclist.push_back(sfs);
+ } else {
+ srclist.push_back(afs);
+ }
+
+ } catch (failed_constructor& err) {
+ error << _("Could not access soundfile: ") << path << endmsg;
+ AudioSource::set_build_peakfiles (old_sbp);
+ return;
+ }
}
- }
- AudioSource::set_build_peakfiles (old_sbp);
+ AudioSource::set_build_peakfiles (old_sbp);
- if (srclist.empty()) {
- return;
- }
+ if (srclist.empty()) {
+ return;
+ }
- afs = boost::dynamic_pointer_cast<AudioFileSource> (srclist[0]);
- string rname = region_name_from_path (afs->path(), false);
+ afs = boost::dynamic_pointer_cast<AudioFileSource> (srclist[0]);
+ string rname = region_name_from_path (afs->path(), false);
- PropertyList plist;
+ PropertyList plist;
- plist.add (ARDOUR::Properties::start, 0);
- plist.add (ARDOUR::Properties::length, srclist[0]->length(srclist[0]->timeline_position()));
- plist.add (ARDOUR::Properties::name, rname);
- plist.add (ARDOUR::Properties::layer, 0);
+ plist.add (ARDOUR::Properties::start, 0);
+ plist.add (ARDOUR::Properties::length, srclist[0]->length(srclist[0]->timeline_position()));
+ plist.add (ARDOUR::Properties::name, rname);
+ plist.add (ARDOUR::Properties::layer, 0);
- r = boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (srclist, plist, false));
+ r = boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (srclist, plist, false));
+ }
_session->audition_region(r);
}