X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fcrossfade_edit.cc;h=19723b6241a28b9fa1afc2e02fe36a9bbff2feab;hb=9153ef32975efb86cc1609d72a0ea1ebd149faab;hp=3e85bd22db443c08dbc77e21bf73e8ef41e78493;hpb=d8ade6d30595a3a8be343b392e47d422940eac27;p=ardour.git diff --git a/gtk2_ardour/crossfade_edit.cc b/gtk2_ardour/crossfade_edit.cc index 3e85bd22db..19723b6241 100644 --- a/gtk2_ardour/crossfade_edit.cc +++ b/gtk2_ardour/crossfade_edit.cc @@ -27,15 +27,15 @@ #include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include "ardour/automation_list.h" +#include "evoral/Curve.hpp" +#include "ardour/crossfade.h" +#include "ardour/session.h" +#include "ardour/auditioner.h" +#include "ardour/audioplaylist.h" +#include "ardour/audiosource.h" +#include "ardour/region_factory.h" +#include "ardour/profile.h" #include @@ -48,6 +48,7 @@ #include "canvas_impl.h" #include "simplerect.h" #include "waveview.h" +#include "actions.h" using namespace std; using namespace ARDOUR; @@ -64,9 +65,9 @@ CrossfadeEditor::Presets* CrossfadeEditor::fade_in_presets = 0; 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)) + : line (0) + , normative_curve (Evoral::Parameter(GainAutomation)) + , gain_curve (Evoral::Parameter(GainAutomation)) { } @@ -98,6 +99,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 +200,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 +222,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); @@ -397,7 +402,7 @@ CrossfadeEditor::point_event (GdkEvent* event, Point* point) if (Keyboard::is_delete_event (&event->button)) { fade[current].points.remove (point); delete point; - } + } redraw (); break; @@ -505,7 +510,7 @@ CrossfadeEditor::Point::move_to (double nx, double ny, double xfract, double yfr } void -CrossfadeEditor::canvas_allocation (Gtk::Allocation& alloc) +CrossfadeEditor::canvas_allocation (Gtk::Allocation& /*alloc*/) { if (toplevel) { toplevel->property_x1() = 0.0; @@ -617,7 +622,7 @@ CrossfadeEditor::canvas_allocation (Gtk::Allocation& alloc) void -CrossfadeEditor::xfade_changed (Change ignored) +CrossfadeEditor::xfade_changed (Change) { set (xfade->fade_in(), In); set (xfade->fade_out(), Out); @@ -719,7 +724,7 @@ CrossfadeEditor::redraw () fade[current].shading->property_points() = spts; for (vector::iterator i = fade[current].waves.begin(); i != fade[current].waves.end(); ++i) { - (*i)->property_gain_src() = &fade[current].gain_curve; + (*i)->property_gain_src() = static_cast(&fade[current].gain_curve.curve()); } } @@ -851,59 +856,20 @@ CrossfadeEditor::build_presets () fade_in_presets = new 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); + /* FADE IN */ - // p = new Preset ("regin.xpm"); - p = new Preset ("crossfade_in_constant"); + p = new Preset ("Linear (-6dB)", "crossfade-in-linear"); 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)); + 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 ("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->push_back (PresetPoint (0, 0)); - p->push_back (PresetPoint (1, 1)); - fade_in_presets->push_back (p); - - p = new Preset ("crossfade_in_default"); + p = new Preset ("S(1)-curve", "crossfade-in-S1"); p->push_back (PresetPoint (0, 0)); p->push_back (PresetPoint (0.1, 0.01)); p->push_back (PresetPoint (0.2, 0.03)); @@ -911,66 +877,158 @@ 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-S2"); + 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-power"); + + 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 ("Short cut", "crossfade-in-short-cut"); + 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 ("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); + + p = new Preset ("Fast cut", "crossfade-in-fast-cut"); + 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 ("Long cut", "crossfade-in-long-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); + } /* 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-linear"); 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-S1"); 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-S2"); + 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-power"); + 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 ("Short cut", "crossfade-out-short-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 ("Slow cut", "crossfade-out-slow-cut"); + 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 (1, 0)); + fade_out_presets->push_back (p); + + p = new Preset ("Fast cut", "crossfade-out-fast-cut"); + 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); + + // p = new Preset ("loout.xpm"); + p = new Preset ("Long cut", "crossfade-out-long-cut"); + 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); + + } } void @@ -1036,7 +1094,7 @@ CrossfadeEditor::x_coordinate (double& xfract) const { xfract = min (1.0, xfract); xfract = max (0.0, xfract); - + return canvas_border + (xfract * effective_width()); } @@ -1081,7 +1139,7 @@ CrossfadeEditor::make_waves (boost::shared_ptr region, WhichFade wh waveview->property_sourcefile_length_function() = (void*) sourcefile_length_from_c; waveview->property_peak_function() = (void*) region_read_peaks_from_c; waveview->property_gain_function() = (void*) curve_get_vector_from_c; - waveview->property_gain_src() = &fade[which].gain_curve; + waveview->property_gain_src() = static_cast(&fade[which].gain_curve.curve()); waveview->property_x() = canvas_border; waveview->property_y() = yoff; waveview->property_height() = ht; @@ -1175,7 +1233,7 @@ CrossfadeEditor::audition (Audition which) } /* there is only one ... */ - pl.foreach_crossfade (this, &CrossfadeEditor::setup); + pl.foreach_crossfade (sigc::mem_fun (*this, &CrossfadeEditor::setup)); session.audition_playlist (); } @@ -1295,3 +1353,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; +}