diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2014-01-23 13:41:20 -0500 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2014-01-23 13:41:20 -0500 |
commit | 7000afdc66c9e0ae8dcf9ec080517dabba1e7f34 (patch) | |
tree | 19574ed8a1fbafa6bed222d8cf817ee1c8098314 /gtk2_ardour/sfdb_ui.cc | |
parent | 065e1e63342633f72725a5309926f71c87804293 (diff) | |
parent | 40d8c5ae01f25e02457c554170a53d537246a7d4 (diff) |
fix merge conflict with master
Diffstat (limited to 'gtk2_ardour/sfdb_ui.cc')
-rw-r--r-- | gtk2_ardour/sfdb_ui.cc | 138 |
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); } |