X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fstrip_silence_dialog.h;h=1e8b140358b97ae87347493643d46f2f6ca4ad0b;hb=9c4f5ac000ad91b55e4cf91317b7a89f6239870e;hp=2084d74de26eb739d4b5cad476bf87cfd20bfe68;hpb=a7eb8f47335904c6b9c30b86d6a7be3946d13655;p=ardour.git diff --git a/gtk2_ardour/strip_silence_dialog.h b/gtk2_ardour/strip_silence_dialog.h index 2084d74de2..1e8b140358 100644 --- a/gtk2_ardour/strip_silence_dialog.h +++ b/gtk2_ardour/strip_silence_dialog.h @@ -26,65 +26,72 @@ namespace ARDOUR { class AudioRegion; + class Session; } /// Dialog box to set options for the `strip silence' filter class StripSilenceDialog : public ArdourDialog { public: - StripSilenceDialog (std::list > const &); + StripSilenceDialog (ARDOUR::Session*, std::list > const &); ~StripSilenceDialog (); double threshold () const { return _threshold.get_value (); } - nframes_t minimum_length () const { - return _minimum_length.get_value_as_int (); - } - - nframes_t fade_length () const { - return _fade_length.get_value_as_int (); - } - - static void stop_thread (); + nframes_t minimum_length () const; + nframes_t fade_length () const; + static void stop_thread (); private: void create_waves (); void peaks_ready (); void canvas_allocation (Gtk::Allocation &); void update_silence_rects (); - void redraw_silence_rects (); + void resize_silence_rects (); + void update_threshold_line (); + void threshold_changed (); Gtk::SpinButton _threshold; - Gtk::SpinButton _minimum_length; - Gtk::SpinButton _fade_length; + AudioClock _minimum_length; + AudioClock _fade_length; Gtk::Label _segment_count_label; + Gtk::Label _shortest_silence_label; + Gtk::Label _shortest_audible_label; + typedef std::list > SilenceResult; struct Wave { boost::shared_ptr region; ArdourCanvas::WaveView* view; std::list silence_rects; + ArdourCanvas::SimpleLine* threshold_line; double samples_per_unit; - std::list >silence; + SilenceResult silence; - Wave() : view (0), samples_per_unit (1) { } + Wave (ArdourCanvas::Group *, boost::shared_ptr); + ~Wave (); }; ArdourCanvas::Canvas* _canvas; - std::list _waves; + std::list _waves; int _wave_width; int _wave_height; bool restart_queued; - static ARDOUR::InterThreadInfo itt; - static bool thread_should_exit; - static Glib::Cond *thread_run; - static Glib::Cond *thread_waiting; - static Glib::StaticMutex run_lock; - static StripSilenceDialog* current; + static ARDOUR::InterThreadInfo itt; + static bool thread_should_exit; + static Glib::Cond *thread_run; + static Glib::Cond *thread_waiting; + static Glib::StaticMutex run_lock; + static StripSilenceDialog* current; + + ARDOUR::framecnt_t max_audible; + ARDOUR::framecnt_t min_audible; + ARDOUR::framecnt_t max_silence; + ARDOUR::framecnt_t min_silence; - PBD::ScopedConnection _peaks_ready_connection; + PBD::ScopedConnection* _peaks_ready_connection; static bool _detection_done (void*); static void* _detection_thread_work (void*); @@ -93,4 +100,6 @@ private: void* detection_thread_work (); bool start_silence_detection (); void maybe_start_silence_detection (); + + void update_stats (const SilenceResult&); };