From 0157734a3075efccac0171c0d4cd6bb5411d15b7 Mon Sep 17 00:00:00 2001 From: Jonathan Moore Liles Date: Fri, 23 Oct 2020 22:08:13 -0700 Subject: [PATCH] Timeline: Add "Disabled" fade type to disable both fade and declicking for cases where regions need to be abutted perfectly. --- timeline/src/Audio_Region.C | 11 +++++++++++ timeline/src/Audio_Region.H | 2 +- timeline/src/Engine/Audio_Region.C | 26 +++++++++++++++----------- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/timeline/src/Audio_Region.C b/timeline/src/Audio_Region.C index 55c0057..f5b74c3 100644 --- a/timeline/src/Audio_Region.C +++ b/timeline/src/Audio_Region.C @@ -224,6 +224,8 @@ Audio_Region::menu_cb ( const Fl_Menu_ *m ) _fade_in.type = Fade::Logarithmic; else if ( ! strcmp( picked, "Fade/In/Parabolic" ) ) _fade_in.type = Fade::Parabolic; + else if ( ! strcmp( picked, "Fade/In/Disabled" ) ) + _fade_in.type = Fade::Disabled; else if ( ! strcmp( picked, "Fade/Out/Linear" ) ) _fade_out.type = Fade::Linear; else if ( ! strcmp( picked, "Fade/Out/Sigmoid" ) ) @@ -232,6 +234,8 @@ Audio_Region::menu_cb ( const Fl_Menu_ *m ) _fade_out.type = Fade::Logarithmic; else if ( ! strcmp( picked, "Fade/Out/Parabolic" ) ) _fade_out.type = Fade::Parabolic; + else if ( ! strcmp( picked, "Fade/Out/Disabled" ) ) + _fade_out.type = Fade::Disabled; else if ( ! strcmp( picked, "/Color" ) ) box_color( fl_show_colormap( box_color() ) ); else if ( ! strcmp( picked, "/Split at mouse" ) ) @@ -351,12 +355,16 @@ Audio_Region::menu ( void ) { "Sigmoid", 0, 0, 0, FL_MENU_RADIO | ( it == Fade::Sigmoid ? FL_MENU_VALUE : 0 ) }, { "Logarithmic", 0, 0, 0, FL_MENU_RADIO | ( it == Fade::Logarithmic ? FL_MENU_VALUE : 0 ) }, { "Parabolic", 0, 0, 0, FL_MENU_RADIO | ( it == Fade::Parabolic ? FL_MENU_VALUE : 0 ) }, + { "Disabled", 0, 0, 0, FL_MENU_RADIO | ( it == Fade::Disabled ? FL_MENU_VALUE : 0 ) }, + { 0 }, { "Out", 0, 0, 0, FL_SUBMENU }, { "Linear", 0, 0, 0, FL_MENU_RADIO | ( ot == Fade::Linear ? FL_MENU_VALUE : 0 ) }, { "Sigmoid", 0, 0, 0, FL_MENU_RADIO | ( ot == Fade::Sigmoid ? FL_MENU_VALUE : 0 ) }, { "Logarithmic", 0, 0, 0, FL_MENU_RADIO | ( ot == Fade::Logarithmic ? FL_MENU_VALUE : 0 ) }, { "Parabolic", 0, 0, 0, FL_MENU_RADIO | ( ot == Fade::Parabolic ? FL_MENU_VALUE : 0 ) }, + { "Disabled", 0, 0, 0, FL_MENU_RADIO | ( ot == Fade::Disabled ? FL_MENU_VALUE : 0 ) }, + { 0 }, { 0 }, { "Color", 0, 0, 0, inherit_track_color ? FL_MENU_INACTIVE : 0 }, @@ -398,6 +406,9 @@ Audio_Region::draw_fade ( const Fade &fade, Fade::fade_dir_e dir, bool line, int const int height = dh; const int width = timeline->ts_to_x( fade.length ); + if ( Fade::Disabled == fade.type ) + return; + if ( width < 4 ) /* too small to draw */ return; diff --git a/timeline/src/Audio_Region.H b/timeline/src/Audio_Region.H index fb142d8..9f41fa1 100644 --- a/timeline/src/Audio_Region.H +++ b/timeline/src/Audio_Region.H @@ -42,7 +42,7 @@ public: struct Fade { - enum fade_type_e { Linear = 0, Sigmoid, Logarithmic, Parabolic }; + enum fade_type_e { Linear = 0, Sigmoid, Logarithmic, Parabolic, Disabled }; enum fade_dir_e { In, Out }; fade_type_e type; diff --git a/timeline/src/Engine/Audio_Region.C b/timeline/src/Engine/Audio_Region.C index dda0da7..f671db5 100644 --- a/timeline/src/Engine/Audio_Region.C +++ b/timeline/src/Engine/Audio_Region.C @@ -271,17 +271,21 @@ Audio_Region::read ( sample_t *buf, bool buf_is_empty, nframes_t pos, nframes_t Fade fade; - fade = declick < _fade_in ? _fade_in : declick; - - /* do fade in if necessary */ - if ( sO < fade.length ) - apply_fade( cbuf, _clip->channels(), fade, bS, bE, rS, Fade::In ); - - fade = declick < _fade_out ? _fade_out : declick; - - /* do fade out if necessary */ - if ( sO + cnt + fade.length > r.length ) - apply_fade( cbuf, _clip->channels(), fade, bS, bE, rE, Fade::Out ); + /* disabling fade also disables de-clicking for perfectly abutted edits. */ + if ( fade.type != Fade::Disabled ) + { + fade = declick < _fade_in ? _fade_in : declick; + + /* do fade in if necessary */ + if ( sO < fade.length ) + apply_fade( cbuf, _clip->channels(), fade, bS, bE, rS, Fade::In ); + + fade = declick < _fade_out ? _fade_out : declick; + + /* do fade out if necessary */ + if ( sO + cnt + fade.length > r.length ) + apply_fade( cbuf, _clip->channels(), fade, bS, bE, rE, Fade::Out ); + } } if ( buf != cbuf )