Default_Play_Speed: 2nd attempt at varispeed GUI
This commit is contained in:
parent
45c57354ec
commit
d1941c9cbc
@ -485,9 +485,6 @@ private:
|
|||||||
void update_transport_clocks (samplepos_t pos);
|
void update_transport_clocks (samplepos_t pos);
|
||||||
void record_state_changed ();
|
void record_state_changed ();
|
||||||
|
|
||||||
ArdourWidgets::ArdourDropdown _varispeed_pulldown;
|
|
||||||
void set_default_play_spd_from_menu (double spd);
|
|
||||||
|
|
||||||
std::list<MidiTracer*> _midi_tracer_windows;
|
std::list<MidiTracer*> _midi_tracer_windows;
|
||||||
|
|
||||||
/* Transport Control */
|
/* Transport Control */
|
||||||
|
@ -102,8 +102,6 @@ ARDOUR_UI::setup_tooltips ()
|
|||||||
|
|
||||||
set_tip (latency_disable_button, _("Disable all Plugin Delay Compensation. This results in the shortest delay from live input to output, but any paths with delay-causing plugins will sound later than those without."));
|
set_tip (latency_disable_button, _("Disable all Plugin Delay Compensation. This results in the shortest delay from live input to output, but any paths with delay-causing plugins will sound later than those without."));
|
||||||
|
|
||||||
set_tip (_varispeed_pulldown, _("Varispeed: change the default playback and recording speed"));
|
|
||||||
|
|
||||||
synchronize_sync_source_and_video_pullup ();
|
synchronize_sync_source_and_video_pullup ();
|
||||||
|
|
||||||
editor->setup_tooltips ();
|
editor->setup_tooltips ();
|
||||||
@ -534,7 +532,7 @@ ARDOUR_UI::setup_transport ()
|
|||||||
ssbox->set_spacing (PX_SCALE(2));
|
ssbox->set_spacing (PX_SCALE(2));
|
||||||
ssbox->pack_start (sync_button, false, false, 0);
|
ssbox->pack_start (sync_button, false, false, 0);
|
||||||
ssbox->pack_start (shuttle_box, true, true, 0);
|
ssbox->pack_start (shuttle_box, true, true, 0);
|
||||||
ssbox->pack_start (_varispeed_pulldown, false, false, 0);
|
ssbox->pack_start (*shuttle_box.vari_button(), false, false, 0);
|
||||||
ssbox->pack_start (*shuttle_box.info_button(), false, false, 0);
|
ssbox->pack_start (*shuttle_box.info_button(), false, false, 0);
|
||||||
|
|
||||||
/* and the main table layout */
|
/* and the main table layout */
|
||||||
@ -636,20 +634,6 @@ ARDOUR_UI::setup_transport ()
|
|||||||
transport_table.attach (editor_visibility_button, TCOL, 0, 1 , FILL, SHRINK, hpadding, vpadding);
|
transport_table.attach (editor_visibility_button, TCOL, 0, 1 , FILL, SHRINK, hpadding, vpadding);
|
||||||
++col;
|
++col;
|
||||||
|
|
||||||
// _varispeed_pulldown.set_icon (ArdourIcon::RecButton);
|
|
||||||
_varispeed_pulldown.set_text(_("Vari"));
|
|
||||||
// _varispeed_pulldown.set_icon(record_tape_red);
|
|
||||||
_varispeed_pulldown.AddMenuElem (MenuElem (_("None"), sigc::bind (sigc::mem_fun(*this, &ARDOUR_UI::set_default_play_spd_from_menu), 1.0)));
|
|
||||||
_varispeed_pulldown.AddMenuElem (SeparatorElem());
|
|
||||||
_varispeed_pulldown.AddMenuElem (MenuElem (_("-10 cents"), sigc::bind (sigc::mem_fun(*this, &ARDOUR_UI::set_default_play_spd_from_menu), ShuttleControl::cents_as_speed(-10, false))));
|
|
||||||
_varispeed_pulldown.AddMenuElem (MenuElem (_("+10 cents"), sigc::bind (sigc::mem_fun(*this, &ARDOUR_UI::set_default_play_spd_from_menu), ShuttleControl::cents_as_speed(10, false))));
|
|
||||||
_varispeed_pulldown.AddMenuElem (SeparatorElem());
|
|
||||||
_varispeed_pulldown.AddMenuElem (MenuElem (_("-1 semitone"), sigc::bind (sigc::mem_fun(*this, &ARDOUR_UI::set_default_play_spd_from_menu), ShuttleControl::semitones_as_speed(-1, false))));
|
|
||||||
_varispeed_pulldown.AddMenuElem (MenuElem (_("+1 semitone"), sigc::bind (sigc::mem_fun(*this, &ARDOUR_UI::set_default_play_spd_from_menu), ShuttleControl::semitones_as_speed(1, false))));
|
|
||||||
_varispeed_pulldown.AddMenuElem (SeparatorElem());
|
|
||||||
_varispeed_pulldown.AddMenuElem (MenuElem (_("-1 octave"), sigc::bind (sigc::mem_fun(*this, &ARDOUR_UI::set_default_play_spd_from_menu), ShuttleControl::semitones_as_speed(-12, false))));
|
|
||||||
_varispeed_pulldown.AddMenuElem (MenuElem (_("+1 octave"), sigc::bind (sigc::mem_fun(*this, &ARDOUR_UI::set_default_play_spd_from_menu), ShuttleControl::semitones_as_speed(12, false))));
|
|
||||||
|
|
||||||
/* initialize */
|
/* initialize */
|
||||||
latency_switch_changed ();
|
latency_switch_changed ();
|
||||||
session_latency_updated (true);
|
session_latency_updated (true);
|
||||||
@ -769,12 +753,6 @@ ARDOUR_UI::layered_button_clicked ()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
ARDOUR_UI::set_default_play_spd_from_menu (double spd)
|
|
||||||
{
|
|
||||||
_session->set_default_play_speed(spd);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ARDOUR_UI::solo_blink (bool onoff)
|
ARDOUR_UI::solo_blink (bool onoff)
|
||||||
{
|
{
|
||||||
|
@ -45,6 +45,7 @@
|
|||||||
#include "rgb_macros.h"
|
#include "rgb_macros.h"
|
||||||
#include "shuttle_control.h"
|
#include "shuttle_control.h"
|
||||||
#include "timers.h"
|
#include "timers.h"
|
||||||
|
#include "transpose_dialog.h"
|
||||||
|
|
||||||
#include "pbd/i18n.h"
|
#include "pbd/i18n.h"
|
||||||
|
|
||||||
@ -177,6 +178,13 @@ ShuttleControl::ShuttleControl ()
|
|||||||
UIConfiguration::instance().ColorsChanged.connect (sigc::mem_fun (*this, &ShuttleControl::set_colors));
|
UIConfiguration::instance().ColorsChanged.connect (sigc::mem_fun (*this, &ShuttleControl::set_colors));
|
||||||
Timers::blink_connect (sigc::mem_fun (*this, &ShuttleControl::do_blink));
|
Timers::blink_connect (sigc::mem_fun (*this, &ShuttleControl::do_blink));
|
||||||
|
|
||||||
|
set_tooltip (_vari_button, _("Varispeed: change the default playback and recording speed"));
|
||||||
|
|
||||||
|
// _vari_button.set_icon (ArdourIcon::RecButton);
|
||||||
|
_vari_button.set_name ("vari button");
|
||||||
|
_vari_button.set_text(_("Vari"));
|
||||||
|
_vari_button.signal_clicked.connect (sigc::mem_fun (*this, &ShuttleControl::varispeed_button_clicked));
|
||||||
|
|
||||||
/* gtkmm 2.4: the C++ wrapper doesn't work */
|
/* gtkmm 2.4: the C++ wrapper doesn't work */
|
||||||
g_signal_connect ((GObject*) gobj(), "query-tooltip", G_CALLBACK (qt), NULL);
|
g_signal_connect ((GObject*) gobj(), "query-tooltip", G_CALLBACK (qt), NULL);
|
||||||
// signal_query_tooltip().connect (sigc::mem_fun (*this, &ShuttleControl::on_query_tooltip));
|
// signal_query_tooltip().connect (sigc::mem_fun (*this, &ShuttleControl::on_query_tooltip));
|
||||||
@ -189,13 +197,28 @@ ShuttleControl::~ShuttleControl ()
|
|||||||
delete shuttle_context_menu;
|
delete shuttle_context_menu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ShuttleControl::varispeed_button_clicked ()
|
||||||
|
{
|
||||||
|
_vari_dialog.set_session(_session);
|
||||||
|
if (_session->default_play_speed()==1.0) {
|
||||||
|
_vari_dialog.show_all ();
|
||||||
|
_vari_dialog.apply_speed ();
|
||||||
|
} else {
|
||||||
|
_session->set_default_play_speed(1.0);
|
||||||
|
_vari_dialog.hide ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ShuttleControl::do_blink (bool onoff)
|
ShuttleControl::do_blink (bool onoff)
|
||||||
{
|
{
|
||||||
if (!shuttle_grabbed && _session && _session->default_play_speed()!=1.0) {
|
if (!shuttle_grabbed && _session && _session->default_play_speed()!=1.0) {
|
||||||
_info_button.set_active(onoff);
|
_info_button.set_active(onoff);
|
||||||
|
_vari_button.set_active(onoff);
|
||||||
} else {
|
} else {
|
||||||
_info_button.set_active(false);
|
_info_button.set_active(false);
|
||||||
|
_vari_button.set_active(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,6 +32,8 @@
|
|||||||
#include "widgets/ardour_button.h"
|
#include "widgets/ardour_button.h"
|
||||||
#include "widgets/binding_proxy.h"
|
#include "widgets/binding_proxy.h"
|
||||||
|
|
||||||
|
#include "transpose_dialog.h"
|
||||||
|
|
||||||
namespace Gtk {
|
namespace Gtk {
|
||||||
class Menu;
|
class Menu;
|
||||||
}
|
}
|
||||||
@ -83,6 +85,7 @@ public:
|
|||||||
void set_colors ();
|
void set_colors ();
|
||||||
|
|
||||||
ArdourWidgets::ArdourButton* info_button () { return &_info_button; }
|
ArdourWidgets::ArdourButton* info_button () { return &_info_button; }
|
||||||
|
ArdourWidgets::ArdourButton* vari_button () { return &_vari_button; }
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static int speed_as_semitones (float, bool&);
|
static int speed_as_semitones (float, bool&);
|
||||||
@ -115,6 +118,10 @@ protected:
|
|||||||
void build_shuttle_context_menu ();
|
void build_shuttle_context_menu ();
|
||||||
void set_shuttle_max_speed (float);
|
void set_shuttle_max_speed (float);
|
||||||
|
|
||||||
|
VarispeedDialog _vari_dialog;
|
||||||
|
ArdourWidgets::ArdourButton _vari_button;
|
||||||
|
void varispeed_button_clicked ();
|
||||||
|
|
||||||
bool on_enter_notify_event (GdkEventCrossing*);
|
bool on_enter_notify_event (GdkEventCrossing*);
|
||||||
bool on_leave_notify_event (GdkEventCrossing*);
|
bool on_leave_notify_event (GdkEventCrossing*);
|
||||||
bool on_button_press_event (GdkEventButton*);
|
bool on_button_press_event (GdkEventButton*);
|
||||||
|
@ -387,7 +387,8 @@
|
|||||||
<ColorAlias name="shuttle" alias="widget:bg"/>
|
<ColorAlias name="shuttle" alias="widget:bg"/>
|
||||||
<ColorAlias name="shuttle bg" alias="neutral:backgroundest"/>
|
<ColorAlias name="shuttle bg" alias="neutral:backgroundest"/>
|
||||||
<ColorAlias name="shuttle text: fill" alias="neutral:foregroundest"/>
|
<ColorAlias name="shuttle text: fill" alias="neutral:foregroundest"/>
|
||||||
<ColorAlias name="shuttle text: fill active" alias="alert:red"/>
|
<ColorAlias name="vari button: fill" alias="widget:bg"/>
|
||||||
|
<ColorAlias name="vari button: fill active" alias="alert:ruddy"/>
|
||||||
<ColorAlias name="silence" alias="theme:contrasting alt"/>
|
<ColorAlias name="silence" alias="theme:contrasting alt"/>
|
||||||
<ColorAlias name="silence text" alias="neutral:foreground"/>
|
<ColorAlias name="silence text" alias="neutral:foreground"/>
|
||||||
<ColorAlias name="solo button: fill" alias="widget:bg"/>
|
<ColorAlias name="solo button: fill" alias="widget:bg"/>
|
||||||
|
@ -22,6 +22,8 @@
|
|||||||
#include "transpose_dialog.h"
|
#include "transpose_dialog.h"
|
||||||
#include "pbd/i18n.h"
|
#include "pbd/i18n.h"
|
||||||
|
|
||||||
|
#include <ardour/session.h>
|
||||||
|
|
||||||
using namespace Gtk;
|
using namespace Gtk;
|
||||||
|
|
||||||
TransposeDialog::TransposeDialog ()
|
TransposeDialog::TransposeDialog ()
|
||||||
@ -60,3 +62,78 @@ TransposeDialog::semitones () const
|
|||||||
{
|
{
|
||||||
return _octaves_spinner.get_value () * 12 + _semitones_spinner.get_value ();
|
return _octaves_spinner.get_value () * 12 + _semitones_spinner.get_value ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
VarispeedDialog::VarispeedDialog ()
|
||||||
|
: ArdourDialog (_("Varispeed"))
|
||||||
|
, _octaves_adjustment (0.0, -4.0, 4.0, 1, 2.0)
|
||||||
|
, _semitones_adjustment (0.0, -12.0, 12.0, 1.0, 4.0)
|
||||||
|
, _cents_adjustment (0.0, -100.0, 100.0, 1.0, 10.0)
|
||||||
|
, _octaves_spinner (_octaves_adjustment)
|
||||||
|
, _semitones_spinner (_semitones_adjustment)
|
||||||
|
, _cents_spinner (_cents_adjustment)
|
||||||
|
{
|
||||||
|
set_modal(false);
|
||||||
|
|
||||||
|
Table* t = manage (new Table (3, 2));
|
||||||
|
t->set_row_spacings (6);
|
||||||
|
t->set_col_spacings (6);
|
||||||
|
|
||||||
|
int r = 0;
|
||||||
|
Label* l = manage (new Label (_("Octaves:"), ALIGN_LEFT, ALIGN_CENTER, false));
|
||||||
|
t->attach (*l, 0, 1, r, r + 1, FILL, EXPAND, 0, 0);
|
||||||
|
t->attach (_octaves_spinner, 1, 2, r, r + 1, FILL, EXPAND & FILL, 0, 0);
|
||||||
|
++r;
|
||||||
|
|
||||||
|
l = manage (new Label (_("Semitones:"), ALIGN_LEFT, ALIGN_CENTER, false));
|
||||||
|
t->attach (*l, 0, 1, r, r + 1, FILL, EXPAND, 0, 0);
|
||||||
|
t->attach (_semitones_spinner, 1, 2, r, r + 1, FILL, EXPAND & FILL, 0, 0);
|
||||||
|
++r;
|
||||||
|
|
||||||
|
l = manage (new Label (_("Cents:"), ALIGN_LEFT, ALIGN_CENTER, false));
|
||||||
|
t->attach (*l, 0, 1, r, r + 1, FILL, EXPAND, 0, 0);
|
||||||
|
t->attach (_cents_spinner, 1, 2, r, r + 1, FILL, EXPAND & FILL, 0, 0);
|
||||||
|
++r;
|
||||||
|
|
||||||
|
get_vbox()->set_spacing (6);
|
||||||
|
get_vbox()->pack_start (*t, false, false);
|
||||||
|
|
||||||
|
// add_button (Stock::CANCEL, RESPONSE_CANCEL);
|
||||||
|
// add_button (_("Transpose"), RESPONSE_ACCEPT);
|
||||||
|
|
||||||
|
_octaves_spinner.signal_changed().connect (sigc::mem_fun (*this, &VarispeedDialog::apply_speed));
|
||||||
|
_semitones_spinner.signal_changed().connect (sigc::mem_fun (*this, &VarispeedDialog::apply_speed));
|
||||||
|
_cents_spinner.signal_changed().connect (sigc::mem_fun (*this, &VarispeedDialog::apply_speed));
|
||||||
|
|
||||||
|
show_all_children ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
VarispeedDialog::reset ()
|
||||||
|
{
|
||||||
|
_octaves_spinner.set_value(0);
|
||||||
|
_semitones_spinner.set_value(0);
|
||||||
|
_cents_spinner.set_value(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
VarispeedDialog::apply_speed ()
|
||||||
|
{
|
||||||
|
int cents = _octaves_spinner.get_value () * 12 * 100 + _semitones_spinner.get_value () * 100 + _cents_spinner.get_value ();
|
||||||
|
|
||||||
|
double speed = pow (2.0, ((double)cents / (double)1200.0));
|
||||||
|
|
||||||
|
if (_session) {
|
||||||
|
_session->set_default_play_speed(speed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
VarispeedDialog::on_hide ()
|
||||||
|
{
|
||||||
|
_session->set_default_play_speed(1.0);
|
||||||
|
ArdourDialog::on_hide();
|
||||||
|
}
|
||||||
|
@ -16,9 +16,14 @@
|
|||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef __ardour_transpose_dialog_h__
|
||||||
|
#define __ardour_transpose_dialog_h__
|
||||||
|
|
||||||
#include <gtkmm/spinbutton.h>
|
#include <gtkmm/spinbutton.h>
|
||||||
#include "ardour_dialog.h"
|
#include "ardour_dialog.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** A dialog box to select a transposition to apply to a MIDI region.
|
/** A dialog box to select a transposition to apply to a MIDI region.
|
||||||
* It asks for octaves and semitones, with the transposition being
|
* It asks for octaves and semitones, with the transposition being
|
||||||
* the sum of the two.
|
* the sum of the two.
|
||||||
@ -37,3 +42,28 @@ private:
|
|||||||
Gtk::SpinButton _octaves_spinner;
|
Gtk::SpinButton _octaves_spinner;
|
||||||
Gtk::SpinButton _semitones_spinner;
|
Gtk::SpinButton _semitones_spinner;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/** A dialog box to select a speed change for "varispeed" recording/playback.
|
||||||
|
* It asks for octaves, semitones, and cents, and sums them to report 'speed'
|
||||||
|
*/
|
||||||
|
|
||||||
|
class VarispeedDialog : public ArdourDialog
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
VarispeedDialog ();
|
||||||
|
|
||||||
|
void reset ();
|
||||||
|
void apply_speed ();
|
||||||
|
void on_hide ();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Gtk::Adjustment _octaves_adjustment;
|
||||||
|
Gtk::Adjustment _semitones_adjustment;
|
||||||
|
Gtk::Adjustment _cents_adjustment;
|
||||||
|
Gtk::SpinButton _octaves_spinner;
|
||||||
|
Gtk::SpinButton _semitones_spinner;
|
||||||
|
Gtk::SpinButton _cents_spinner;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* __ardour_transpose_dialog_h__ */
|
||||||
|
Loading…
Reference in New Issue
Block a user