X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Faudio_panel.cc;h=37d6f8bb6f410525bb6b0fb37a8c13a043afe017;hb=40d38c8d011f0863f396f21cd750cdcef803a792;hp=d066c11e25dd55aa7eae73d24f4e8b9f121b0bb0;hpb=886e0f9d08a241bef5baf328beb08a0d6996ae14;p=dcpomatic.git diff --git a/src/wx/audio_panel.cc b/src/wx/audio_panel.cc index d066c11e2..37d6f8bb6 100644 --- a/src/wx/audio_panel.cc +++ b/src/wx/audio_panel.cc @@ -258,13 +258,22 @@ AudioPanel::gain_calculate_button_clicked () return; } - _gain->wrapped()->SetValue (*c); + optional old_peak_dB = peak (); + double old_value = _gain->wrapped()->GetValue(); + _gain->wrapped()->SetValue(old_value + *c); /* This appears to be necessary, as the change is not signalled, I think. */ _gain->view_changed (); + optional peak_dB = peak (); + if (old_peak_dB && *old_peak_dB < -0.5 && peak_dB && *peak_dB > -0.5) { + error_dialog (this, _("It is not possible to adjust the content's gain for this fader change as it would cause the DCP's audio to clip. The gain has not been changed.")); + _gain->wrapped()->SetValue (old_value); + _gain->view_changed (); + } + d->Destroy (); } @@ -360,22 +369,40 @@ AudioPanel::show_clicked () _audio_dialog->Show (); } -void -AudioPanel::setup_peak () +/** @return If there is one selected piece of audio content, return its peak value in dB (if known) */ +optional +AudioPanel::peak () const { - ContentList sel = _parent->selected_audio (); optional peak_dB; - if (sel.size() != 1) { - _peak->SetLabel (wxT ("")); - } else { + ContentList sel = _parent->selected_audio (); + if (sel.size() == 1) { shared_ptr playlist (new Playlist); playlist->add (_parent->film(), sel.front()); try { - shared_ptr analysis (new AudioAnalysis (_parent->film()->audio_analysis_path (playlist))); - peak_dB = 20 * log10 (analysis->overall_sample_peak().first.peak) + analysis->gain_correction (playlist); - _peak->SetLabel (wxString::Format (_("Peak: %.2fdB"), *peak_dB)); + shared_ptr analysis (new AudioAnalysis(_parent->film()->audio_analysis_path(playlist))); + peak_dB = linear_to_db(analysis->overall_sample_peak().first.peak) + analysis->gain_correction(playlist); } catch (...) { + + } + } + + return peak_dB; +} + +void +AudioPanel::setup_peak () +{ + ContentList sel = _parent->selected_audio (); + + optional peak_dB = peak (); + if (sel.size() != 1) { + _peak->SetLabel (wxT("")); + } else { + peak_dB = peak (); + if (peak_dB) { + _peak->SetLabel (wxString::Format(_("Peak: %.2fdB"), *peak_dB)); + } else { _peak->SetLabel (_("Peak: unknown")); } }