void
AudioDialog::set_film (boost::shared_ptr<Film> f)
{
+ _film_connection.disconnect ();
+ _film = f;
+
shared_ptr<AudioAnalysis> a;
try {
}
_channel->SetSelection (0);
+
+ _film_connection = f->Changed.connect (bind (&AudioDialog::film_changed, this, _1));
}
void
{
_plot->set_channel (_channel->GetSelection ());
}
+
+void
+AudioDialog::film_changed (Film::Property p)
+{
+ if (p == Film::AUDIO_GAIN) {
+ _plot->set_gain (_film->audio_gain ());
+ }
+}
*/
#include <boost/shared_ptr.hpp>
+#include <boost/signals2.hpp>
#include <wx/wx.h>
+#include "lib/film.h"
class AudioPlot;
class Film;
void set_film (boost::shared_ptr<Film>);
private:
+ void film_changed (Film::Property);
void channel_changed (wxCommandEvent &);
-
+
+ boost::shared_ptr<Film> _film;
AudioPlot* _plot;
wxChoice* _channel;
+ boost::signals2::scoped_connection _film_connection;
};
AudioPlot::AudioPlot (wxWindow* parent)
: wxPanel (parent)
, _channel (0)
+ , _gain (0)
{
Connect (wxID_ANY, wxEVT_PAINT, wxPaintEventHandler (AudioPlot::paint), 0, this);
for (int i = 0; i < AudioPoint::COUNT; ++i) {
path[i] = gc->CreatePath ();
- path[i].MoveToPoint (0, height - (max (_analysis->get_point(_channel, 0)[i], -60.0f) + 60) * ys);
+ path[i].MoveToPoint (0, height - (max (_analysis->get_point(_channel, 0)[i], -60.0f) + 60 + _gain) * ys);
}
for (int i = 0; i < _analysis->points(_channel); ++i) {
for (int j = 0; j < AudioPoint::COUNT; ++j) {
- path[j].AddLineToPoint (i * xs, height - (max (_analysis->get_point(_channel, i)[j], -60.0f) + 60) * ys);
+ path[j].AddLineToPoint (i * xs, height - (max (_analysis->get_point(_channel, i)[j], -60.0f) + 60 + _gain) * ys);
}
}
delete gc;
}
+
+void
+AudioPlot::set_gain (float g)
+{
+ _gain = g;
+ Refresh ();
+}
void set_analysis (boost::shared_ptr<AudioAnalysis>);
void set_channel (int c);
+ void set_gain (float);
private:
void paint (wxPaintEvent &);
boost::shared_ptr<AudioAnalysis> _analysis;
int _channel;
+ /** gain to apply in dB */
+ float _gain;
};