diff options
author | Carl Hetherington <carl@carlh.net> | 2010-10-28 20:01:26 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2010-10-28 20:01:26 +0000 |
commit | db5c8c9791bc42611e3150d6f8861300b32a1cbf (patch) | |
tree | 4fde6c91f85f8a2bcf1b12093884db6b51e6c592 /gtk2_ardour | |
parent | e88f7f6b55142860155e06b5d92c6693414816e7 (diff) |
Add region peak amplitude to region editor.
git-svn-id: svn://localhost/ardour2/branches/3.0@7937 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/audio_region_editor.cc | 65 | ||||
-rw-r--r-- | gtk2_ardour/audio_region_editor.h | 12 | ||||
-rwxr-xr-x | gtk2_ardour/region_editor.cc | 11 | ||||
-rw-r--r-- | gtk2_ardour/region_editor.h | 1 |
4 files changed, 79 insertions, 10 deletions
diff --git a/gtk2_ardour/audio_region_editor.cc b/gtk2_ardour/audio_region_editor.cc index 1823ab1303..2fb5ac5697 100644 --- a/gtk2_ardour/audio_region_editor.cc +++ b/gtk2_ardour/audio_region_editor.cc @@ -17,8 +17,11 @@ */ +#include <boost/lexical_cast.hpp> + #include "pbd/memento_command.h" #include "pbd/stateful_diff_command.h" +#include "pbd/pthread_utils.h" #include "ardour/session.h" #include "ardour/audioregion.h" @@ -41,28 +44,63 @@ using namespace PBD; using namespace std; using namespace Gtkmm2ext; +static void * +_peak_amplitude_thread (void* arg) +{ + SessionEvent::create_per_thread_pool ("peak amplitude events", 64); + static_cast<AudioRegionEditor*>(arg)->peak_amplitude_thread (); + return 0; +} + 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) - + , _peak_amplitude_found (false) { - gain_label.set_alignment (1, 0.5); - Gtk::HBox* gb = Gtk::manage (new Gtk::HBox); - gb->set_spacing (6); - gb->pack_start (gain_entry); - gb->pack_start (*Gtk::manage (new Gtk::Label (_("dB"))), false, false); + Gtk::HBox* b = Gtk::manage (new Gtk::HBox); + b->set_spacing (6); + b->pack_start (gain_entry); + b->pack_start (*Gtk::manage (new Gtk::Label (_("dB"))), false, false); gain_label.set_name ("AudioRegionEditorLabel"); gain_label.set_text (_("Region gain:")); + gain_label.set_alignment (1, 0.5); gain_entry.configure (gain_adjustment, 0.0, 1); _table.attach (gain_label, 0, 1, _table_row, _table_row + 1, Gtk::FILL, Gtk::FILL); - _table.attach (*gb, 1, 2, _table_row, _table_row + 1, Gtk::FILL, Gtk::FILL); + _table.attach (*b, 1, 2, _table_row, _table_row + 1, Gtk::FILL, Gtk::FILL); + ++_table_row; + b = Gtk::manage (new Gtk::HBox); + b->set_spacing (6); + b->pack_start (_peak_amplitude); + b->pack_start (*Gtk::manage (new Gtk::Label (_("dBFS"))), false, false); + + _peak_amplitude_label.set_name ("AudioRegionEditorLabel"); + _peak_amplitude_label.set_text (_("Peak amplitude:")); + _peak_amplitude_label.set_alignment (1, 0.5); + _table.attach (_peak_amplitude_label, 0, 1, _table_row, _table_row + 1, Gtk::FILL, Gtk::FILL); + _table.attach (*b, 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)); + + _peak_amplitude.property_editable() = false; + _peak_amplitude.set_text (_("Calculating...")); + + PeakAmplitudeFound.connect (_peak_amplitude_connection, invalidator (*this), boost::bind (&AudioRegionEditor::peak_amplitude_found, this, _1), gui_context ()); + pthread_create_and_store (X_("peak-amplitude"), &_peak_amplitude_thread_handle, _peak_amplitude_thread, this); +} + +AudioRegionEditor::~AudioRegionEditor () +{ + pthread_cancel_one (_peak_amplitude_thread_handle); + void* v; + int const r = pthread_join (_peak_amplitude_thread_handle, &v); + assert (r == 0); } void @@ -91,3 +129,16 @@ AudioRegionEditor::gain_adjustment_changed () _audio_region->set_scale_amplitude (gain); } } + +void +AudioRegionEditor::peak_amplitude_thread () +{ + PeakAmplitudeFound (accurate_coefficient_to_dB (_audio_region->maximum_amplitude ())); /* EMIT SIGNAL */ +} + +void +AudioRegionEditor::peak_amplitude_found (double p) +{ + _peak_amplitude.set_text (boost::lexical_cast<string> (p)); +} + diff --git a/gtk2_ardour/audio_region_editor.h b/gtk2_ardour/audio_region_editor.h index ee7d6bd54a..f3accaf115 100644 --- a/gtk2_ardour/audio_region_editor.h +++ b/gtk2_ardour/audio_region_editor.h @@ -53,7 +53,10 @@ class AudioRegionEditor : public RegionEditor { public: AudioRegionEditor (ARDOUR::Session*, boost::shared_ptr<ARDOUR::AudioRegion>); + ~AudioRegionEditor (); + void peak_amplitude_thread (); + private: void region_changed (PBD::PropertyChange const &); @@ -66,6 +69,15 @@ class AudioRegionEditor : public RegionEditor Gtk::Label gain_label; Gtk::Adjustment gain_adjustment; Gtk::SpinButton gain_entry; + + Gtk::Label _peak_amplitude_label; + Gtk::Entry _peak_amplitude; + + bool _peak_amplitude_found; + pthread_t _peak_amplitude_thread_handle; + void peak_amplitude_found (double); + PBD::Signal1<void, double> PeakAmplitudeFound; + PBD::ScopedConnection _peak_amplitude_connection; }; #endif /* __gtk_ardour_audio_region_edit_h__ */ diff --git a/gtk2_ardour/region_editor.cc b/gtk2_ardour/region_editor.cc index 0d3f89dfad..708c789dd0 100755 --- a/gtk2_ardour/region_editor.cc +++ b/gtk2_ardour/region_editor.cc @@ -44,7 +44,7 @@ using namespace Gtkmm2ext; RegionEditor::RegionEditor (Session* s, boost::shared_ptr<Region> r) : ArdourDialog (_("Region")), - _table (8, 2), + _table (9, 2), _table_row (0), _region (r), name_label (_("Name:")), @@ -88,7 +88,12 @@ RegionEditor::RegionEditor (Session* s, boost::shared_ptr<Region> r) start_label.set_name ("RegionEditorLabel"); start_label.set_text (_("File start:")); _sources_label.set_name ("RegionEditorLabel"); - _sources_label.set_text (_("Sources:")); + + if (region->n_channels() > 1) { + _sources_label.set_text (_("Sources:")); + } else { + _sources_label.set_text (_("Source:")); + } _table.set_col_spacings (12); _table.set_row_spacings (6); @@ -139,7 +144,7 @@ RegionEditor::RegionEditor (Session* s, boost::shared_ptr<Region> r) _table.attach (_sources_label, 0, 1, _table_row, _table_row + 1, Gtk::FILL, Gtk::FILL); _table.attach (_sources, 1, 2, _table_row, _table_row + 1, Gtk::FILL, Gtk::FILL); ++_table_row; - + get_vbox()->pack_start (_table, true, true); add_button (Gtk::Stock::CLOSE, Gtk::RESPONSE_ACCEPT); diff --git a/gtk2_ardour/region_editor.h b/gtk2_ardour/region_editor.h index df9df33fc8..66f0f6226d 100644 --- a/gtk2_ardour/region_editor.h +++ b/gtk2_ardour/region_editor.h @@ -52,6 +52,7 @@ class RegionEditor : public ArdourDialog { public: RegionEditor (ARDOUR::Session*, boost::shared_ptr<ARDOUR::Region>); + virtual ~RegionEditor () {} protected: virtual void region_changed (const PBD::PropertyChange&); |