13
0

GUI support for per region polarity invert

This commit is contained in:
Robin Gareus 2022-12-17 12:37:32 +01:00
parent 5b52aa956f
commit 9819cdb117
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
4 changed files with 28 additions and 9 deletions

View File

@ -55,7 +55,8 @@ _peak_amplitude_thread (void* arg)
AudioRegionEditor::AudioRegionEditor (Session* s, boost::shared_ptr<AudioRegion> r)
: RegionEditor (s, r)
, _audio_region (r)
, gain_adjustment(accurate_coefficient_to_dB(_audio_region->scale_amplitude()), -40.0, +40.0, 0.1, 1.0, 0)
, gain_adjustment(accurate_coefficient_to_dB(fabsf (_audio_region->scale_amplitude())), -40.0, +40.0, 0.1, 1.0, 0)
, _polarity_toggle (_("Invert"))
, _peak_channel (false)
{
@ -84,9 +85,16 @@ AudioRegionEditor::AudioRegionEditor (Session* s, boost::shared_ptr<AudioRegion>
_table.attach (*b, 1, 2, _table_row, _table_row + 1, Gtk::FILL, Gtk::FILL);
++_table_row;
_polarity_label.set_name ("AudioRegionEditorLabel");
_polarity_label.set_text (_("Polarity:"));
_table.attach (_polarity_label, 0, 1, _table_row, _table_row + 1, Gtk::FILL, Gtk::FILL);
_table.attach (_polarity_toggle, 1, 2, _table_row, _table_row + 1, Gtk::FILL, Gtk::FILL);
++_table_row;
gain_changed ();
gain_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &AudioRegionEditor::gain_adjustment_changed));
_polarity_toggle.signal_toggled().connect (sigc::mem_fun (*this, &AudioRegionEditor::gain_adjustment_changed));
_peak_amplitude.property_editable() = false;
_peak_amplitude.set_text (_("Calculating..."));
@ -123,16 +131,22 @@ AudioRegionEditor::region_changed (const PBD::PropertyChange& what_changed)
void
AudioRegionEditor::gain_changed ()
{
float const region_gain_dB = accurate_coefficient_to_dB (_audio_region->scale_amplitude());
const gain_t scale_amplitude = _audio_region->scale_amplitude();
float const region_gain_dB = accurate_coefficient_to_dB (fabsf (scale_amplitude));
if (region_gain_dB != gain_adjustment.get_value()) {
gain_adjustment.set_value(region_gain_dB);
}
_polarity_toggle.set_active (scale_amplitude < 0);
}
void
AudioRegionEditor::gain_adjustment_changed ()
{
float const gain = dB_to_coefficient (gain_adjustment.get_value());
float gain = dB_to_coefficient (gain_adjustment.get_value());
if (_polarity_toggle.get_active ()) {
gain *= -1;
}
if (_audio_region->scale_amplitude() != gain) {
_audio_region->set_scale_amplitude (gain);
}

View File

@ -28,7 +28,7 @@
#include <gtkmm/label.h>
#include <gtkmm/entry.h>
#include <gtkmm/box.h>
#include <gtkmm/togglebutton.h>
#include <gtkmm/checkbutton.h>
#include <gtkmm/button.h>
#include <gtkmm/arrow.h>
#include <gtkmm/frame.h>
@ -69,10 +69,13 @@ private:
boost::shared_ptr<ARDOUR::AudioRegion> _audio_region;
Gtk::Label gain_label;
Gtk::Label gain_label;
Gtk::Adjustment gain_adjustment;
Gtk::SpinButton gain_entry;
Gtk::Label _polarity_label;
Gtk::CheckButton _polarity_toggle;
Gtk::Label _peak_amplitude_label;
Gtk::Entry _peak_amplitude;

View File

@ -416,9 +416,10 @@ AudioRegionView::region_renamed ()
}
boost::shared_ptr<AudioRegion> ar (audio_region());
if (ar->scale_amplitude() != 1.0) {
const gain_t scale_amplitude = ar->scale_amplitude();
if (scale_amplitude != 1.0) {
char tmp[32];
snprintf (tmp, 32, " (%.1fdB)", accurate_coefficient_to_dB (ar->scale_amplitude()));
snprintf (tmp, 32, " (%.1fdB%s)", accurate_coefficient_to_dB (fabsf (scale_amplitude)), scale_amplitude < 0 ? " Ø" : "");
str += tmp;
}

View File

@ -5769,7 +5769,8 @@ Editor::adjust_region_gain (bool up)
arv->region()->clear_changes ();
double dB = accurate_coefficient_to_dB (arv->audio_region()->scale_amplitude ());
gain_t scale_amplitude = arv->audio_region()->scale_amplitude ();
double dB = accurate_coefficient_to_dB (fabsf (scale_amplitude));
if (up) {
dB += 1;
@ -5777,7 +5778,7 @@ Editor::adjust_region_gain (bool up)
dB -= 1;
}
arv->audio_region()->set_scale_amplitude (dB_to_coefficient (dB));
arv->audio_region()->set_scale_amplitude (dB_to_coefficient (dB) * (scale_amplitude < 0 ? -1. : 1.));
if (!in_command) {
begin_reversible_command ("adjust region gain");