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 record_state_changed ();
|
||||
|
||||
ArdourWidgets::ArdourDropdown _varispeed_pulldown;
|
||||
void set_default_play_spd_from_menu (double spd);
|
||||
|
||||
std::list<MidiTracer*> _midi_tracer_windows;
|
||||
|
||||
/* 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 (_varispeed_pulldown, _("Varispeed: change the default playback and recording speed"));
|
||||
|
||||
synchronize_sync_source_and_video_pullup ();
|
||||
|
||||
editor->setup_tooltips ();
|
||||
@ -534,7 +532,7 @@ ARDOUR_UI::setup_transport ()
|
||||
ssbox->set_spacing (PX_SCALE(2));
|
||||
ssbox->pack_start (sync_button, false, false, 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);
|
||||
|
||||
/* 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);
|
||||
++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 */
|
||||
latency_switch_changed ();
|
||||
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
|
||||
ARDOUR_UI::solo_blink (bool onoff)
|
||||
{
|
||||
|
@ -45,6 +45,7 @@
|
||||
#include "rgb_macros.h"
|
||||
#include "shuttle_control.h"
|
||||
#include "timers.h"
|
||||
#include "transpose_dialog.h"
|
||||
|
||||
#include "pbd/i18n.h"
|
||||
|
||||
@ -177,6 +178,13 @@ ShuttleControl::ShuttleControl ()
|
||||
UIConfiguration::instance().ColorsChanged.connect (sigc::mem_fun (*this, &ShuttleControl::set_colors));
|
||||
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 */
|
||||
g_signal_connect ((GObject*) gobj(), "query-tooltip", G_CALLBACK (qt), NULL);
|
||||
// signal_query_tooltip().connect (sigc::mem_fun (*this, &ShuttleControl::on_query_tooltip));
|
||||
@ -189,13 +197,28 @@ ShuttleControl::~ShuttleControl ()
|
||||
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
|
||||
ShuttleControl::do_blink (bool onoff)
|
||||
{
|
||||
if (!shuttle_grabbed && _session && _session->default_play_speed()!=1.0) {
|
||||
_info_button.set_active(onoff);
|
||||
_vari_button.set_active(onoff);
|
||||
} else {
|
||||
_info_button.set_active(false);
|
||||
_vari_button.set_active(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -32,6 +32,8 @@
|
||||
#include "widgets/ardour_button.h"
|
||||
#include "widgets/binding_proxy.h"
|
||||
|
||||
#include "transpose_dialog.h"
|
||||
|
||||
namespace Gtk {
|
||||
class Menu;
|
||||
}
|
||||
@ -83,6 +85,7 @@ public:
|
||||
void set_colors ();
|
||||
|
||||
ArdourWidgets::ArdourButton* info_button () { return &_info_button; }
|
||||
ArdourWidgets::ArdourButton* vari_button () { return &_vari_button; }
|
||||
|
||||
public:
|
||||
static int speed_as_semitones (float, bool&);
|
||||
@ -115,6 +118,10 @@ protected:
|
||||
void build_shuttle_context_menu ();
|
||||
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_leave_notify_event (GdkEventCrossing*);
|
||||
bool on_button_press_event (GdkEventButton*);
|
||||
|
@ -387,7 +387,8 @@
|
||||
<ColorAlias name="shuttle" alias="widget:bg"/>
|
||||
<ColorAlias name="shuttle bg" alias="neutral:backgroundest"/>
|
||||
<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 text" alias="neutral:foreground"/>
|
||||
<ColorAlias name="solo button: fill" alias="widget:bg"/>
|
||||
|
@ -22,6 +22,8 @@
|
||||
#include "transpose_dialog.h"
|
||||
#include "pbd/i18n.h"
|
||||
|
||||
#include <ardour/session.h>
|
||||
|
||||
using namespace Gtk;
|
||||
|
||||
TransposeDialog::TransposeDialog ()
|
||||
@ -60,3 +62,78 @@ TransposeDialog::semitones () const
|
||||
{
|
||||
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.
|
||||
*/
|
||||
|
||||
#ifndef __ardour_transpose_dialog_h__
|
||||
#define __ardour_transpose_dialog_h__
|
||||
|
||||
#include <gtkmm/spinbutton.h>
|
||||
#include "ardour_dialog.h"
|
||||
|
||||
|
||||
|
||||
/** A dialog box to select a transposition to apply to a MIDI region.
|
||||
* It asks for octaves and semitones, with the transposition being
|
||||
* the sum of the two.
|
||||
@ -37,3 +42,28 @@ private:
|
||||
Gtk::SpinButton _octaves_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