diff options
-rw-r--r-- | SConstruct | 3 | ||||
-rw-r--r-- | gtk2_ardour/crossfade_edit.cc | 188 | ||||
-rw-r--r-- | gtk2_ardour/crossfade_edit.h | 5 | ||||
-rw-r--r-- | libs/ardour/crossfade.cc | 57 | ||||
-rw-r--r-- | libs/ardour/utils.cc | 2 |
5 files changed, 162 insertions, 93 deletions
diff --git a/SConstruct b/SConstruct index f0d1122fce..dd91ed2f19 100644 --- a/SConstruct +++ b/SConstruct @@ -1118,6 +1118,9 @@ else: libraries['pangomm'] = LibraryInfo(LIBS='pangomm', LIBPATH='#libs/gtkmm2/pango', CPPPATH='#libs/gtkmm2/pango') + libraries['cairomm'] = LibraryInfo(LIBS='cairomm', + LIBPATH='#libs/cairomm', + CPPPATH='#libs/cairomm') libraries['atkmm'] = LibraryInfo(LIBS='atkmm', LIBPATH='#libs/gtkmm2/atk', CPPPATH='#libs/gtkmm2/atk') diff --git a/gtk2_ardour/crossfade_edit.cc b/gtk2_ardour/crossfade_edit.cc index c2d97d0897..47074b2feb 100644 --- a/gtk2_ardour/crossfade_edit.cc +++ b/gtk2_ardour/crossfade_edit.cc @@ -36,6 +36,7 @@ #include <ardour/audiosource.h> #include <ardour/playlist_templates.h> #include <ardour/region_factory.h> +#include <ardour/profile.h> #include <gtkmm2ext/gtk_ui.h> @@ -200,6 +201,7 @@ CrossfadeEditor::CrossfadeEditor (Session& s, boost::shared_ptr<Crossfade> xf, d pbutton->add (*pxmap); pbutton->set_name ("CrossfadeEditButton"); pbutton->signal_clicked().connect (bind (mem_fun(*this, &CrossfadeEditor::apply_preset), *i)); + ARDOUR_UI::instance()->set_tip (pbutton, (*i)->name, ""); fade_in_table.attach (*pbutton, col, col+1, row, row+1); fade_in_buttons.push_back (pbutton); @@ -221,6 +223,7 @@ CrossfadeEditor::CrossfadeEditor (Session& s, boost::shared_ptr<Crossfade> xf, d pbutton->add (*pxmap); pbutton->set_name ("CrossfadeEditButton"); pbutton->signal_clicked().connect (bind (mem_fun(*this, &CrossfadeEditor::apply_preset), *i)); + ARDOUR_UI::instance()->set_tip (pbutton, (*i)->name, ""); fade_out_table.attach (*pbutton, col, col+1, row, row+1); fade_out_buttons.push_back (pbutton); @@ -855,125 +858,154 @@ CrossfadeEditor::build_presets () fade_out_presets = new Presets; /* FADE OUT */ - // p = new Preset ("hiin.xpm"); - p = new Preset ("crossfade_in_fast-cut"); - p->push_back (PresetPoint (0, 0)); - p->push_back (PresetPoint (0.0207373, 0.197222)); - p->push_back (PresetPoint (0.0645161, 0.525)); - p->push_back (PresetPoint (0.152074, 0.802778)); - p->push_back (PresetPoint (0.276498, 0.919444)); - p->push_back (PresetPoint (0.481567, 0.980556)); - p->push_back (PresetPoint (0.767281, 1)); - p->push_back (PresetPoint (1, 1)); - fade_in_presets->push_back (p); - - // p = new Preset ("loin.xpm"); - p = new Preset ("crossfade_in_transition"); - p->push_back (PresetPoint (0, 0)); - p->push_back (PresetPoint (0.389401, 0.0333333)); - p->push_back (PresetPoint (0.629032, 0.0861111)); - p->push_back (PresetPoint (0.829493, 0.233333)); - p->push_back (PresetPoint (0.9447, 0.483333)); - p->push_back (PresetPoint (0.976959, 0.697222)); - p->push_back (PresetPoint (1, 1)); - fade_in_presets->push_back (p); - // p = new Preset ("regin.xpm"); - p = new Preset ("crossfade_in_constant"); + p = new Preset ("Constant Power", "crossfade_in_constant"); p->push_back (PresetPoint (0, 0)); + +#ifdef OLD_CONSTANT_XFADE p->push_back (PresetPoint (0.0737327, 0.308333)); p->push_back (PresetPoint (0.246544, 0.658333)); p->push_back (PresetPoint (0.470046, 0.886111)); p->push_back (PresetPoint (0.652074, 0.972222)); p->push_back (PresetPoint (0.771889, 0.988889)); p->push_back (PresetPoint (1, 1)); +#else + p->push_back (PresetPoint (0.000000, 0.000000)); + p->push_back (PresetPoint (0.166667, 0.166366)); + p->push_back (PresetPoint (0.333333, 0.332853)); + p->push_back (PresetPoint (0.500000, 0.499459)); + p->push_back (PresetPoint (0.666667, 0.666186)); + p->push_back (PresetPoint (0.833333, 0.833033)); + p->push_back (PresetPoint (1.000000, 1.000000)); +#endif + fade_in_presets->push_back (p); - // p = new Preset ("regin2.xpm"); - p = new Preset ("crossfade_in_slow-cut"); + p = new Preset ("S-curve", "crossfade_in_default"); p->push_back (PresetPoint (0, 0)); - p->push_back (PresetPoint (0.304147, 0.0694444)); - p->push_back (PresetPoint (0.529954, 0.152778)); - p->push_back (PresetPoint (0.725806, 0.333333)); - p->push_back (PresetPoint (0.847926, 0.558333)); - p->push_back (PresetPoint (0.919355, 0.730556)); + p->push_back (PresetPoint (0.1, 0.01)); + p->push_back (PresetPoint (0.2, 0.03)); + p->push_back (PresetPoint (0.8, 0.97)); + p->push_back (PresetPoint (0.9, 0.99)); p->push_back (PresetPoint (1, 1)); fade_in_presets->push_back (p); + // p = new Preset ("linin.xpm"); - p = new Preset ("crossfade_in_dipped"); + p = new Preset ("Linear", "crossfade_in_dipped"); p->push_back (PresetPoint (0, 0)); p->push_back (PresetPoint (1, 1)); fade_in_presets->push_back (p); - p = new Preset ("crossfade_in_default"); - p->push_back (PresetPoint (0, 0)); - p->push_back (PresetPoint (0.1, 0.01)); - p->push_back (PresetPoint (0.2, 0.03)); - p->push_back (PresetPoint (0.8, 0.97)); - p->push_back (PresetPoint (0.9, 0.99)); - p->push_back (PresetPoint (1, 1)); - fade_in_presets->push_back (p); + if (!Profile->get_sae()) { + // p = new Preset ("hiin.xpm"); + p = new Preset ("Long cut", "crossfade_in_fast-cut"); + p->push_back (PresetPoint (0, 0)); + p->push_back (PresetPoint (0.0207373, 0.197222)); + p->push_back (PresetPoint (0.0645161, 0.525)); + p->push_back (PresetPoint (0.152074, 0.802778)); + p->push_back (PresetPoint (0.276498, 0.919444)); + p->push_back (PresetPoint (0.481567, 0.980556)); + p->push_back (PresetPoint (0.767281, 1)); + p->push_back (PresetPoint (1, 1)); + fade_in_presets->push_back (p); + + // p = new Preset ("loin.xpm"); + p = new Preset ("Short cut", "crossfade_in_transition"); + p->push_back (PresetPoint (0, 0)); + p->push_back (PresetPoint (0.389401, 0.0333333)); + p->push_back (PresetPoint (0.629032, 0.0861111)); + p->push_back (PresetPoint (0.829493, 0.233333)); + p->push_back (PresetPoint (0.9447, 0.483333)); + p->push_back (PresetPoint (0.976959, 0.697222)); + p->push_back (PresetPoint (1, 1)); + fade_in_presets->push_back (p); + + + // p = new Preset ("regin2.xpm"); + p = new Preset ("Slow cut", "crossfade_in_slow-cut"); + p->push_back (PresetPoint (0, 0)); + p->push_back (PresetPoint (0.304147, 0.0694444)); + p->push_back (PresetPoint (0.529954, 0.152778)); + p->push_back (PresetPoint (0.725806, 0.333333)); + p->push_back (PresetPoint (0.847926, 0.558333)); + p->push_back (PresetPoint (0.919355, 0.730556)); + p->push_back (PresetPoint (1, 1)); + fade_in_presets->push_back (p); + } /* FADE OUT */ - // p = new Preset ("hiout.xpm"); - p = new Preset ("crossfade_out_fast-cut"); - p->push_back (PresetPoint (0, 1)); - p->push_back (PresetPoint (0.305556, 1)); - p->push_back (PresetPoint (0.548611, 0.991736)); - p->push_back (PresetPoint (0.759259, 0.931129)); - p->push_back (PresetPoint (0.918981, 0.68595)); - p->push_back (PresetPoint (0.976852, 0.22865)); - p->push_back (PresetPoint (1, 0)); - fade_out_presets->push_back (p); - - // p = new Preset ("loout.xpm"); - p = new Preset ("crossfade_out_transition"); - p->push_back (PresetPoint (0, 1)); - p->push_back (PresetPoint (0.023041, 0.697222)); - p->push_back (PresetPoint (0.0553, 0.483333)); - p->push_back (PresetPoint (0.170507, 0.233333)); - p->push_back (PresetPoint (0.370968, 0.0861111)); - p->push_back (PresetPoint (0.610599, 0.0333333)); - p->push_back (PresetPoint (1, 0)); - fade_out_presets->push_back (p); - // p = new Preset ("regout.xpm"); - p = new Preset ("crossfade_out_constant"); + p = new Preset ("Constant Power", "crossfade_out_constant"); p->push_back (PresetPoint (0, 1)); +#ifdef OLD_CONSTANT_XFADE p->push_back (PresetPoint (0.228111, 0.988889)); p->push_back (PresetPoint (0.347926, 0.972222)); p->push_back (PresetPoint (0.529954, 0.886111)); p->push_back (PresetPoint (0.753456, 0.658333)); p->push_back (PresetPoint (0.9262673, 0.308333)); p->push_back (PresetPoint (1, 0)); +#else + p->push_back (PresetPoint (0.000000, 1.000000)); + p->push_back (PresetPoint (0.166667, 0.833033)); + p->push_back (PresetPoint (0.333333, 0.666186)); + p->push_back (PresetPoint (0.500000, 0.499459)); + p->push_back (PresetPoint (0.666667, 0.332853)); + p->push_back (PresetPoint (0.833333, 0.166366)); + p->push_back (PresetPoint (1.000000, 0.000000)); + +#endif fade_out_presets->push_back (p); - // p = new Preset ("regout2.xpm"); - p = new Preset ("crossfade_out_slow-fade"); + p = new Preset ("S-Curve", "crossfade_out_default"); p->push_back (PresetPoint (0, 1)); - p->push_back (PresetPoint (0.080645, 0.730556)); - p->push_back (PresetPoint (0.277778, 0.289256)); - p->push_back (PresetPoint (0.470046, 0.152778)); - p->push_back (PresetPoint (0.695853, 0.0694444)); + p->push_back (PresetPoint (0.1, 0.99)); + p->push_back (PresetPoint (0.2, 0.97)); + p->push_back (PresetPoint (0.8, 0.03)); + p->push_back (PresetPoint (0.9, 0.01)); p->push_back (PresetPoint (1, 0)); fade_out_presets->push_back (p); // p = new Preset ("linout.xpm"); - p = new Preset ("crossfade_out_dipped"); + p = new Preset ("Linear", "crossfade_out_dipped"); p->push_back (PresetPoint (0, 1)); p->push_back (PresetPoint (1, 0)); fade_out_presets->push_back (p); - p = new Preset ("crossfade_out_default"); - p->push_back (PresetPoint (0, 1)); - p->push_back (PresetPoint (0.1, 0.99)); - p->push_back (PresetPoint (0.2, 0.97)); - p->push_back (PresetPoint (0.8, 0.03)); - p->push_back (PresetPoint (0.9, 0.01)); - p->push_back (PresetPoint (1, 0)); - fade_out_presets->push_back (p); + if (!Profile->get_sae()) { + // p = new Preset ("hiout.xpm"); + p = new Preset ("Slow end/cut", "crossfade_out_fast-cut"); + p->push_back (PresetPoint (0, 1)); + p->push_back (PresetPoint (0.305556, 1)); + p->push_back (PresetPoint (0.548611, 0.991736)); + p->push_back (PresetPoint (0.759259, 0.931129)); + p->push_back (PresetPoint (0.918981, 0.68595)); + p->push_back (PresetPoint (0.976852, 0.22865)); + p->push_back (PresetPoint (1, 0)); + fade_out_presets->push_back (p); + + // p = new Preset ("loout.xpm"); + p = new Preset ("Fast start/cut", "crossfade_out_transition"); + p->push_back (PresetPoint (0, 1)); + p->push_back (PresetPoint (0.023041, 0.697222)); + p->push_back (PresetPoint (0.0553, 0.483333)); + p->push_back (PresetPoint (0.170507, 0.233333)); + p->push_back (PresetPoint (0.370968, 0.0861111)); + p->push_back (PresetPoint (0.610599, 0.0333333)); + p->push_back (PresetPoint (1, 0)); + fade_out_presets->push_back (p); + + // p = new Preset ("regout2.xpm"); + p = new Preset ("Slow Fade", "crossfade_out_slow-fade"); + p->push_back (PresetPoint (0, 1)); + p->push_back (PresetPoint (0.080645, 0.730556)); + p->push_back (PresetPoint (0.277778, 0.289256)); + p->push_back (PresetPoint (0.470046, 0.152778)); + p->push_back (PresetPoint (0.695853, 0.0694444)); + p->push_back (PresetPoint (1, 0)); + fade_out_presets->push_back (p); + } } void diff --git a/gtk2_ardour/crossfade_edit.h b/gtk2_ardour/crossfade_edit.h index 3164118bd9..3d51771e2b 100644 --- a/gtk2_ardour/crossfade_edit.h +++ b/gtk2_ardour/crossfade_edit.h @@ -62,9 +62,10 @@ class CrossfadeEditor : public ArdourDialog }; struct Preset : public list<PresetPoint> { + const char* name; const char* image_name; - - Preset (const char* x) : image_name (x) {} + + Preset (const char* n, const char* x) : name (n), image_name (x) {} }; typedef list<Preset*> Presets; diff --git a/libs/ardour/crossfade.cc b/libs/ardour/crossfade.cc index e73d79a553..7e8307a158 100644 --- a/libs/ardour/crossfade.cc +++ b/libs/ardour/crossfade.cc @@ -208,22 +208,55 @@ Crossfade::initialize () _fade_out.freeze (); _fade_out.clear (); - _fade_out.add (0.0, 1.0); - _fade_out.add ((_length * 0.1), 0.99); - _fade_out.add ((_length * 0.2), 0.97); - _fade_out.add ((_length * 0.8), 0.03); - _fade_out.add ((_length * 0.9), 0.01); - _fade_out.add (_length, 0.0); + +#ifdef EQUAL_POWER_MINUS_3DB + + _fade_out.add ((_length * 0.000000), 1.000000); + _fade_out.add ((_length * 0.166667), 0.948859); + _fade_out.add ((_length * 0.333333), 0.851507); + _fade_out.add ((_length * 0.500000), 0.707946); + _fade_out.add ((_length * 0.666667), 0.518174); + _fade_out.add ((_length * 0.833333), 0.282192); + _fade_out.add ((_length * 1.000000), 0.000000); + +#else // EQUAL_POWER_MINUS_6DB + + _fade_out.add ((_length * 0.000000), 1.000000); + _fade_out.add ((_length * 0.166667), 0.833033); + _fade_out.add ((_length * 0.333333), 0.666186); + _fade_out.add ((_length * 0.500000), 0.499459); + _fade_out.add ((_length * 0.666667), 0.332853); + _fade_out.add ((_length * 0.833333), 0.166366); + _fade_out.add ((_length * 1.000000), 0.000000); +#endif + _fade_out.thaw (); _fade_in.freeze (); _fade_in.clear (); - _fade_in.add (0.0, 0.0); - _fade_in.add ((_length * 0.1), 0.01); - _fade_in.add ((_length * 0.2), 0.03); - _fade_in.add ((_length * 0.8), 0.97); - _fade_in.add ((_length * 0.9), 0.99); - _fade_in.add (_length, 1.0); + +#ifdef EQUAL_POWER_MINUS_3DB + + _fade_in.add ((_length * 0.000000), 0.000000); + _fade_in.add ((_length * 0.166667), 0.282192); + _fade_in.add ((_length * 0.333333), 0.518174); + _fade_in.add ((_length * 0.500000), 0.707946); + _fade_in.add ((_length * 0.666667), 0.851507); + _fade_in.add ((_length * 0.833333), 0.948859); + _fade_in.add ((_length * 1.000000), 1.000000); + +#else // EQUAL_POWER_MINUS_SIX_DB + + _fade_in.add ((_length * 0.000000), 0.000000); + _fade_in.add ((_length * 0.166667), 0.166366); + _fade_in.add ((_length * 0.333333), 0.332853); + _fade_in.add ((_length * 0.500000), 0.499459); + _fade_in.add ((_length * 0.666667), 0.666186); + _fade_in.add ((_length * 0.833333), 0.833033); + _fade_in.add ((_length * 1.000000), 1.000000); + +#endif + _fade_in.thaw (); overlap_type = _in->coverage (_out->position(), _out->last_frame()); diff --git a/libs/ardour/utils.cc b/libs/ardour/utils.cc index 45d77f46a5..8927e2a9c6 100644 --- a/libs/ardour/utils.cc +++ b/libs/ardour/utils.cc @@ -340,7 +340,7 @@ compute_equal_power_fades (nframes_t nframes, float* in, float* out) { double step; - step = 1.0/nframes; + step = 1.0/(nframes-1); in[0] = 0.0f; |