diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 32e4e4f473..049d26b069 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -1661,6 +1661,9 @@ ARDOUR_UI::update_format () case MBWF: s << _("MBWF"); break; + case FLAC: + s << _("FLAC"); + break; } s << " "; diff --git a/gtk2_ardour/session_option_editor.cc b/gtk2_ardour/session_option_editor.cc index e2775e641d..0ffb4c14d7 100644 --- a/gtk2_ardour/session_option_editor.cc +++ b/gtk2_ardour/session_option_editor.cc @@ -179,18 +179,15 @@ SessionOptionEditor::SessionOptionEditor (Session* s) add_option (_("Media"), new OptionEditorHeading (_("Audio File Format"))); - ComboOption* sf = new ComboOption ( + _sf = new ComboOption ( "native-file-data-format", _("Sample format"), sigc::mem_fun (*_session_config, &SessionConfiguration::get_native_file_data_format), sigc::mem_fun (*_session_config, &SessionConfiguration::set_native_file_data_format) ); - - sf->add (FormatFloat, _("32-bit floating point")); - sf->add (FormatInt24, _("24-bit integer")); - sf->add (FormatInt16, _("16-bit integer")); - - add_option (_("Media"), sf); + add_option (_("Media"), _sf); + /* refill available sample-formats, depening on file-format */ + parameter_changed ("native-file-header-format"); ComboOption* hf = new ComboOption ( "native-file-header-format", @@ -210,6 +207,7 @@ SessionOptionEditor::SessionOptionEditor (Session* s) #ifdef HAVE_RF64_RIFF hf->add (RF64_WAV, _("RF64 (WAV compatible)")); #endif + hf->add (FLAC, _("FLAC")); add_option (_("Media"), hf); @@ -410,6 +408,13 @@ SessionOptionEditor::SessionOptionEditor (Session* s) set_current_page (_("Timecode")); } +SessionOptionEditor::~SessionOptionEditor () +{ + delete _vpu; + delete _sf; + delete _take_name; +} + void SessionOptionEditor::parameter_changed (std::string const & p) { @@ -429,6 +434,25 @@ SessionOptionEditor::parameter_changed (std::string const & p) else if (p == "track-name-take") { _take_name->set_sensitive(_session_config->get_track_name_take()); } + else if (p == "native-file-header-format") { + bool need_refill = true; + _sf->clear (); + if (_session_config->get_native_file_header_format() == FLAC) { + _sf->add (FormatInt24, _("24-bit integer")); + _sf->add (FormatInt16, _("16-bit integer")); + if (_session_config->get_native_file_data_format() == FormatFloat) { + _session_config->set_native_file_data_format (FormatInt24); + need_refill = false; + } + } else { + _sf->add (FormatFloat, _("32-bit floating point")); + _sf->add (FormatInt24, _("24-bit integer")); + _sf->add (FormatInt16, _("16-bit integer")); + } + if (need_refill) { + parameter_changed ("native-file-data-format"); + } + } } /* the presence of absence of a monitor section is not really a regular session diff --git a/gtk2_ardour/session_option_editor.h b/gtk2_ardour/session_option_editor.h index 759f28ff18..bf373c8f33 100644 --- a/gtk2_ardour/session_option_editor.h +++ b/gtk2_ardour/session_option_editor.h @@ -31,6 +31,7 @@ class SessionOptionEditor : public OptionEditorWindow { public: SessionOptionEditor (ARDOUR::Session* s); + ~SessionOptionEditor (); private: void parameter_changed (std::string const &); @@ -41,6 +42,7 @@ private: bool get_use_monitor_section (); ComboOption* _vpu; + ComboOption* _sf; EntryOption* _take_name; void save_defaults ();