From: Carl Hetherington Date: Tue, 17 Dec 2019 21:51:23 +0000 (+0100) Subject: Move sound output driver selection into new preferences tab. X-Git-Tag: v2.15.40~14 X-Git-Url: https://git.carlh.net/gitweb/?a=commitdiff_plain;h=30c9ecad729397574754163d13253c54a2285a6a;hp=0d786493ef12f2d9a6d8a27d2c47b67f2e00c333;p=dcpomatic.git Move sound output driver selection into new preferences tab. --- diff --git a/graphics/linux/128/dcpomatic2.png b/graphics/linux/128/dcpomatic2.png index ef8484970..6b12c5e60 100644 Binary files a/graphics/linux/128/dcpomatic2.png and b/graphics/linux/128/dcpomatic2.png differ diff --git a/graphics/linux/16/dcpomatic2.png b/graphics/linux/16/dcpomatic2.png index 2d177e7e3..d6ba7590a 100644 Binary files a/graphics/linux/16/dcpomatic2.png and b/graphics/linux/16/dcpomatic2.png differ diff --git a/graphics/linux/22/dcpomatic2.png b/graphics/linux/22/dcpomatic2.png index 0f29bbffb..116a7827d 100644 Binary files a/graphics/linux/22/dcpomatic2.png and b/graphics/linux/22/dcpomatic2.png differ diff --git a/graphics/linux/256/dcpomatic2.png b/graphics/linux/256/dcpomatic2.png index c39b1fe3b..cd0640f12 100644 Binary files a/graphics/linux/256/dcpomatic2.png and b/graphics/linux/256/dcpomatic2.png differ diff --git a/graphics/linux/32/dcpomatic2.png b/graphics/linux/32/dcpomatic2.png index 7fb1a4140..ee170e469 100644 Binary files a/graphics/linux/32/dcpomatic2.png and b/graphics/linux/32/dcpomatic2.png differ diff --git a/graphics/linux/48/dcpomatic2.png b/graphics/linux/48/dcpomatic2.png index 5e8aba8e7..8aec7be36 100644 Binary files a/graphics/linux/48/dcpomatic2.png and b/graphics/linux/48/dcpomatic2.png differ diff --git a/graphics/linux/512/dcpomatic2.png b/graphics/linux/512/dcpomatic2.png index cab55bbe5..f591f1c7e 100644 Binary files a/graphics/linux/512/dcpomatic2.png and b/graphics/linux/512/dcpomatic2.png differ diff --git a/graphics/linux/64/dcpomatic2.png b/graphics/linux/64/dcpomatic2.png index 40fe43090..685bd9bb9 100644 Binary files a/graphics/linux/64/dcpomatic2.png and b/graphics/linux/64/dcpomatic2.png differ diff --git a/graphics/osx/dcpomatic2.iconset/icon_128x128.png b/graphics/osx/dcpomatic2.iconset/icon_128x128.png index ef8484970..6b12c5e60 100644 Binary files a/graphics/osx/dcpomatic2.iconset/icon_128x128.png and b/graphics/osx/dcpomatic2.iconset/icon_128x128.png differ diff --git a/graphics/osx/dcpomatic2.iconset/icon_128x128@2x.png b/graphics/osx/dcpomatic2.iconset/icon_128x128@2x.png index ef8484970..6b12c5e60 100644 Binary files a/graphics/osx/dcpomatic2.iconset/icon_128x128@2x.png and b/graphics/osx/dcpomatic2.iconset/icon_128x128@2x.png differ diff --git a/graphics/osx/dcpomatic2.iconset/icon_16x16.png b/graphics/osx/dcpomatic2.iconset/icon_16x16.png index 2d177e7e3..d6ba7590a 100644 Binary files a/graphics/osx/dcpomatic2.iconset/icon_16x16.png and b/graphics/osx/dcpomatic2.iconset/icon_16x16.png differ diff --git a/graphics/osx/dcpomatic2.iconset/icon_16x16@2x.png b/graphics/osx/dcpomatic2.iconset/icon_16x16@2x.png index 2d177e7e3..d6ba7590a 100644 Binary files a/graphics/osx/dcpomatic2.iconset/icon_16x16@2x.png and b/graphics/osx/dcpomatic2.iconset/icon_16x16@2x.png differ diff --git a/graphics/osx/dcpomatic2.iconset/icon_256x256.png b/graphics/osx/dcpomatic2.iconset/icon_256x256.png index c39b1fe3b..cd0640f12 100644 Binary files a/graphics/osx/dcpomatic2.iconset/icon_256x256.png and b/graphics/osx/dcpomatic2.iconset/icon_256x256.png differ diff --git a/graphics/osx/dcpomatic2.iconset/icon_256x256@2x.png b/graphics/osx/dcpomatic2.iconset/icon_256x256@2x.png index c39b1fe3b..cd0640f12 100644 Binary files a/graphics/osx/dcpomatic2.iconset/icon_256x256@2x.png and b/graphics/osx/dcpomatic2.iconset/icon_256x256@2x.png differ diff --git a/graphics/osx/dcpomatic2.iconset/icon_32x32.png b/graphics/osx/dcpomatic2.iconset/icon_32x32.png index 7fb1a4140..ee170e469 100644 Binary files a/graphics/osx/dcpomatic2.iconset/icon_32x32.png and b/graphics/osx/dcpomatic2.iconset/icon_32x32.png differ diff --git a/graphics/osx/dcpomatic2.iconset/icon_32x32@2x.png b/graphics/osx/dcpomatic2.iconset/icon_32x32@2x.png index 7fb1a4140..ee170e469 100644 Binary files a/graphics/osx/dcpomatic2.iconset/icon_32x32@2x.png and b/graphics/osx/dcpomatic2.iconset/icon_32x32@2x.png differ diff --git a/graphics/osx/dcpomatic2.iconset/icon_512x512.png b/graphics/osx/dcpomatic2.iconset/icon_512x512.png index cab55bbe5..f591f1c7e 100644 Binary files a/graphics/osx/dcpomatic2.iconset/icon_512x512.png and b/graphics/osx/dcpomatic2.iconset/icon_512x512.png differ diff --git a/graphics/osx/dcpomatic2.iconset/icon_512x512@2x.png b/graphics/osx/dcpomatic2.iconset/icon_512x512@2x.png index cab55bbe5..f591f1c7e 100644 Binary files a/graphics/osx/dcpomatic2.iconset/icon_512x512@2x.png and b/graphics/osx/dcpomatic2.iconset/icon_512x512@2x.png differ diff --git a/graphics/osx/preferences/sound.png b/graphics/osx/preferences/sound.png new file mode 100644 index 000000000..b5a80d7a8 Binary files /dev/null and b/graphics/osx/preferences/sound.png differ diff --git a/graphics/src/sound.svg b/graphics/src/sound.svg new file mode 100644 index 000000000..0970fc0a8 --- /dev/null +++ b/graphics/src/sound.svg @@ -0,0 +1,210 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + Openclipart + + + + 2007-02-27T15:15:43 + A key icon. + http://openclipart.org/detail/3330/key-by-barretr + + + barretr + + + + + clip art + clipart + icon + image + key + media + png + public domain + svg + + + + + + + + + + + + + + + + diff --git a/graphics/update b/graphics/update index 94cbbf88e..f0d91bf89 100755 --- a/graphics/update +++ b/graphics/update @@ -63,7 +63,7 @@ else # OS X preferences icons # servers.png does not have an SVG version mkdir -p osx/preferences - for i in colour_conversions defaults email kdm_email cover_sheet keys tms notifications accounts locations; do + for i in colour_conversions defaults email kdm_email cover_sheet keys tms notifications accounts locations sound; do $INKSCAPE osx/preferences/$i.png src/$i.svg -w 32 -h 32 done diff --git a/graphics/web/favicon-128x128.png b/graphics/web/favicon-128x128.png index d67c8921c..658bf796e 100644 Binary files a/graphics/web/favicon-128x128.png and b/graphics/web/favicon-128x128.png differ diff --git a/graphics/web/favicon-16x16.png b/graphics/web/favicon-16x16.png index 400d4b9b9..68e4f96c4 100644 Binary files a/graphics/web/favicon-16x16.png and b/graphics/web/favicon-16x16.png differ diff --git a/graphics/web/favicon-256x256.png b/graphics/web/favicon-256x256.png index 82467c213..f5b5e758d 100644 Binary files a/graphics/web/favicon-256x256.png and b/graphics/web/favicon-256x256.png differ diff --git a/graphics/web/favicon-32x32.png b/graphics/web/favicon-32x32.png index 446338669..75fd6ed71 100644 Binary files a/graphics/web/favicon-32x32.png and b/graphics/web/favicon-32x32.png differ diff --git a/graphics/web/favicon-64x64.png b/graphics/web/favicon-64x64.png index 3318ae280..f7e5ca6fc 100644 Binary files a/graphics/web/favicon-64x64.png and b/graphics/web/favicon-64x64.png differ diff --git a/graphics/web/logo.png b/graphics/web/logo.png index c9b04f07e..9a57085b2 100644 Binary files a/graphics/web/logo.png and b/graphics/web/logo.png differ diff --git a/src/wx/config_dialog.cc b/src/wx/config_dialog.cc index 98a1a1a8e..14948afe8 100644 --- a/src/wx/config_dialog.cc +++ b/src/wx/config_dialog.cc @@ -154,36 +154,6 @@ GeneralPage::add_language_controls (wxGridBagSizer* table, int& r) _language->Bind (wxEVT_CHOICE, bind (&GeneralPage::language_changed, this)); } -void -GeneralPage::add_play_sound_controls (wxGridBagSizer* table, int& r) -{ - _sound = new CheckBox (_panel, _("Play sound via")); - table->Add (_sound, wxGBPosition (r, 0), wxDefaultSpan, wxALIGN_CENTER_VERTICAL); - wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL); - _sound_output = new wxChoice (_panel, wxID_ANY); - s->Add (_sound_output, 0); - _sound_output_details = new wxStaticText (_panel, wxID_ANY, wxT("")); - s->Add (_sound_output_details, 1, wxALIGN_CENTER_VERTICAL | wxLEFT, DCPOMATIC_SIZER_X_GAP); - table->Add (s, wxGBPosition(r, 1)); - ++r; - - wxFont font = _sound_output_details->GetFont(); - font.SetStyle (wxFONTSTYLE_ITALIC); - font.SetPointSize (font.GetPointSize() - 1); - _sound_output_details->SetFont (font); - - RtAudio audio (DCPOMATIC_RTAUDIO_API); - for (unsigned int i = 0; i < audio.getDeviceCount(); ++i) { - RtAudio::DeviceInfo dev = audio.getDeviceInfo (i); - if (dev.probed && dev.outputChannels > 0) { - _sound_output->Append (std_to_wx (dev.name)); - } - } - - _sound->Bind (wxEVT_CHECKBOX, bind (&GeneralPage::sound_changed, this)); - _sound_output->Bind (wxEVT_CHOICE, bind (&GeneralPage::sound_output_changed, this)); -} - void GeneralPage::add_update_controls (wxGridBagSizer* table, int& r) { @@ -233,62 +203,6 @@ GeneralPage::config_changed () checked_set (_check_for_updates, config->check_for_updates ()); checked_set (_check_for_test_updates, config->check_for_test_updates ()); - checked_set (_sound, config->sound ()); - - optional const current_so = get_sound_output (); - optional configured_so; - - if (config->sound_output()) { - configured_so = config->sound_output().get(); - } else { - /* No configured output means we should use the default */ - RtAudio audio (DCPOMATIC_RTAUDIO_API); - try { - configured_so = audio.getDeviceInfo(audio.getDefaultOutputDevice()).name; - } catch (RtAudioError& e) { - /* Probably no audio devices at all */ - } - } - - if (configured_so && current_so != configured_so) { - /* Update _sound_output with the configured value */ - unsigned int i = 0; - while (i < _sound_output->GetCount()) { - if (_sound_output->GetString(i) == std_to_wx(*configured_so)) { - _sound_output->SetSelection (i); - break; - } - ++i; - } - } - - RtAudio audio (DCPOMATIC_RTAUDIO_API); - - map apis; - apis[RtAudio::MACOSX_CORE] = _("CoreAudio"); - apis[RtAudio::WINDOWS_ASIO] = _("ASIO"); - apis[RtAudio::WINDOWS_DS] = _("Direct Sound"); - apis[RtAudio::WINDOWS_WASAPI] = _("WASAPI"); - apis[RtAudio::UNIX_JACK] = _("JACK"); - apis[RtAudio::LINUX_ALSA] = _("ALSA"); - apis[RtAudio::LINUX_PULSE] = _("PulseAudio"); - apis[RtAudio::LINUX_OSS] = _("OSS"); - apis[RtAudio::RTAUDIO_DUMMY] = _("Dummy"); - - int channels = 0; - if (configured_so) { - for (unsigned int i = 0; i < audio.getDeviceCount(); ++i) { - RtAudio::DeviceInfo info = audio.getDeviceInfo(i); - if (info.name == *configured_so && info.outputChannels > 0) { - channels = info.outputChannels; - } - } - } - - _sound_output_details->SetLabel ( - wxString::Format(_("%d channels on %s"), channels, apis[audio.getCurrentApi()]) - ); - setup_sensitivity (); } @@ -297,19 +211,6 @@ GeneralPage::setup_sensitivity () { _language->Enable (_set_language->GetValue ()); _check_for_test_updates->Enable (_check_for_updates->GetValue ()); - _sound_output->Enable (_sound->GetValue ()); -} - -/** @return Currently-selected preview sound output in the dialogue */ -optional -GeneralPage::get_sound_output () -{ - int const sel = _sound_output->GetSelection (); - if (sel == wxNOT_FOUND) { - return optional (); - } - - return wx_to_std (_sound_output->GetString (sel)); } void @@ -346,24 +247,6 @@ GeneralPage::check_for_test_updates_changed () Config::instance()->set_check_for_test_updates (_check_for_test_updates->GetValue ()); } -void -GeneralPage::sound_changed () -{ - Config::instance()->set_sound (_sound->GetValue ()); -} - -void -GeneralPage::sound_output_changed () -{ - RtAudio audio (DCPOMATIC_RTAUDIO_API); - optional const so = get_sound_output(); - if (!so || *so == audio.getDeviceInfo(audio.getDefaultOutputDevice()).name) { - Config::instance()->unset_sound_output (); - } else { - Config::instance()->set_sound_output (*so); - } -} - CertificateChainEditor::CertificateChainEditor ( wxWindow* parent, wxString title, @@ -965,3 +848,144 @@ KeysPage::export_decryption_certificate () d->Destroy (); } + +wxString +SoundPage::GetName () const +{ + return _("Sound"); +} + +void +SoundPage::setup () +{ + wxGridBagSizer* table = new wxGridBagSizer (DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP); + _panel->GetSizer()->Add (table, 1, wxALL | wxEXPAND, _border); + + int r = 0; + + _sound = new CheckBox (_panel, _("Play sound via")); + table->Add (_sound, wxGBPosition (r, 0), wxDefaultSpan, wxALIGN_CENTER_VERTICAL); + wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL); + _sound_output = new wxChoice (_panel, wxID_ANY); + s->Add (_sound_output, 0); + _sound_output_details = new wxStaticText (_panel, wxID_ANY, wxT("")); + s->Add (_sound_output_details, 1, wxALIGN_CENTER_VERTICAL | wxLEFT, DCPOMATIC_SIZER_X_GAP); + table->Add (s, wxGBPosition(r, 1)); + ++r; + + wxFont font = _sound_output_details->GetFont(); + font.SetStyle (wxFONTSTYLE_ITALIC); + font.SetPointSize (font.GetPointSize() - 1); + _sound_output_details->SetFont (font); + + RtAudio audio (DCPOMATIC_RTAUDIO_API); + for (unsigned int i = 0; i < audio.getDeviceCount(); ++i) { + RtAudio::DeviceInfo dev = audio.getDeviceInfo (i); + if (dev.probed && dev.outputChannels > 0) { + _sound_output->Append (std_to_wx (dev.name)); + } + } + + _sound->Bind (wxEVT_CHECKBOX, bind (&SoundPage::sound_changed, this)); + _sound_output->Bind (wxEVT_CHOICE, bind (&SoundPage::sound_output_changed, this)); +} + +void +SoundPage::sound_changed () +{ + Config::instance()->set_sound (_sound->GetValue ()); +} + +void +SoundPage::sound_output_changed () +{ + RtAudio audio (DCPOMATIC_RTAUDIO_API); + optional const so = get_sound_output(); + if (!so || *so == audio.getDeviceInfo(audio.getDefaultOutputDevice()).name) { + Config::instance()->unset_sound_output (); + } else { + Config::instance()->set_sound_output (*so); + } +} + +void +SoundPage::config_changed () +{ + Config* config = Config::instance (); + + checked_set (_sound, config->sound ()); + + optional const current_so = get_sound_output (); + optional configured_so; + + if (config->sound_output()) { + configured_so = config->sound_output().get(); + } else { + /* No configured output means we should use the default */ + RtAudio audio (DCPOMATIC_RTAUDIO_API); + try { + configured_so = audio.getDeviceInfo(audio.getDefaultOutputDevice()).name; + } catch (RtAudioError& e) { + /* Probably no audio devices at all */ + } + } + + if (configured_so && current_so != configured_so) { + /* Update _sound_output with the configured value */ + unsigned int i = 0; + while (i < _sound_output->GetCount()) { + if (_sound_output->GetString(i) == std_to_wx(*configured_so)) { + _sound_output->SetSelection (i); + break; + } + ++i; + } + } + + RtAudio audio (DCPOMATIC_RTAUDIO_API); + + map apis; + apis[RtAudio::MACOSX_CORE] = _("CoreAudio"); + apis[RtAudio::WINDOWS_ASIO] = _("ASIO"); + apis[RtAudio::WINDOWS_DS] = _("Direct Sound"); + apis[RtAudio::WINDOWS_WASAPI] = _("WASAPI"); + apis[RtAudio::UNIX_JACK] = _("JACK"); + apis[RtAudio::LINUX_ALSA] = _("ALSA"); + apis[RtAudio::LINUX_PULSE] = _("PulseAudio"); + apis[RtAudio::LINUX_OSS] = _("OSS"); + apis[RtAudio::RTAUDIO_DUMMY] = _("Dummy"); + + int channels = 0; + if (configured_so) { + for (unsigned int i = 0; i < audio.getDeviceCount(); ++i) { + RtAudio::DeviceInfo info = audio.getDeviceInfo(i); + if (info.name == *configured_so && info.outputChannels > 0) { + channels = info.outputChannels; + } + } + } + + _sound_output_details->SetLabel ( + wxString::Format(_("%d channels on %s"), channels, apis[audio.getCurrentApi()]) + ); + + setup_sensitivity (); +} + +void +SoundPage::setup_sensitivity () +{ + _sound_output->Enable (_sound->GetValue()); +} + +/** @return Currently-selected preview sound output in the dialogue */ +optional +SoundPage::get_sound_output () +{ + int const sel = _sound_output->GetSelection (); + if (sel == wxNOT_FOUND) { + return optional (); + } + + return wx_to_std (_sound_output->GetString (sel)); +} diff --git a/src/wx/config_dialog.h b/src/wx/config_dialog.h index ac90cd42d..1a9d97a43 100644 --- a/src/wx/config_dialog.h +++ b/src/wx/config_dialog.h @@ -89,25 +89,18 @@ public: protected: void add_language_controls (wxGridBagSizer* table, int& r); - void add_play_sound_controls (wxGridBagSizer* table, int& r); void add_update_controls (wxGridBagSizer* table, int& r); virtual void config_changed (); private: void setup_sensitivity (); - boost::optional get_sound_output (); void set_language_changed (); void language_changed (); void check_for_updates_changed (); void check_for_test_updates_changed (); - void sound_changed (); - void sound_output_changed (); wxCheckBox* _set_language; wxChoice* _language; - wxCheckBox* _sound; - wxChoice* _sound_output; - wxStaticText* _sound_output_details; wxCheckBox* _check_for_updates; wxCheckBox* _check_for_test_updates; }; @@ -185,4 +178,34 @@ private: }; +class SoundPage : public StandardPage +{ +public: + SoundPage (wxSize panel_size, int border) + : StandardPage (panel_size, border) + {} + + wxString GetName() const; + +#ifdef DCPOMATIC_OSX + wxBitmap GetLargeIcon () const + { + return wxBitmap ("sound", wxBITMAP_TYPE_PNG_RESOURCE); + } +#endif + +private: + + void setup (); + void config_changed (); + boost::optional get_sound_output (); + void sound_changed (); + void sound_output_changed (); + void setup_sensitivity (); + + wxCheckBox* _sound; + wxChoice* _sound_output; + wxStaticText* _sound_output_details; +}; + #endif diff --git a/src/wx/full_config_dialog.cc b/src/wx/full_config_dialog.cc index 1c5a9e3f6..f586672a8 100644 --- a/src/wx/full_config_dialog.cc +++ b/src/wx/full_config_dialog.cc @@ -116,8 +116,6 @@ private: table->Add (export_cinemas, wxGBPosition (r, 2)); ++r; - add_play_sound_controls (table, r); - #ifdef DCPOMATIC_HAVE_EBUR128_PATCHED_FFMPEG _analyse_ebur128 = new CheckBox (_panel, _("Find integrated loudness, true peak and loudness range when analysing audio")); table->Add (_analyse_ebur128, wxGBPosition (r, 0), wxGBSpan (1, 2)); @@ -1678,6 +1676,7 @@ create_full_config_dialog () #endif e->AddPage (new FullGeneralPage (ps, border)); + e->AddPage (new SoundPage (ps, border)); e->AddPage (new DefaultsPage (ps, border)); e->AddPage (new EncodingServersPage (ps, border)); e->AddPage (new KeysPage (ps, border)); diff --git a/src/wx/player_config_dialog.cc b/src/wx/player_config_dialog.cc index 20ddde992..508b91746 100644 --- a/src/wx/player_config_dialog.cc +++ b/src/wx/player_config_dialog.cc @@ -85,7 +85,6 @@ private: int r = 0; add_language_controls (table, r); - add_play_sound_controls (table, r); add_update_controls (table, r); add_label_to_sizer (table, _panel, _("Start player as"), true, wxGBPosition(r, 0)); @@ -684,6 +683,7 @@ create_player_config_dialog () #endif e->AddPage (new PlayerGeneralPage(wxSize(-1, 500), border)); + e->AddPage (new SoundPage(ps, border)); e->AddPage (new LocationsPage(ps, border)); e->AddPage (new KeysPage(ps, border)); #ifdef DCPOMATIC_VARIANT_SWAROOP