more strip silence dialog changes, to use audio clocks, show smallest silence/audible segments, etc.

git-svn-id: svn://localhost/ardour2/branches/3.0@6734 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2010-03-05 02:09:37 +00:00
parent 4cb9014de2
commit ec047d8981
6 changed files with 40 additions and 23 deletions

View file

@ -758,6 +758,18 @@ style "default_clock_display" = "medium text"
bg[ACTIVE] = { 0, 0, 0 } bg[ACTIVE] = { 0, 0, 0 }
} }
style "white_on_black_clock_display" = "medium text"
{
fg[NORMAL] = { 1.0, 1.0, 1.0 }
fg[ACTIVE] = { 1.0, 0.0, 0.0 }
fg[SELECTED] = { 1.0, 0, 0 }
base[NORMAL] = { 0, 0, 0 }
base[ACTIVE] = { 0, 0, 0 }
bg[NORMAL] = { 0, 0, 0 }
bg[ACTIVE] = { 0, 0, 0 }
}
style "editor_time_ruler" = "small_text" style "editor_time_ruler" = "small_text"
{ {
fg[NORMAL] = { 0.80, 0.80, 0.80 } fg[NORMAL] = { 0.80, 0.80, 0.80 }
@ -1440,6 +1452,7 @@ widget "*AudioClockBBTUpperInfo" style:highest "tempo_meter_clock_display"
widget "*AudioClockBBTLowerInfo" style:highest "tempo_meter_clock_display" widget "*AudioClockBBTLowerInfo" style:highest "tempo_meter_clock_display"
widget "*SelectionStartClock" style:highest "default_clock_display" widget "*SelectionStartClock" style:highest "default_clock_display"
widget "*SelectionEndClock" style:highest "default_clock_display" widget "*SelectionEndClock" style:highest "default_clock_display"
widget "*SilenceDurationClock" style:highest "white_on_black_clock_display"
widget "*EditPointClock" style:highest "default_clock_display" widget "*EditPointClock" style:highest "default_clock_display"
widget "*PreRollClock" style:highest "default_clock_display" widget "*PreRollClock" style:highest "default_clock_display"
widget "*PostRollClock" style:highest "default_clock_display" widget "*PostRollClock" style:highest "default_clock_display"

View file

@ -128,7 +128,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[])
/* big clock */ /* big clock */
big_clock (X_("bigclock"), false, "BigClockNonRecording", true, true, false, true), big_clock (X_("bigclock"), false, "BigClockNonRecording", true, true, false, false),
/* transport */ /* transport */

View file

@ -65,7 +65,7 @@ const uint32_t AudioClock::field_length[(int) AudioClock::AudioFrames+1] = {
10 /* Audio Frame */ 10 /* Audio Frame */
}; };
AudioClock::AudioClock (std::string clock_name, bool transient, std::string widget_name, AudioClock::AudioClock (const string& clock_name, bool transient, const string& widget_name,
bool allow_edit, bool follows_playhead, bool duration, bool with_info) bool allow_edit, bool follows_playhead, bool duration, bool with_info)
: _name (clock_name), : _name (clock_name),
is_transient (transient), is_transient (transient),

View file

@ -43,7 +43,8 @@ class AudioClock : public Gtk::HBox, public ARDOUR::SessionHandlePtr
Off Off
}; };
AudioClock (std::string, bool, std::string, bool, bool, bool duration = false, bool with_info = false); AudioClock (const std::string& clock_name, bool is_transient, const std::string& widget_name,
bool editable, bool follows_playhead, bool duration = false, bool with_info = false);
Mode mode() const { return _mode; } Mode mode() const { return _mode; }

View file

@ -4651,7 +4651,7 @@ Editor::strip_region_silence ()
} }
} }
StripSilenceDialog d (ar); StripSilenceDialog d (_session, ar);
int const r = d.run (); int const r = d.run ();
if (r == Gtk::RESPONSE_OK) { if (r == Gtk::RESPONSE_OK) {

View file

@ -26,28 +26,23 @@
namespace ARDOUR { namespace ARDOUR {
class AudioRegion; class AudioRegion;
class Session;
} }
/// Dialog box to set options for the `strip silence' filter /// Dialog box to set options for the `strip silence' filter
class StripSilenceDialog : public ArdourDialog class StripSilenceDialog : public ArdourDialog
{ {
public: public:
StripSilenceDialog (std::list<boost::shared_ptr<ARDOUR::AudioRegion> > const &); StripSilenceDialog (ARDOUR::Session*, std::list<boost::shared_ptr<ARDOUR::AudioRegion> > const &);
~StripSilenceDialog (); ~StripSilenceDialog ();
double threshold () const { double threshold () const {
return _threshold.get_value (); return _threshold.get_value ();
} }
nframes_t minimum_length () const { nframes_t minimum_length () const;
return _minimum_length.get_value_as_int (); nframes_t fade_length () const;
} static void stop_thread ();
nframes_t fade_length () const {
return _fade_length.get_value_as_int ();
}
static void stop_thread ();
private: private:
void create_waves (); void create_waves ();
@ -57,16 +52,17 @@ private:
void redraw_silence_rects (); void redraw_silence_rects ();
Gtk::SpinButton _threshold; Gtk::SpinButton _threshold;
Gtk::SpinButton _minimum_length; AudioClock _minimum_length;
Gtk::SpinButton _fade_length; AudioClock _fade_length;
Gtk::Label _segment_count_label; Gtk::Label _segment_count_label;
typedef std::list<std::pair<ARDOUR::frameoffset_t,ARDOUR::framecnt_t> > SilenceResult;
struct Wave { struct Wave {
boost::shared_ptr<ARDOUR::AudioRegion> region; boost::shared_ptr<ARDOUR::AudioRegion> region;
ArdourCanvas::WaveView* view; ArdourCanvas::WaveView* view;
std::list<ArdourCanvas::SimpleRect*> silence_rects; std::list<ArdourCanvas::SimpleRect*> silence_rects;
double samples_per_unit; double samples_per_unit;
std::list<std::pair<ARDOUR::frameoffset_t,ARDOUR::framecnt_t> >silence; SilenceResult silence;
Wave() : view (0), samples_per_unit (1) { } Wave() : view (0), samples_per_unit (1) { }
}; };
@ -77,12 +73,17 @@ private:
int _wave_height; int _wave_height;
bool restart_queued; bool restart_queued;
static ARDOUR::InterThreadInfo itt; static ARDOUR::InterThreadInfo itt;
static bool thread_should_exit; static bool thread_should_exit;
static Glib::Cond *thread_run; static Glib::Cond *thread_run;
static Glib::Cond *thread_waiting; static Glib::Cond *thread_waiting;
static Glib::StaticMutex run_lock; static Glib::StaticMutex run_lock;
static StripSilenceDialog* current; 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;
@ -93,4 +94,6 @@ private:
void* detection_thread_work (); void* detection_thread_work ();
bool start_silence_detection (); bool start_silence_detection ();
void maybe_start_silence_detection (); void maybe_start_silence_detection ();
void update_stats (const SilenceResult&);
}; };