X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fcrossfade_edit.cc;h=eb5cb2fba96879ac1838709a1002f1fa9d67106f;hb=2e1332f74f803a1be4c8bb4911266aef4b63f145;hp=82869af396d6d53ddd4fd004263793b83df664e4;hpb=8b3d298f6b16fbe819a9b9911e018c811b4914e3;p=ardour.git diff --git a/gtk2_ardour/crossfade_edit.cc b/gtk2_ardour/crossfade_edit.cc index 82869af396..eb5cb2fba9 100644 --- a/gtk2_ardour/crossfade_edit.cc +++ b/gtk2_ardour/crossfade_edit.cc @@ -27,8 +27,8 @@ #include -#include -#include +#include +#include #include #include #include @@ -36,6 +36,7 @@ #include #include #include +#include #include @@ -48,6 +49,7 @@ #include "canvas_impl.h" #include "simplerect.h" #include "waveview.h" +#include "actions.h" using namespace std; using namespace ARDOUR; @@ -65,8 +67,9 @@ CrossfadeEditor::Presets* CrossfadeEditor::fade_out_presets = 0; CrossfadeEditor::Half::Half () : line (0), - normative_curve (Parameter(GainAutomation), 0.0, 1.0, 1.0), // FIXME: GainAutomation? - gain_curve (Parameter(GainAutomation), 0.0, 2.0, 1.0) + //normative_curve (Evoral::Parameter(GainAutomation, 0.0, 1.0, 1.0)), // FIXME: GainAutomation? + normative_curve (Evoral::Parameter(GainAutomation)), + gain_curve (Evoral::Parameter(GainAutomation)) { } @@ -98,6 +101,8 @@ CrossfadeEditor::CrossfadeEditor (Session& s, boost::shared_ptr xf, d set_name ("CrossfadeEditWindow"); set_position (Gtk::WIN_POS_MOUSE); + add_accel_group (ActionManager::ui_manager->get_accel_group()); + add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::POINTER_MOTION_MASK); RadioButtonGroup sel_but_group = select_in_button.get_group(); @@ -197,6 +202,7 @@ CrossfadeEditor::CrossfadeEditor (Session& s, boost::shared_ptr 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); @@ -218,6 +224,7 @@ CrossfadeEditor::CrossfadeEditor (Session& s, boost::shared_ptr 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); @@ -343,13 +350,13 @@ CrossfadeEditor::set (const ARDOUR::AutomationList& curve, WhichFade which) goto out; } - the_end = curve.const_end(); + the_end = curve.end(); --the_end; - firstx = (*curve.const_begin())->when; + firstx = (*curve.begin())->when; endx = (*the_end)->when; - for (ARDOUR::AutomationList::const_iterator i = curve.const_begin(); i != curve.const_end(); ++i) { + for (ARDOUR::AutomationList::const_iterator i = curve.begin(); i != curve.end(); ++i) { double xfract = ((*i)->when - firstx) / (endx - firstx); double yfract = ((*i)->value - miny) / (maxy - miny); @@ -397,7 +404,7 @@ CrossfadeEditor::point_event (GdkEvent* event, Point* point) if (Keyboard::is_delete_event (&event->button)) { fade[current].points.remove (point); delete point; - } + } redraw (); break; @@ -771,7 +778,7 @@ CrossfadeEditor::_apply_to (boost::shared_ptr xf) /* IN */ - ARDOUR::AutomationList::const_iterator the_end = in.const_end(); + ARDOUR::AutomationList::const_iterator the_end = in.end(); --the_end; double firstx = (*in.begin())->when; @@ -791,7 +798,7 @@ CrossfadeEditor::_apply_to (boost::shared_ptr xf) /* OUT */ - the_end = out.const_end(); + the_end = out.end(); --the_end; firstx = (*out.begin())->when; @@ -852,58 +859,19 @@ 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->push_back (PresetPoint (0, 0)); - 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)); - fade_in_presets->push_back (p); - - // p = new Preset ("regin2.xpm"); - p = new Preset ("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); - // p = new Preset ("linin.xpm"); - p = new Preset ("crossfade_in_dipped"); + p = new Preset ("Linear (-6dB)", "crossfade_in_dipped"); p->push_back (PresetPoint (0, 0)); - p->push_back (PresetPoint (1, 1)); + 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)); fade_in_presets->push_back (p); - p = new Preset ("crossfade_in_default"); + p = new Preset ("S(1)-curve", "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)); @@ -911,66 +879,141 @@ CrossfadeEditor::build_presets () p->push_back (PresetPoint (0.9, 0.99)); p->push_back (PresetPoint (1, 1)); fade_in_presets->push_back (p); + + p = new Preset ("S(2)-curve", "crossfade_in_default"); + p->push_back (PresetPoint (0.0, 0.0)); + p->push_back (PresetPoint (0.055, 0.222)); + p->push_back (PresetPoint (0.163, 0.35)); + p->push_back (PresetPoint (0.837, 0.678)); + p->push_back (PresetPoint (0.945, 0.783)); + p->push_back (PresetPoint (1.0, 1.0)); + fade_in_presets->push_back (p); + + p = new Preset ("Constant Power (-3dB)", "crossfade_in_constant"); + + p->push_back (PresetPoint (0.000000, 0.000000)); + p->push_back (PresetPoint (0.166667, 0.282192)); + p->push_back (PresetPoint (0.333333, 0.518174)); + p->push_back (PresetPoint (0.500000, 0.707946)); + p->push_back (PresetPoint (0.666667, 0.851507)); + p->push_back (PresetPoint (0.833333, 0.948859)); + p->push_back (PresetPoint (1.000000, 1.000000)); + + 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 = new Preset ("regout.xpm"); + p = new Preset ("Linear (-6dB cut)", "crossfade_out_dipped"); 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)); + 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)); fade_out_presets->push_back (p); - // p = new Preset ("regout.xpm"); - p = new Preset ("crossfade_out_constant"); + p = new Preset ("S(1)-Curve", "crossfade_out_default"); p->push_back (PresetPoint (0, 1)); - 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 (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 ("regout2.xpm"); - p = new Preset ("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)); + p = new Preset ("S(2)-Curve", "crossfade_out_default"); + p->push_back (PresetPoint (0.0, 1.0)); + p->push_back (PresetPoint (0.163, 0.678)); + p->push_back (PresetPoint (0.055, 0.783)); + p->push_back (PresetPoint (0.837, 0.35)); + p->push_back (PresetPoint (0.945, 0.222)); + p->push_back (PresetPoint (1.0, 0.0)); fade_out_presets->push_back (p); // p = new Preset ("linout.xpm"); - p = new Preset ("crossfade_out_dipped"); - p->push_back (PresetPoint (0, 1)); - p->push_back (PresetPoint (1, 0)); + p = new Preset ("Constant Power (-3dB cut)", "crossfade_out_constant"); + p->push_back (PresetPoint (0.000000, 1.000000)); + p->push_back (PresetPoint (0.166667, 0.948859)); + p->push_back (PresetPoint (0.333333, 0.851507)); + p->push_back (PresetPoint (0.500000, 0.707946)); + p->push_back (PresetPoint (0.666667, 0.518174)); + p->push_back (PresetPoint (0.833333, 0.282192)); + p->push_back (PresetPoint (1.000000, 0.000000)); 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 @@ -1036,7 +1079,7 @@ CrossfadeEditor::x_coordinate (double& xfract) const { xfract = min (1.0, xfract); xfract = max (0.0, xfract); - + return canvas_border + (xfract * effective_width()); } @@ -1295,3 +1338,44 @@ CrossfadeEditor::audition_left_dry_toggled () } } } + +bool +CrossfadeEditor::on_key_press_event (GdkEventKey *ev) +{ + return true; +} + +bool +CrossfadeEditor::on_key_release_event (GdkEventKey* ev) +{ + switch (ev->keyval) { + case GDK_Right: + if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) { + audition_right_dry_button.set_active (!audition_right_dry_button.get_active()); + } else { + audition_right_button.set_active (!audition_right_button.get_active()); + } + break; + + case GDK_Left: + if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) { + audition_left_dry_button.set_active (!audition_left_dry_button.get_active()); + } else { + audition_left_button.set_active (!audition_left_button.get_active()); + } + break; + + case GDK_space: + if (session.is_auditioning()) { + cancel_audition (); + } else { + audition_both_button.set_active (!audition_both_button.get_active()); + } + break; + + default: + break; + } + + return true; +}