X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Faudio_plot.cc;h=1c5c1f94bf210ef37d1cde0f9d8780e224ebda4a;hb=e60bb3e51bd1508b149e6b8f6608f09b5196ae26;hp=69faf127e2db0404fa5192cf9f12d8a74510ec5b;hpb=cfdd68eb5fb0ef8423e860103ad4e5510994f1da;p=dcpomatic.git diff --git a/src/wx/audio_plot.cc b/src/wx/audio_plot.cc index 69faf127e..1c5c1f94b 100644 --- a/src/wx/audio_plot.cc +++ b/src/wx/audio_plot.cc @@ -38,13 +38,11 @@ int const AudioPlot::max_smoothing = 128; AudioPlot::AudioPlot (wxWindow* parent) : wxPanel (parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE) - , _gain (0) , _smoothing (max_smoothing / 2) - , _message (_("Please wait; audio is being analysed...")) { -#ifndef __WXOSX__ +#ifndef __WXOSX__ SetDoubleBuffered (true); -#endif +#endif for (int i = 0; i < MAX_DCP_AUDIO_CHANNELS; ++i) { _channel_visible[i] = false; @@ -67,12 +65,14 @@ AudioPlot::AudioPlot (wxWindow* parent) _colours.push_back (wxColour (255, 0, 139)); _colours.push_back (wxColour (139, 0, 255)); + set_analysis (shared_ptr ()); + #if MAX_DCP_AUDIO_CHANNELS != 12 #warning AudioPlot::AudioPlot is expecting the wrong MAX_DCP_AUDIO_CHANNELS -#endif - +#endif + Bind (wxEVT_PAINT, boost::bind (&AudioPlot::paint, this)); - + SetMinSize (wxSize (640, 512)); } @@ -81,14 +81,10 @@ AudioPlot::set_analysis (shared_ptr a) { _analysis = a; - for (int i = 0; i < MAX_DCP_AUDIO_CHANNELS; ++i) { - _channel_visible[i] = false; + if (!a) { + _message = _("Please wait; audio is being analysed..."); } - for (int i = 0; i < AudioPoint::COUNT; ++i) { - _type_visible[i] = false; - } - Refresh (); } @@ -147,7 +143,7 @@ AudioPlot::paint () gc->GetTextExtent (wxT ("-80dB"), &metrics.db_label_width, &db_label_height, &db_label_descent, &db_label_leading); metrics.db_label_width += 8; - + int const data_width = GetSize().GetWidth() - metrics.db_label_width; /* Assume all channels have the same number of points */ metrics.x_scale = data_width / float (_analysis->points (0)); @@ -162,11 +158,11 @@ AudioPlot::paint () gc->DrawText (std_to_wx (String::compose ("%1dB", i)), 0, y - (db_label_height / 2)); } - gc->SetPen (*wxLIGHT_GREY_PEN); + gc->SetPen (wxPen (wxColour (200, 200, 200))); gc->StrokePath (grid); gc->DrawText (_("Time"), data_width, metrics.height - metrics.y_origin + db_label_height / 2); - + if (_type_visible[AudioPoint::PEAK]) { for (int c = 0; c < MAX_DCP_AUDIO_CHANNELS; ++c) { wxGraphicsPath p = gc->CreatePath (); @@ -174,7 +170,7 @@ AudioPlot::paint () plot_peak (p, c, metrics); } wxColour const col = _colours[c]; - gc->SetPen (*wxThePenList->FindOrCreatePen (wxColour (col.Red(), col.Green(), col.Blue(), col.Alpha() / 2), 1, wxPENSTYLE_SOLID)); + gc->SetPen (wxPen (wxColour (col.Red(), col.Green(), col.Blue(), col.Alpha() / 2), 1, wxPENSTYLE_SOLID)); gc->StrokePath (p); } } @@ -186,7 +182,7 @@ AudioPlot::paint () plot_rms (p, c, metrics); } wxColour const col = _colours[c]; - gc->SetPen (*wxThePenList->FindOrCreatePen (col, 1, wxPENSTYLE_SOLID)); + gc->SetPen (wxPen (col, 1, wxPENSTYLE_SOLID)); gc->StrokePath (p); } } @@ -195,7 +191,7 @@ AudioPlot::paint () axes.MoveToPoint (metrics.db_label_width, 0); axes.AddLineToPoint (metrics.db_label_width, metrics.height - metrics.y_origin); axes.AddLineToPoint (metrics.db_label_width + data_width, metrics.height - metrics.y_origin); - gc->SetPen (*wxBLACK_PEN); + gc->SetPen (wxPen (wxColour (0, 0, 0))); gc->StrokePath (axes); delete gc; @@ -207,8 +203,8 @@ AudioPlot::y_for_linear (float p, Metrics const & metrics) const if (p < 1e-4) { p = 1e-4; } - - return metrics.height - (20 * log10(p) - _minimum + _gain) * metrics.y_scale - metrics.y_origin; + + return metrics.height - (20 * log10(p) - _minimum) * metrics.y_scale - metrics.y_origin; } void @@ -217,7 +213,7 @@ AudioPlot::plot_peak (wxGraphicsPath& path, int channel, Metrics const & metrics if (_analysis->points (channel) == 0) { return; } - + path.MoveToPoint (metrics.db_label_width, y_for_linear (_analysis->get_point(channel, 0)[AudioPoint::PEAK], metrics)); float peak = 0; @@ -241,7 +237,7 @@ AudioPlot::plot_rms (wxGraphicsPath& path, int channel, Metrics const & metrics) if (_analysis->points (channel) == 0) { return; } - + path.MoveToPoint (metrics.db_label_width, y_for_linear (_analysis->get_point(channel, 0)[AudioPoint::RMS], metrics)); list smoothing; @@ -253,7 +249,7 @@ AudioPlot::plot_rms (wxGraphicsPath& path, int channel, Metrics const & metrics) int const before = _smoothing / 2; int const after = _smoothing - before; - + /* Pre-load the smoothing list */ for (int i = 0; i < before; ++i) { smoothing.push_back (first); @@ -283,7 +279,7 @@ AudioPlot::plot_rms (wxGraphicsPath& path, int channel, Metrics const & metrics) p += pow (*j, 2); } - if (smoothing.size() > 0) { + if (!smoothing.empty ()) { p = sqrt (p / smoothing.size ()); } @@ -291,13 +287,6 @@ AudioPlot::plot_rms (wxGraphicsPath& path, int channel, Metrics const & metrics) } } -void -AudioPlot::set_gain (float g) -{ - _gain = g; - Refresh (); -} - void AudioPlot::set_smoothing (int s) {