diff options
author | Robin Gareus <robin@gareus.org> | 2019-04-21 22:33:28 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2019-04-21 22:43:16 +0200 |
commit | 20bdf5d966459e87003e67e17439ef506b074599 (patch) | |
tree | 763515aa4f1c8d99df66294822db1f31625c3451 | |
parent | 2fcd19581ad6d784840b755c8b87c438b6165273 (diff) |
Allow analysis window to plot live pre/post signal analysis
-rw-r--r-- | gtk2_ardour/plugin_eq_gui.cc | 54 | ||||
-rw-r--r-- | gtk2_ardour/plugin_eq_gui.h | 4 |
2 files changed, 44 insertions, 14 deletions
diff --git a/gtk2_ardour/plugin_eq_gui.cc b/gtk2_ardour/plugin_eq_gui.cc index 7479ae0816..19ee2c9f1a 100644 --- a/gtk2_ardour/plugin_eq_gui.cc +++ b/gtk2_ardour/plugin_eq_gui.cc @@ -38,6 +38,8 @@ #include <gtkmm/button.h> #include <gtkmm/checkbutton.h> +#include "gtkmm2ext/utils.h" + #include "ardour/audio_buffer.h" #include "ardour/data_type.h" #include "ardour/chan_mapping.h" @@ -91,7 +93,6 @@ PluginEqGui::PluginEqGui (boost::shared_ptr<ARDOUR::PluginInsert> pluginInsert) dBScaleModel = Gtk::ListStore::create (dBColumns); dBScaleCombo = new Gtk::ComboBox (dBScaleModel, false); - dBScaleCombo->set_title (_("dB scale")); #define ADD_DB_ROW(MIN,MAX,STEP,NAME) \ { \ @@ -115,15 +116,26 @@ PluginEqGui::PluginEqGui (boost::shared_ptr<ARDOUR::PluginInsert> pluginInsert) dBScaleCombo -> signal_changed().connect (sigc::mem_fun(*this, &PluginEqGui::change_dB_scale)); - Gtk::Label *dBComboLabel = new Gtk::Label (_("dB scale")); + Gtk::Label *dBComboLabel = new Gtk::Label (_("Range:")); - Gtk::HBox *dBSelectBin = new Gtk::HBox (false, 5); + Gtk::HBox *dBSelectBin = new Gtk::HBox (false, 4); dBSelectBin->add (*manage(dBComboLabel)); dBSelectBin->add (*manage(dBScaleCombo)); - // Phase checkbutton - _signal_button = new Gtk::CheckButton (_("Plot live signal")); - _signal_button->set_active(true); + _live_signal_combo = new Gtk::ComboBoxText (); + _live_signal_combo->append_text (_("Off")); + _live_signal_combo->append_text (_("Output / Input")); + _live_signal_combo->append_text (_("Input")); + _live_signal_combo->append_text (_("Output")); + _live_signal_combo->append_text (_("Input +40dB")); + _live_signal_combo->append_text (_("Output +40dB")); + _live_signal_combo->set_active (0); + + Gtk::Label *live_signal_label = new Gtk::Label (_("Live signal:")); + + Gtk::HBox *liveSelectBin = new Gtk::HBox (false, 4); + liveSelectBin->add (*manage(live_signal_label)); + liveSelectBin->add (*manage(_live_signal_combo)); // Phase checkbutton _phase_button = new Gtk::CheckButton (_("Show phase")); @@ -132,14 +144,14 @@ PluginEqGui::PluginEqGui (boost::shared_ptr<ARDOUR::PluginInsert> pluginInsert) // Freq/dB info for mouse over _pointer_info = new Gtk::Label ("", 1, 0.5); - _pointer_info->set_size_request (_analysis_width / 4, -1); _pointer_info->set_name ("PluginAnalysisInfoLabel"); + Gtkmm2ext::set_size_request_to_display_given_text (*_pointer_info, "10.0kHz_000.0dB_180.0\u00B0", 0, 0); // populate table attach (*manage(_analysis_area), 0, 4, 0, 1); attach (*manage(dBSelectBin), 0, 1, 1, 2, Gtk::SHRINK, Gtk::SHRINK); - attach (*manage(_signal_button), 1, 2, 1, 2, Gtk::SHRINK, Gtk::SHRINK); - attach (*manage(_phase_button), 2, 3, 1, 2, Gtk::SHRINK, Gtk::SHRINK); + attach (*manage(liveSelectBin), 1, 2, 1, 2, Gtk::SHRINK, Gtk::SHRINK, 4, 0); + attach (*manage(_phase_button), 2, 3, 1, 2, Gtk::SHRINK, Gtk::SHRINK, 4, 0); attach (*manage(_pointer_info), 3, 4, 1, 2, Gtk::FILL, Gtk::SHRINK); } @@ -202,6 +214,7 @@ PluginEqGui::stop_updating () if (_update_connection.connected ()) { _update_connection.disconnect (); } + _signal_analysis_running = false; } void @@ -314,8 +327,6 @@ PluginEqGui::resize_analysis_area (Gtk::Allocation& size) cairo_surface_destroy (_analysis_scale_surface); _analysis_scale_surface = 0; } - - _pointer_info->set_size_request (_analysis_width / 4, -1); } bool @@ -560,7 +571,7 @@ PluginEqGui::redraw_analysis_area () update_pointer_info (_pointer_in_area_xpos); } - if (_signal_button->get_active()) { + if (_live_signal_combo->get_active_row_number() > 0) { plot_signal_amplitude_difference (_analysis_area, cr); } @@ -850,7 +861,24 @@ PluginEqGui::plot_signal_amplitude_difference (Gtk::Widget *w, cairo_t *cr) float power_out = _signal_output_fft->power_at_bin (i) + 1e-30; float power_in = _signal_input_fft ->power_at_bin (i) + 1e-30; - float power = power_to_dB (power_out / power_in); + float power; + switch (_live_signal_combo->get_active_row_number()) { + case 2: + power = power_to_dB (power_in); + break; + case 3: + power = power_to_dB (power_out); + break; + case 4: + power = power_to_dB (power_in) + 40; + break; + case 5: + power = power_to_dB (power_out) + 40; + break; + default: + power = power_to_dB (power_out / power_in); + break; + } assert (!ISINF(power)); assert (!ISNAN(power)); diff --git a/gtk2_ardour/plugin_eq_gui.h b/gtk2_ardour/plugin_eq_gui.h index 3827db87a2..fa2b500f83 100644 --- a/gtk2_ardour/plugin_eq_gui.h +++ b/gtk2_ardour/plugin_eq_gui.h @@ -27,6 +27,7 @@ #include <gtkmm/table.h> #include <gtkmm/drawingarea.h> #include <gtkmm/combobox.h> +#include <gtkmm/comboboxtext.h> #include <gtkmm/liststore.h> namespace ARDOUR { @@ -142,7 +143,8 @@ private: Gtk::ComboBox *dBScaleCombo; Glib::RefPtr<Gtk::ListStore> dBScaleModel; - Gtk::CheckButton *_signal_button; + Gtk::ComboBoxText* _live_signal_combo; + Gtk::CheckButton *_phase_button; // signals and connections |