Merge branch 'master' into cairocanvas
This commit is contained in:
commit
36c233fe6c
@ -56,6 +56,7 @@ AddRouteDialog::AddRouteDialog ()
|
||||
, configuration_label (_("Configuration:"))
|
||||
, mode_label (_("Track mode:"))
|
||||
, instrument_label (_("Instrument:"))
|
||||
, reasonable_synth_id(0)
|
||||
{
|
||||
set_name ("AddRouteDialog");
|
||||
set_modal (true);
|
||||
@ -82,7 +83,7 @@ AddRouteDialog::AddRouteDialog ()
|
||||
build_instrument_list ();
|
||||
instrument_combo.set_model (instrument_list);
|
||||
instrument_combo.pack_start (instrument_list_columns.name);
|
||||
instrument_combo.set_active (0);
|
||||
instrument_combo.set_active (reasonable_synth_id);
|
||||
instrument_combo.set_button_sensitivity (Gtk::SENSITIVITY_AUTO);
|
||||
|
||||
VBox* vbox = manage (new VBox);
|
||||
@ -587,6 +588,7 @@ AddRouteDialog::build_instrument_list ()
|
||||
row[instrument_list_columns.info_ptr] = PluginInfoPtr ();
|
||||
row[instrument_list_columns.name] = _("-none-");
|
||||
|
||||
uint32_t n = 1;
|
||||
for (PluginInfoList::const_iterator i = all_plugs.begin(); i != all_plugs.end(); ++i) {
|
||||
|
||||
if (manager.get_status (*i) == PluginManager::Hidden) continue;
|
||||
@ -595,6 +597,10 @@ AddRouteDialog::build_instrument_list ()
|
||||
row = *(instrument_list->append());
|
||||
row[instrument_list_columns.name] = (*i)->name;
|
||||
row[instrument_list_columns.info_ptr] = *i;
|
||||
if ((*i)->unique_id == "https://community.ardour.org/node/7596") {
|
||||
reasonable_synth_id = n;
|
||||
}
|
||||
n++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -122,6 +122,7 @@ class AddRouteDialog : public ArdourDialog
|
||||
InstrumentListColumns instrument_list_columns;
|
||||
|
||||
void build_instrument_list ();
|
||||
uint32_t reasonable_synth_id;
|
||||
};
|
||||
|
||||
#endif /* __gtk_ardour_add_route_dialog_h__ */
|
||||
|
@ -731,6 +731,19 @@ style "midi_track_base" = "default"
|
||||
bg[SELECTED] = @@COLPREFIX@_bg
|
||||
}
|
||||
|
||||
style "audio_track_fader" = "gain_fader"
|
||||
{
|
||||
bg[PRELIGHT] = @@COLPREFIX@_audio_track
|
||||
}
|
||||
style "audio_bus_fader" = "gain_fader"
|
||||
{
|
||||
bg[PRELIGHT] = @@COLPREFIX@_audio_bus
|
||||
}
|
||||
style "midi_track_fader" = "gain_fader"
|
||||
{
|
||||
bg[PRELIGHT] = @@COLPREFIX@_midi_track
|
||||
}
|
||||
|
||||
style "audio_track_metrics" = "audio_track_base"
|
||||
{
|
||||
font_name = "@FONT_TINY@"
|
||||
@ -815,7 +828,9 @@ style "plugin_slider"
|
||||
bg[ACTIVE] = shade (0.6, @@COLPREFIX@_lightest)
|
||||
bg[INSENSITIVE] = shade (0.6, @@COLPREFIX@_lightest)
|
||||
bg[SELECTED] = shade (0.6, @@COLPREFIX@_lightest)
|
||||
bg[PRELIGHT] = shade (0.6, @@COLPREFIX@_lightest)
|
||||
|
||||
# outer round-corner-background (pixslider does its own hover prelight)
|
||||
bg[PRELIGHT] = @@COLPREFIX@_bg
|
||||
|
||||
# the numeric display
|
||||
|
||||
@ -826,6 +841,16 @@ style "plugin_slider"
|
||||
text[PRELIGHT] = @@COLPREFIX@_text
|
||||
}
|
||||
|
||||
style "processor_control_button" = "very_small_text"
|
||||
{
|
||||
}
|
||||
|
||||
style "processor_control_slider" = "plugin_slider"
|
||||
{
|
||||
bg[PRELIGHT] = @@COLPREFIX@_darkest
|
||||
bg[NORMAL] = @@COLPREFIX@_bg
|
||||
}
|
||||
|
||||
style "track_list_display" = "small_bold_text"
|
||||
{
|
||||
text[NORMAL] = @@COLPREFIX@_text
|
||||
|
@ -187,12 +187,12 @@
|
||||
<Option name="processor postfader: led active" value="78cb4eff"/>
|
||||
<Option name="processor postfader: text" value="aaaaa3ff"/>
|
||||
<Option name="processor postfader: text active" value="eeeeecff"/>
|
||||
<Option name="processor control button: fill start" value="000000ff"/>
|
||||
<Option name="processor control button: fill end" value="000000ff"/>
|
||||
<Option name="processor control button: fill start active" value="000000ff"/>
|
||||
<Option name="processor control button: fill end active" value="000000ff"/>
|
||||
<Option name="processor control button: led" value="000000ff"/>
|
||||
<Option name="processor control button: led active" value="ff0000ff"/>
|
||||
<Option name="processor control button: fill start" value="222222ff"/>
|
||||
<Option name="processor control button: fill end" value="333333ff"/>
|
||||
<Option name="processor control button: fill start active" value="444444ff"/>
|
||||
<Option name="processor control button: fill end active" value="333333ff"/>
|
||||
<Option name="processor control button: led" value="224400ff"/>
|
||||
<Option name="processor control button: led active" value="99cc00ff"/>
|
||||
<Option name="processor control button: text" value="ffffffff"/>
|
||||
<Option name="processor control button: text active" value="ffffffff"/>
|
||||
<Option name="monitor button: fill start" value="5f5a58ff"/>
|
||||
|
@ -186,9 +186,13 @@ widget "*AudioMidiTrackMetricsInactive" style:highest "midi_track_metrics_inacti
|
||||
widget "*TimeAxisViewControlsBaseUnselected" style:highest "audio_track_base"
|
||||
widget "*AudioTrackControlsBaseUnselected" style:highest "audio_track_base"
|
||||
widget "*MidiTrackControlsBaseUnselected" style:highest "midi_track_base"
|
||||
widget "*AudioTrackFader" style:highest "gain_fader"
|
||||
widget "*MidiTrackFader" style:highest "gain_fader"
|
||||
widget "*AudioBusFader" style:highest "gain_fader"
|
||||
|
||||
widget "*SendUIFader" style:highest "plugin_slider"
|
||||
widget "*ReturnUIFader" style:highest "plugin_slider"
|
||||
|
||||
widget "*AudioTrackFader" style:highest "audio_track_fader"
|
||||
widget "*MidiTrackFader" style:highest "midi_track_fader"
|
||||
widget "*AudioBusFader" style:highest "audio_bus_fader"
|
||||
|
||||
widget "*BusControlsBaseUnselected" style:highest "audio_bus_base"
|
||||
widget "*TrackSeparator" style:highest "track_separator"
|
||||
@ -234,6 +238,8 @@ widget "*MotionControllerValue*" style:highest "small_entry"
|
||||
widget "*ParameterValueDisplay" style:highest "medium_bold_entry"
|
||||
widget "*PluginUIClickBox" style:highest "medium_bold_entry"
|
||||
widget "*PluginUIClickBox*" style:highest "medium_bold_entry"
|
||||
widget "*ProcessorControlSlider" style:highest "processor_control_slider"
|
||||
widget "*processor control button" style:highest "processor_control_button"
|
||||
widget "*PluginSlider" style:highest "plugin_slider"
|
||||
widget "*GainFader" style:highest "plugin_slider"
|
||||
widget "*MixerTrackCommentArea" style:highest "option_entry"
|
||||
|
@ -302,6 +302,9 @@ ArdourButton::render (cairo_t* cr)
|
||||
}
|
||||
|
||||
if ( ((_elements & Text)==Text) && !_text.empty()) {
|
||||
cairo_save (cr);
|
||||
cairo_rectangle (cr, 2, 1, get_width()-4, get_height()-2);
|
||||
cairo_clip(cr);
|
||||
|
||||
cairo_new_path (cr);
|
||||
cairo_set_source_rgba (cr, text_r, text_g, text_b, text_a);
|
||||
@ -342,7 +345,7 @@ ArdourButton::render (cairo_t* cr)
|
||||
/* use old center'ed layout for follow up items - until rotation/aligment code is completed */
|
||||
cairo_move_to (cr, (get_width() - _text_width)/2.0, get_height()/2.0 - _text_height/2.0);
|
||||
}
|
||||
|
||||
cairo_restore (cr);
|
||||
}
|
||||
|
||||
if (((_elements & Indicator)==Indicator)) {
|
||||
@ -472,6 +475,7 @@ ArdourButton::on_size_request (Gtk::Requisition* req)
|
||||
req->height = _text_height + ypad;
|
||||
}
|
||||
}
|
||||
req->width += _corner_radius;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -133,17 +133,19 @@ Editor::show_editor_mixer (bool yn)
|
||||
if (current_mixer_strip == 0) {
|
||||
create_editor_mixer ();
|
||||
}
|
||||
|
||||
current_mixer_strip->set_route (r);
|
||||
current_mixer_strip->set_width_enum (editor_mixer_strip_width, (void*) this);
|
||||
}
|
||||
|
||||
if (current_mixer_strip->get_parent() == 0) {
|
||||
if (current_mixer_strip && current_mixer_strip->get_parent() == 0) {
|
||||
global_hpacker.pack_start (*current_mixer_strip, Gtk::PACK_SHRINK );
|
||||
global_hpacker.reorder_child (*current_mixer_strip, 0);
|
||||
current_mixer_strip->show ();
|
||||
}
|
||||
|
||||
if (r) {
|
||||
current_mixer_strip->set_route (r);
|
||||
current_mixer_strip->set_width_enum (editor_mixer_strip_width, (void*) this);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
if (current_mixer_strip) {
|
||||
|
@ -38,6 +38,7 @@
|
||||
#include <gtkmm2ext/choice.h>
|
||||
#include <gtkmm2ext/utils.h>
|
||||
#include <gtkmm2ext/doi.h>
|
||||
#include <gtkmm2ext/rgb_macros.h>
|
||||
|
||||
#include "ardour/amp.h"
|
||||
#include "ardour/audio_track.h"
|
||||
@ -91,6 +92,9 @@ RefPtr<Action> ProcessorBox::rename_action;
|
||||
RefPtr<Action> ProcessorBox::edit_action;
|
||||
RefPtr<Action> ProcessorBox::edit_generic_action;
|
||||
|
||||
static const uint32_t audio_port_color = 0x4A8A0EFF; // Green
|
||||
static const uint32_t midi_port_color = 0x960909FF; //Red
|
||||
|
||||
ProcessorEntry::ProcessorEntry (ProcessorBox* parent, boost::shared_ptr<Processor> p, Width w)
|
||||
: _button (ArdourButton::led_default_elements)
|
||||
, _position (PreFader)
|
||||
@ -98,6 +102,8 @@ ProcessorEntry::ProcessorEntry (ProcessorBox* parent, boost::shared_ptr<Processo
|
||||
, _processor (p)
|
||||
, _width (w)
|
||||
, _visual_state (Gtk::STATE_NORMAL)
|
||||
, _input_icon(true)
|
||||
, _output_icon(false)
|
||||
{
|
||||
_vbox.show ();
|
||||
|
||||
@ -109,18 +115,37 @@ ProcessorEntry::ProcessorEntry (ProcessorBox* parent, boost::shared_ptr<Processo
|
||||
|
||||
if (_processor) {
|
||||
|
||||
_vbox.pack_start (_routing_icon);
|
||||
_vbox.pack_start (_input_icon);
|
||||
_vbox.pack_start (_button, true, true);
|
||||
_vbox.pack_end (_output_icon);
|
||||
|
||||
_button.set_active (_processor->active());
|
||||
|
||||
_routing_icon.set_no_show_all(true);
|
||||
_input_icon.set_no_show_all(true);
|
||||
|
||||
_button.show ();
|
||||
_routing_icon.set_visible(false);
|
||||
_input_icon.hide();
|
||||
_output_icon.show();
|
||||
|
||||
_processor->ActiveChanged.connect (active_connection, invalidator (*this), boost::bind (&ProcessorEntry::processor_active_changed, this), gui_context());
|
||||
_processor->PropertyChanged.connect (name_connection, invalidator (*this), boost::bind (&ProcessorEntry::processor_property_changed, this, _1), gui_context());
|
||||
_processor->ConfigurationChanged.connect (config_connection, invalidator (*this), boost::bind (&ProcessorEntry::processor_configuration_changed, this, _1, _2), gui_context());
|
||||
|
||||
set<Evoral::Parameter> p = _processor->what_can_be_automated ();
|
||||
for (set<Evoral::Parameter>::iterator i = p.begin(); i != p.end(); ++i) {
|
||||
|
||||
Control* c = new Control (_processor->automation_control (*i), _processor->describe_parameter (*i));
|
||||
std::string label = _processor->describe_parameter (*i);
|
||||
|
||||
if (boost::dynamic_pointer_cast<Send> (_processor)) {
|
||||
label = _("Send");
|
||||
} else if (boost::dynamic_pointer_cast<Return> (_processor)) {
|
||||
label = _("Return");
|
||||
}
|
||||
|
||||
Control* c = new Control (_processor->automation_control (*i), label);
|
||||
|
||||
_controls.push_back (c);
|
||||
|
||||
@ -128,13 +153,14 @@ ProcessorEntry::ProcessorEntry (ProcessorBox* parent, boost::shared_ptr<Processo
|
||||
/* Add non-Amp controls to the processor box */
|
||||
_vbox.pack_start (c->box);
|
||||
}
|
||||
|
||||
if (boost::dynamic_pointer_cast<Send> (_processor)) {
|
||||
/* Don't label send faders */
|
||||
c->hide_label ();
|
||||
}
|
||||
}
|
||||
|
||||
_input_icon.set_ports(_processor->input_streams());
|
||||
_output_icon.set_ports(_processor->output_streams());
|
||||
|
||||
_routing_icon.set_sources(_processor->input_streams());
|
||||
_routing_icon.set_sinks(_processor->output_streams());
|
||||
|
||||
setup_tooltip ();
|
||||
setup_visuals ();
|
||||
} else {
|
||||
@ -168,9 +194,17 @@ ProcessorEntry::drag_text () const
|
||||
}
|
||||
|
||||
void
|
||||
ProcessorEntry::set_position (Position p)
|
||||
ProcessorEntry::set_position (Position p, uint32_t num)
|
||||
{
|
||||
_position = p;
|
||||
_position_num = num;
|
||||
|
||||
if (_position_num == 0 || _routing_icon.get_visible()) {
|
||||
_input_icon.show();
|
||||
} else {
|
||||
_input_icon.hide();
|
||||
}
|
||||
|
||||
setup_visuals ();
|
||||
}
|
||||
|
||||
@ -245,6 +279,18 @@ ProcessorEntry::processor_property_changed (const PropertyChange& what_changed)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ProcessorEntry::processor_configuration_changed (const ChanCount in, const ChanCount out)
|
||||
{
|
||||
_input_icon.set_ports(in);
|
||||
_output_icon.set_ports(out);
|
||||
_routing_icon.set_sources(in);
|
||||
_routing_icon.set_sinks(out);
|
||||
_input_icon.queue_draw();
|
||||
_output_icon.queue_draw();
|
||||
_routing_icon.queue_draw();
|
||||
}
|
||||
|
||||
void
|
||||
ProcessorEntry::setup_tooltip ()
|
||||
{
|
||||
@ -402,18 +448,19 @@ ProcessorEntry::Control::Control (boost::shared_ptr<AutomationControl> c, string
|
||||
, _adjustment (gain_to_slider_position_with_max (1.0, Config->get_max_gain()), 0, 1, 0.01, 0.1)
|
||||
, _slider (&_adjustment, 0, 13, false)
|
||||
, _slider_persistant_tooltip (&_slider)
|
||||
, _button (ArdourButton::Element (ArdourButton::Text | ArdourButton::Indicator))
|
||||
, _button (ArdourButton::led_default_elements)
|
||||
, _ignore_ui_adjustment (false)
|
||||
, _visible (false)
|
||||
, _name (n)
|
||||
{
|
||||
_slider.set_controllable (c);
|
||||
box.set_padding(0, 0, 4, 4);
|
||||
|
||||
if (c->toggled()) {
|
||||
_button.set_text (_name);
|
||||
_button.set_led_left (true);
|
||||
_button.set_name ("processor control button");
|
||||
box.pack_start (_button);
|
||||
box.add (_button);
|
||||
_button.show ();
|
||||
|
||||
_button.signal_clicked.connect (sigc::mem_fun (*this, &Control::button_clicked));
|
||||
@ -422,10 +469,10 @@ ProcessorEntry::Control::Control (boost::shared_ptr<AutomationControl> c, string
|
||||
|
||||
} else {
|
||||
|
||||
_slider.set_name ("PluginSlider");
|
||||
_slider.set_name ("ProcessorControlSlider");
|
||||
_slider.set_text (_name);
|
||||
|
||||
box.pack_start (_slider);
|
||||
box.add (_slider);
|
||||
_slider.show ();
|
||||
|
||||
double const lo = c->internal_to_interface (c->lower ());
|
||||
@ -470,7 +517,6 @@ ProcessorEntry::Control::set_tooltip ()
|
||||
|
||||
string sm = Glib::Markup::escape_text (s.str());
|
||||
|
||||
ARDOUR_UI::instance()->set_tip (_label, sm);
|
||||
_slider_persistant_tooltip.set_tip (sm);
|
||||
ARDOUR_UI::instance()->set_tip (_button, sm);
|
||||
}
|
||||
@ -505,6 +551,7 @@ ProcessorEntry::Control::button_clicked ()
|
||||
|
||||
c->set_value (n ? 0 : 1);
|
||||
_button.set_active (!n);
|
||||
set_tooltip ();
|
||||
}
|
||||
|
||||
void
|
||||
@ -578,12 +625,6 @@ ProcessorEntry::Control::hide_things ()
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ProcessorEntry::Control::hide_label ()
|
||||
{
|
||||
_label.hide ();
|
||||
}
|
||||
|
||||
string
|
||||
ProcessorEntry::Control::state_id () const
|
||||
{
|
||||
@ -593,11 +634,6 @@ ProcessorEntry::Control::state_id () const
|
||||
return string_compose (X_("control %1"), c->id().to_s ());
|
||||
}
|
||||
|
||||
BlankProcessorEntry::BlankProcessorEntry (ProcessorBox* b, Width w)
|
||||
: ProcessorEntry (b, boost::shared_ptr<Processor>(), w)
|
||||
{
|
||||
}
|
||||
|
||||
PluginInsertProcessorEntry::PluginInsertProcessorEntry (ProcessorBox* b, boost::shared_ptr<ARDOUR::PluginInsert> p, Width w)
|
||||
: ProcessorEntry (b, p, w)
|
||||
, _plugin_insert (p)
|
||||
@ -606,31 +642,52 @@ PluginInsertProcessorEntry::PluginInsertProcessorEntry (ProcessorBox* b, boost::
|
||||
_splitting_connection, invalidator (*this), boost::bind (&PluginInsertProcessorEntry::plugin_insert_splitting_changed, this), gui_context()
|
||||
);
|
||||
|
||||
_splitting_icon.set_size_request (-1, 12);
|
||||
|
||||
_vbox.pack_start (_splitting_icon);
|
||||
_vbox.reorder_child (_splitting_icon, 0);
|
||||
|
||||
plugin_insert_splitting_changed ();
|
||||
}
|
||||
|
||||
void
|
||||
PluginInsertProcessorEntry::plugin_insert_splitting_changed ()
|
||||
{
|
||||
_splitting_icon.set_inputs(_plugin_insert->input_streams());
|
||||
_splitting_icon.set_outputs(_plugin_insert->output_streams());
|
||||
_output_icon.set_ports(_plugin_insert->output_streams());
|
||||
_routing_icon.set_splitting(_plugin_insert->splitting ());
|
||||
|
||||
if (_plugin_insert->splitting () || (
|
||||
_plugin_insert->input_streams().n_midi() == 0
|
||||
&& _plugin_insert->input_streams().n_audio() < _plugin_insert->output_streams().n_audio()
|
||||
)
|
||||
ChanCount sources = _plugin_insert->input_streams();
|
||||
ChanCount sinks = _plugin_insert->natural_input_streams();
|
||||
|
||||
/* replicated instances */
|
||||
if (!_plugin_insert->splitting () && _plugin_insert->get_count() > 1) {
|
||||
for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) {
|
||||
sinks.set(*t, sinks.get(*t) * _plugin_insert->get_count());
|
||||
}
|
||||
}
|
||||
/* MIDI bypass */
|
||||
if (_plugin_insert->natural_output_streams().n_midi() == 0 &&
|
||||
_plugin_insert->output_streams().n_midi() == 1) {
|
||||
sinks.set(DataType::MIDI, 1);
|
||||
sources.set(DataType::MIDI, 1);
|
||||
}
|
||||
|
||||
_input_icon.set_ports(sinks);
|
||||
_routing_icon.set_sinks(sinks);
|
||||
_routing_icon.set_sources(sources);
|
||||
|
||||
if (_plugin_insert->splitting () ||
|
||||
_plugin_insert->input_streams().n_audio() < _plugin_insert->natural_input_streams().n_audio()
|
||||
)
|
||||
{
|
||||
_splitting_icon.show ();
|
||||
_splitting_icon.queue_draw();
|
||||
_routing_icon.set_size_request (-1, 7);
|
||||
_routing_icon.set_visible(true);
|
||||
_input_icon.show();
|
||||
} else {
|
||||
_splitting_icon.hide ();
|
||||
_routing_icon.set_visible(false);
|
||||
if (_position_num != 0) {
|
||||
_input_icon.hide();
|
||||
}
|
||||
}
|
||||
|
||||
_input_icon.queue_draw();
|
||||
_output_icon.queue_draw();
|
||||
_routing_icon.queue_draw();
|
||||
}
|
||||
|
||||
void
|
||||
@ -640,35 +697,78 @@ PluginInsertProcessorEntry::hide_things ()
|
||||
plugin_insert_splitting_changed ();
|
||||
}
|
||||
|
||||
void
|
||||
PluginInsertProcessorEntry::setup_visuals ()
|
||||
{
|
||||
switch (_position) {
|
||||
case PreFader:
|
||||
_splitting_icon.set_name ("ProcessorPreFader");
|
||||
break;
|
||||
|
||||
case Fader:
|
||||
_splitting_icon.set_name ("ProcessorFader");
|
||||
break;
|
||||
|
||||
case PostFader:
|
||||
_splitting_icon.set_name ("ProcessorPostFader");
|
||||
break;
|
||||
}
|
||||
|
||||
ProcessorEntry::setup_visuals ();
|
||||
}
|
||||
|
||||
bool
|
||||
PluginInsertProcessorEntry::SplittingIcon::on_expose_event (GdkEventExpose* ev)
|
||||
ProcessorEntry::PortIcon::on_expose_event (GdkEventExpose* ev)
|
||||
{
|
||||
cairo_t* cr = gdk_cairo_create (get_window()->gobj());
|
||||
|
||||
cairo_rectangle (cr, ev->area.x, ev->area.y, ev->area.width, ev->area.height);
|
||||
cairo_clip (cr);
|
||||
|
||||
cairo_set_line_width (cr, 1.5);
|
||||
cairo_set_line_width (cr, 5.0);
|
||||
cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
|
||||
|
||||
Gtk::Allocation a = get_allocation();
|
||||
double const width = a.get_width();
|
||||
double const height = a.get_height();
|
||||
|
||||
Gdk::Color const bg = get_style()->get_bg (STATE_NORMAL);
|
||||
cairo_set_source_rgb (cr, bg.get_red_p (), bg.get_green_p (), bg.get_blue_p ());
|
||||
|
||||
cairo_rectangle (cr, 0, 0, width, height);
|
||||
cairo_fill (cr);
|
||||
|
||||
const double y0 = _input ? height-.5 : .5;
|
||||
|
||||
if (_ports.n_total() > 1) {
|
||||
for (uint32_t i = 0; i < _ports.n_total(); ++i) {
|
||||
if (i < _ports.n_midi()) {
|
||||
cairo_set_source_rgb (cr,
|
||||
UINT_RGBA_R_FLT(midi_port_color),
|
||||
UINT_RGBA_G_FLT(midi_port_color),
|
||||
UINT_RGBA_B_FLT(midi_port_color));
|
||||
} else {
|
||||
cairo_set_source_rgb (cr,
|
||||
UINT_RGBA_R_FLT(audio_port_color),
|
||||
UINT_RGBA_G_FLT(audio_port_color),
|
||||
UINT_RGBA_B_FLT(audio_port_color));
|
||||
}
|
||||
const float x = rintf(width * (.2f + .6f * i / (_ports.n_total() - 1.f))) + .5f;
|
||||
cairo_move_to (cr, x, y0);
|
||||
cairo_close_path(cr);
|
||||
cairo_stroke(cr);
|
||||
}
|
||||
} else if (_ports.n_total() == 1) {
|
||||
if (_ports.n_midi() == 1) {
|
||||
cairo_set_source_rgb (cr,
|
||||
UINT_RGBA_R_FLT(midi_port_color),
|
||||
UINT_RGBA_G_FLT(midi_port_color),
|
||||
UINT_RGBA_B_FLT(midi_port_color));
|
||||
} else {
|
||||
cairo_set_source_rgb (cr,
|
||||
UINT_RGBA_R_FLT(audio_port_color),
|
||||
UINT_RGBA_G_FLT(audio_port_color),
|
||||
UINT_RGBA_B_FLT(audio_port_color));
|
||||
}
|
||||
cairo_move_to (cr, rintf(width * .5) + .5f, y0);
|
||||
cairo_close_path(cr);
|
||||
cairo_stroke(cr);
|
||||
}
|
||||
|
||||
cairo_destroy(cr);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
ProcessorEntry::RoutingIcon::on_expose_event (GdkEventExpose* ev)
|
||||
{
|
||||
cairo_t* cr = gdk_cairo_create (get_window()->gobj());
|
||||
|
||||
cairo_rectangle (cr, ev->area.x, ev->area.y, ev->area.width, ev->area.height);
|
||||
cairo_clip (cr);
|
||||
|
||||
cairo_set_line_width (cr, 1.0);
|
||||
cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
|
||||
|
||||
Gtk::Allocation a = get_allocation();
|
||||
@ -684,54 +784,64 @@ PluginInsertProcessorEntry::SplittingIcon::on_expose_event (GdkEventExpose* ev)
|
||||
Gdk::Color const fg = get_style()->get_fg (STATE_NORMAL);
|
||||
cairo_set_source_rgb (cr, fg.get_red_p (), fg.get_green_p (), fg.get_blue_p ());
|
||||
|
||||
const uint32_t inputs = _inputs.n_audio();
|
||||
const uint32_t outputs = _outputs.n_audio();
|
||||
const uint32_t sources = _sources.n_total();
|
||||
const uint32_t sinks = _sinks.n_total();
|
||||
|
||||
const float si_m = rintf(height * 0.5) + .5f;
|
||||
/* MIDI */
|
||||
const uint32_t midi_sources = _sources.n_midi();
|
||||
const uint32_t midi_sinks = _sinks.n_midi();
|
||||
|
||||
if (inputs == 1) {
|
||||
const float si_l = rintf(width * 0.2) + .5f;
|
||||
const float si_c = rintf(width * 0.5) + .5f;
|
||||
const float si_r = rintf(width * 0.8) + .5f;
|
||||
|
||||
cairo_move_to (cr, si_l, height);
|
||||
cairo_line_to (cr, si_l, si_m);
|
||||
cairo_line_to (cr, si_r, si_m);
|
||||
cairo_line_to (cr, si_r, height);
|
||||
cairo_stroke (cr);
|
||||
|
||||
cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);
|
||||
|
||||
const uint32_t outputs = _outputs.n_audio();
|
||||
for (uint32_t i = 2; i < outputs; ++i) {
|
||||
const float si_b = rintf(width * (.2f + .6f * (i - 1.f) / (outputs - 1.f))) + .5f;
|
||||
cairo_move_to (cr, si_b, height);
|
||||
cairo_line_to (cr, si_b, si_m);
|
||||
cairo_set_source_rgb (cr,
|
||||
UINT_RGBA_R_FLT(midi_port_color),
|
||||
UINT_RGBA_G_FLT(midi_port_color),
|
||||
UINT_RGBA_B_FLT(midi_port_color));
|
||||
if (midi_sources > 0 && midi_sinks > 0 && sinks > 1 && sources > 1) {
|
||||
for (uint32_t i = 0 ; i < midi_sources; ++i) {
|
||||
const float si_x = rintf(width * (.2f + .6f * i / (sinks - 1.f))) + .5f;
|
||||
const float si_x0 = rintf(width * (.2f + .6f * i / (sources - 1.f))) + .5f;
|
||||
cairo_move_to (cr, si_x, height);
|
||||
cairo_curve_to (cr, si_x, 0, si_x0, height, si_x0, 0);
|
||||
cairo_stroke (cr);
|
||||
}
|
||||
|
||||
cairo_move_to (cr, si_c, si_m);
|
||||
cairo_line_to (cr, si_c, 0);
|
||||
} else if (midi_sources == 1 && midi_sinks == 1 && sinks == 1 && sources == 1) {
|
||||
const float si_x = rintf(width * .5f) + .5f;
|
||||
cairo_move_to (cr, si_x, height);
|
||||
cairo_line_to (cr, si_x, 0);
|
||||
cairo_stroke (cr);
|
||||
} else {
|
||||
cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
|
||||
for (uint32_t i = 0 ; i < outputs; ++i) {
|
||||
const float si_x = rintf(width * (.2f + .6f * i / (outputs - 1.f))) + .5f;
|
||||
if (i < inputs) {
|
||||
cairo_move_to (cr, si_x, height);
|
||||
cairo_line_to (cr, si_x, 0);
|
||||
cairo_stroke (cr);
|
||||
} else {
|
||||
cairo_move_to (cr, si_x, si_m);
|
||||
cairo_line_to (cr, si_x, height);
|
||||
cairo_stroke (cr);
|
||||
cairo_move_to (cr, si_x+4, si_m);
|
||||
cairo_line_to (cr, si_x-4, si_m);
|
||||
cairo_stroke (cr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* AUDIO */
|
||||
const uint32_t audio_sources = _sources.n_audio();
|
||||
const uint32_t audio_sinks = _sinks.n_audio();
|
||||
cairo_set_source_rgb (cr,
|
||||
UINT_RGBA_R_FLT(audio_port_color),
|
||||
UINT_RGBA_G_FLT(audio_port_color),
|
||||
UINT_RGBA_B_FLT(audio_port_color));
|
||||
|
||||
if (_splitting) {
|
||||
assert(audio_sinks > 1);
|
||||
const float si_x0 = rintf(width * .5f) + .5f;
|
||||
for (uint32_t i = midi_sinks; i < sinks; ++i) {
|
||||
const float si_x = rintf(width * (.2f + .6f * i / (sinks - 1.f))) + .5f;
|
||||
cairo_move_to (cr, si_x, height);
|
||||
cairo_curve_to (cr, si_x, 0, si_x0, height, si_x0, 0);
|
||||
cairo_stroke (cr);
|
||||
}
|
||||
} else if (audio_sources > 1) {
|
||||
for (uint32_t i = 0 ; i < audio_sources; ++i) {
|
||||
const float si_x = rintf(width * (.2f + .6f * (i + midi_sinks) / (sinks - 1.f))) + .5f;
|
||||
const float si_x0 = rintf(width * (.2f + .6f * (i + midi_sources) / (sources - 1.f))) + .5f;
|
||||
cairo_move_to (cr, si_x, height);
|
||||
cairo_curve_to (cr, si_x, 0, si_x0, height, si_x0, 0);
|
||||
cairo_stroke (cr);
|
||||
}
|
||||
} else if (audio_sources == 1 && audio_sinks == 1) {
|
||||
const float si_x = rintf(width * .5f) + .5f;
|
||||
cairo_move_to (cr, si_x, height);
|
||||
cairo_line_to (cr, si_x, 0);
|
||||
cairo_stroke (cr);
|
||||
}
|
||||
cairo_destroy(cr);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -761,7 +871,7 @@ ProcessorBox::ProcessorBox (ARDOUR::Session* sess, boost::function<PluginSelecto
|
||||
processor_display.set_name ("ProcessorList");
|
||||
processor_display.set_data ("processorbox", this);
|
||||
processor_display.set_size_request (48, -1);
|
||||
processor_display.set_spacing (2);
|
||||
processor_display.set_spacing (0);
|
||||
|
||||
processor_display.signal_enter_notify_event().connect (sigc::mem_fun(*this, &ProcessorBox::enter_notify), false);
|
||||
processor_display.signal_leave_notify_event().connect (sigc::mem_fun(*this, &ProcessorBox::leave_notify), false);
|
||||
@ -845,10 +955,6 @@ ProcessorBox::object_drop(DnDVBox<ProcessorEntry>* source, ProcessorEntry* posit
|
||||
`dropped on' processor */
|
||||
list<ProcessorEntry*> c = processor_display.children ();
|
||||
list<ProcessorEntry*>::iterator i = c.begin ();
|
||||
while (dynamic_cast<BlankProcessorEntry*> (*i)) {
|
||||
assert (i != c.end ());
|
||||
++i;
|
||||
}
|
||||
|
||||
assert (i != c.end ());
|
||||
p = (*i)->processor ();
|
||||
@ -1427,11 +1533,6 @@ ProcessorBox::redisplay_processors ()
|
||||
_route->foreach_processor (sigc::bind (sigc::mem_fun (*this, &ProcessorBox::help_count_visible_prefader_processors),
|
||||
&_visible_prefader_processors, &fader_seen));
|
||||
|
||||
if (_visible_prefader_processors == 0) { // fader only
|
||||
BlankProcessorEntry* bpe = new BlankProcessorEntry (this, _width);
|
||||
processor_display.add_child (bpe);
|
||||
}
|
||||
|
||||
_route->foreach_processor (sigc::mem_fun (*this, &ProcessorBox::add_processor_to_display));
|
||||
|
||||
for (ProcessorWindowProxies::iterator i = _processor_window_info.begin(); i != _processor_window_info.end(); ++i) {
|
||||
@ -1612,15 +1713,16 @@ ProcessorBox::setup_entry_positions ()
|
||||
list<ProcessorEntry*> children = processor_display.children ();
|
||||
bool pre_fader = true;
|
||||
|
||||
uint32_t num = 0;
|
||||
for (list<ProcessorEntry*>::iterator i = children.begin(); i != children.end(); ++i) {
|
||||
if (boost::dynamic_pointer_cast<Amp>((*i)->processor())) {
|
||||
pre_fader = false;
|
||||
(*i)->set_position (ProcessorEntry::Fader);
|
||||
(*i)->set_position (ProcessorEntry::Fader, num++);
|
||||
} else {
|
||||
if (pre_fader) {
|
||||
(*i)->set_position (ProcessorEntry::PreFader);
|
||||
(*i)->set_position (ProcessorEntry::PreFader, num++);
|
||||
} else {
|
||||
(*i)->set_position (ProcessorEntry::PostFader);
|
||||
(*i)->set_position (ProcessorEntry::PostFader, num++);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -125,7 +125,7 @@ public:
|
||||
PostFader
|
||||
};
|
||||
|
||||
void set_position (Position);
|
||||
void set_position (Position, uint32_t);
|
||||
boost::shared_ptr<ARDOUR::Processor> processor () const;
|
||||
void set_enum_width (Width);
|
||||
|
||||
@ -143,6 +143,7 @@ protected:
|
||||
ArdourButton _button;
|
||||
Gtk::VBox _vbox;
|
||||
Position _position;
|
||||
uint32_t _position_num;
|
||||
|
||||
virtual void setup_visuals ();
|
||||
|
||||
@ -150,6 +151,7 @@ private:
|
||||
void led_clicked();
|
||||
void processor_active_changed ();
|
||||
void processor_property_changed (const PBD::PropertyChange&);
|
||||
void processor_configuration_changed (const ARDOUR::ChanCount in, const ARDOUR::ChanCount out);
|
||||
std::string name (Width) const;
|
||||
void setup_tooltip ();
|
||||
|
||||
@ -159,6 +161,7 @@ private:
|
||||
Gtk::StateType _visual_state;
|
||||
PBD::ScopedConnection active_connection;
|
||||
PBD::ScopedConnection name_connection;
|
||||
PBD::ScopedConnection config_connection;
|
||||
|
||||
class Control : public sigc::trackable {
|
||||
public:
|
||||
@ -168,7 +171,6 @@ private:
|
||||
void add_state (XMLNode *) const;
|
||||
void set_state (XMLNode const *);
|
||||
void hide_things ();
|
||||
void hide_label ();
|
||||
|
||||
bool visible () const {
|
||||
return _visible;
|
||||
@ -178,7 +180,7 @@ private:
|
||||
return _name;
|
||||
}
|
||||
|
||||
Gtk::VBox box;
|
||||
Gtk::Alignment box;
|
||||
|
||||
private:
|
||||
void slider_adjusted ();
|
||||
@ -191,7 +193,6 @@ private:
|
||||
/* things for a slider */
|
||||
Gtk::Adjustment _adjustment;
|
||||
Gtkmm2ext::HSliderController _slider;
|
||||
Gtk::Label _label;
|
||||
Gtkmm2ext::PersistentTooltip _slider_persistant_tooltip;
|
||||
/* things for a button */
|
||||
ArdourButton _button;
|
||||
@ -204,12 +205,43 @@ private:
|
||||
std::list<Control*> _controls;
|
||||
|
||||
void toggle_control_visibility (Control *);
|
||||
};
|
||||
|
||||
class BlankProcessorEntry : public ProcessorEntry
|
||||
{
|
||||
public:
|
||||
BlankProcessorEntry (ProcessorBox *, Width w);
|
||||
class PortIcon : public Gtk::DrawingArea {
|
||||
public:
|
||||
PortIcon(bool input) {
|
||||
_input = input;
|
||||
_ports = ARDOUR::ChanCount(ARDOUR::DataType::AUDIO, 1);
|
||||
set_size_request (-1, 3);
|
||||
}
|
||||
void set_ports(ARDOUR::ChanCount const ports) { _ports = ports; }
|
||||
private:
|
||||
bool on_expose_event (GdkEventExpose *);
|
||||
bool _input;
|
||||
ARDOUR::ChanCount _ports;
|
||||
};
|
||||
|
||||
class RoutingIcon : public Gtk::DrawingArea {
|
||||
public:
|
||||
RoutingIcon() {
|
||||
_sources = ARDOUR::ChanCount(ARDOUR::DataType::AUDIO, 1);
|
||||
_sinks = ARDOUR::ChanCount(ARDOUR::DataType::AUDIO, 1);
|
||||
_splitting = false;
|
||||
set_size_request (-1, 4);
|
||||
}
|
||||
void set_sources(ARDOUR::ChanCount const sources) { _sources = sources; }
|
||||
void set_sinks(ARDOUR::ChanCount const sinks) { _sinks = sinks; }
|
||||
void set_splitting(const bool splitting) { _splitting = splitting; }
|
||||
private:
|
||||
bool on_expose_event (GdkEventExpose *);
|
||||
ARDOUR::ChanCount _sources; // signals available to feed into the processor(s)
|
||||
ARDOUR::ChanCount _sinks; // combined number of outputs of the processor
|
||||
bool _splitting;
|
||||
};
|
||||
|
||||
protected:
|
||||
RoutingIcon _routing_icon;
|
||||
PortIcon _input_icon;
|
||||
PortIcon _output_icon;
|
||||
};
|
||||
|
||||
class PluginInsertProcessorEntry : public ProcessorEntry
|
||||
@ -220,25 +252,9 @@ public:
|
||||
void hide_things ();
|
||||
|
||||
private:
|
||||
void setup_visuals ();
|
||||
void plugin_insert_splitting_changed ();
|
||||
|
||||
class SplittingIcon : public Gtk::DrawingArea {
|
||||
public:
|
||||
SplittingIcon() {
|
||||
_inputs = ARDOUR::ChanCount(ARDOUR::DataType::AUDIO, 1);
|
||||
_outputs = ARDOUR::ChanCount(ARDOUR::DataType::AUDIO, 2);
|
||||
}
|
||||
void set_inputs(ARDOUR::ChanCount const inputs) { _inputs = inputs; }
|
||||
void set_outputs(ARDOUR::ChanCount const outputs) { _outputs = outputs; }
|
||||
private:
|
||||
bool on_expose_event (GdkEventExpose *);
|
||||
ARDOUR::ChanCount _inputs;
|
||||
ARDOUR::ChanCount _outputs;
|
||||
};
|
||||
|
||||
boost::shared_ptr<ARDOUR::PluginInsert> _plugin_insert;
|
||||
SplittingIcon _splitting_icon;
|
||||
|
||||
PBD::ScopedConnection _splitting_connection;
|
||||
};
|
||||
|
||||
@ -434,6 +450,7 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD
|
||||
void mixer_strip_delivery_changed (boost::weak_ptr<ARDOUR::Delivery>);
|
||||
|
||||
XMLNode* entry_gui_object_state (ProcessorEntry *);
|
||||
PBD::ScopedConnection amp_config_connection;
|
||||
};
|
||||
|
||||
#endif /* __ardour_gtk_processor_box__ */
|
||||
|
@ -42,7 +42,7 @@ ReturnUI::ReturnUI (Gtk::Window* parent, boost::shared_ptr<Return> r, Session* s
|
||||
_gpm.set_controls (boost::shared_ptr<Route>(), r->meter(), r->amp());
|
||||
|
||||
_hbox.pack_start (_gpm, true, true);
|
||||
set_name ("ReturnUIFrame");
|
||||
set_name (X_("ReturnUIFrame"));
|
||||
|
||||
_vbox.set_spacing (5);
|
||||
_vbox.set_border_width (5);
|
||||
@ -61,7 +61,7 @@ ReturnUI::ReturnUI (Gtk::Window* parent, boost::shared_ptr<Return> r, Session* s
|
||||
_return->input()->changed.connect (input_change_connection, invalidator (*this), boost::bind (&ReturnUI::ins_changed, this, _1, _2), gui_context());
|
||||
|
||||
_gpm.setup_meters ();
|
||||
_gpm.set_fader_name ("ReturnUIFrame");
|
||||
_gpm.set_fader_name (X_("ReturnUIFader"));
|
||||
|
||||
// screen_update_connection = ARDOUR_UI::instance()->RapidScreenUpdate.connect (sigc::mem_fun (*this, &ReturnUI::update));
|
||||
fast_screen_update_connection = ARDOUR_UI::instance()->SuperRapidScreenUpdate.connect (sigc::mem_fun (*this, &ReturnUI::fast_update));
|
||||
|
@ -46,7 +46,7 @@ SendUI::SendUI (Gtk::Window* parent, boost::shared_ptr<Send> s, Session* session
|
||||
_gpm.set_controls (boost::shared_ptr<Route>(), s->meter(), s->amp());
|
||||
|
||||
_hbox.pack_start (_gpm, true, true);
|
||||
set_name ("SendUIFrame");
|
||||
set_name (X_("SendUIFrame"));
|
||||
|
||||
_vbox.set_spacing (5);
|
||||
_vbox.set_border_width (5);
|
||||
@ -77,7 +77,7 @@ SendUI::SendUI (Gtk::Window* parent, boost::shared_ptr<Send> s, Session* session
|
||||
_panners.setup_pan ();
|
||||
|
||||
_gpm.setup_meters ();
|
||||
_gpm.set_fader_name ("SendUIFrame");
|
||||
_gpm.set_fader_name (X_("SendUIFader"));
|
||||
|
||||
// screen_update_connection = ARDOUR_UI::instance()->RapidScreenUpdate.connect (
|
||||
// sigc::mem_fun (*this, &SendUI::update));
|
||||
|
@ -707,7 +707,7 @@ SoundFileBrowser::add_gain_meter ()
|
||||
boost::shared_ptr<Route> r = _session->the_auditioner ();
|
||||
|
||||
gm->set_controls (r, r->shared_peak_meter(), r->amp());
|
||||
gm->set_fader_name (X_("AudioTrackFader"));
|
||||
gm->set_fader_name (X_("GainFader"));
|
||||
|
||||
meter_packer.set_border_width (12);
|
||||
meter_packer.pack_start (*gm, false, true);
|
||||
|
@ -1093,7 +1093,12 @@ LV2Plugin::do_save_preset(string name)
|
||||
|
||||
lilv_state_free(state);
|
||||
|
||||
return Glib::filename_to_uri(Glib::build_filename(bundle, file_name));
|
||||
std::string uri = Glib::filename_to_uri(Glib::build_filename(bundle, file_name));
|
||||
LilvNode *node = lilv_new_uri(_world.world, uri.c_str());
|
||||
lilv_world_load_bundle(_world.world, node);
|
||||
lilv_world_load_resource(_world.world, node);
|
||||
lilv_node_free(node);
|
||||
return uri;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1212,10 +1212,23 @@ double
|
||||
PluginInsert::PluginControl::internal_to_interface (double val) const
|
||||
{
|
||||
if (_logarithmic) {
|
||||
/* some plugins have a log-scale range "0.."
|
||||
* ideally we'd map the range down to infinity somehow :)
|
||||
*
|
||||
* one solution could be to use
|
||||
* val = exp(lower + log(range) * value);
|
||||
* (log(val) - lower) / range)
|
||||
* This approach would require access to the actual range (ie
|
||||
* Plugin::ParameterDescriptor) and also require handling
|
||||
* of unbound ranges..
|
||||
*
|
||||
* currently an arbitrarly low number is assumed to represnt
|
||||
* log(0) as hot-fix solution.
|
||||
*/
|
||||
if (val > 0) {
|
||||
val = log (val);
|
||||
} else {
|
||||
val = 0;
|
||||
val = -8; // ~ -70dB = 20 * log10(exp(-8))
|
||||
}
|
||||
}
|
||||
|
||||
@ -1226,7 +1239,12 @@ double
|
||||
PluginInsert::PluginControl::interface_to_internal (double val) const
|
||||
{
|
||||
if (_logarithmic) {
|
||||
val = exp (val);
|
||||
if (val <= -8) {
|
||||
/* see note in PluginInsert::PluginControl::internal_to_interface() */
|
||||
val= 0;
|
||||
} else {
|
||||
val = exp (val);
|
||||
}
|
||||
}
|
||||
|
||||
return val;
|
||||
|
@ -1985,9 +1985,9 @@ Session::auto_connect_route (boost::shared_ptr<Route> route, ChanCount& existing
|
||||
for (uint32_t i = output_start.get(*t); i < route->n_outputs().get(*t); ++i) {
|
||||
string port;
|
||||
|
||||
if ((*t) == DataType::MIDI || Config->get_output_auto_connect() & AutoConnectPhysical) {
|
||||
if ((*t) == DataType::MIDI && (Config->get_output_auto_connect() & AutoConnectPhysical)) {
|
||||
port = physoutputs[(out_offset.get(*t) + i) % nphysical_out];
|
||||
} else if ((*t) == DataType::AUDIO && Config->get_output_auto_connect() & AutoConnectMaster) {
|
||||
} else if ((*t) == DataType::AUDIO && (Config->get_output_auto_connect() & AutoConnectMaster)) {
|
||||
/* master bus is audio only */
|
||||
if (_master_out && _master_out->n_inputs().get(*t) > 0) {
|
||||
port = _master_out->input()->ports().port(*t,
|
||||
|
@ -421,7 +421,9 @@ Session::process_with_events (pframes_t nframes)
|
||||
check_declick_out ();
|
||||
}
|
||||
|
||||
_engine.split_cycle (this_nframes);
|
||||
if (nframes > 0) {
|
||||
_engine.split_cycle (this_nframes);
|
||||
}
|
||||
|
||||
/* now handle this event and all others scheduled for the same time */
|
||||
|
||||
|
@ -245,7 +245,7 @@ def configure(conf):
|
||||
'LIBARDOUR_API', 'ardour/libardour_visibility.h')
|
||||
autowaf.configure(conf)
|
||||
autowaf.check_pkg(conf, 'aubio', uselib_store='AUBIO',
|
||||
atleast_version='0.3.2')
|
||||
exact_version='0.3.2')
|
||||
autowaf.check_pkg(conf, 'libxml-2.0', uselib_store='XML')
|
||||
autowaf.check_pkg(conf, 'lrdf', uselib_store='LRDF',
|
||||
atleast_version='0.4.0')
|
||||
|
@ -1094,6 +1094,8 @@ JACKAudioBackend::control_app_name () const
|
||||
appname = "hdspconf";
|
||||
} else if (_target_device == "M Audio Delta 1010") {
|
||||
appname = "mudita24";
|
||||
} else if (_target_device == "M2496") {
|
||||
appname = "mudita24";
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
@ -746,7 +746,7 @@ clearlooks_glossy_draw_tab (cairo_t *cr,
|
||||
|
||||
if (params->active)
|
||||
{
|
||||
CairoColor shadow, hilight, f1, f2;
|
||||
CairoColor shadow, f1, f2;
|
||||
|
||||
pattern = cairo_pattern_create_linear (tab->gap_side == CL_GAP_LEFT ? width-1 : 0,
|
||||
tab->gap_side == CL_GAP_TOP ? height-2 : 1,
|
||||
|
@ -306,7 +306,7 @@ clearlooks_gtk2_rc_parse_style (GtkSettings *settings,
|
||||
static guint
|
||||
clearlooks_gtk2_rc_parse_dummy (GtkSettings *settings,
|
||||
GScanner *scanner,
|
||||
gchar *name)
|
||||
const gchar *name)
|
||||
{
|
||||
(void) settings;
|
||||
|
||||
|
@ -298,7 +298,7 @@ private:
|
||||
/* make up an icon for the drag */
|
||||
_drag_icon = new Gtk::Window (Gtk::WINDOW_POPUP);
|
||||
|
||||
Gtk::Allocation a = child->widget().get_allocation ();
|
||||
Gtk::Allocation a = child->action_widget().get_allocation ();
|
||||
_drag_icon->set_size_request (a.get_width(), a.get_height());
|
||||
|
||||
_drag_icon->signal_expose_event().connect (sigc::mem_fun (*this, &DnDVBox::icon_expose));
|
||||
@ -328,7 +328,7 @@ private:
|
||||
|
||||
cairo_t* cr = gdk_cairo_create (_drag_icon->get_window()->gobj ());
|
||||
|
||||
Glib::RefPtr<Gdk::Pixmap> p = _drag_child->widget().get_snapshot();
|
||||
Glib::RefPtr<Gdk::Pixmap> p = _drag_child->action_widget().get_snapshot();
|
||||
gdk_cairo_set_source_pixmap (cr, p->gobj(), 0, 0);
|
||||
cairo_rectangle (cr, 0, 0, w, h);
|
||||
cairo_fill (cr);
|
||||
|
@ -33,7 +33,9 @@ using namespace Gtk;
|
||||
using namespace std;
|
||||
|
||||
#define CORNER_RADIUS 4
|
||||
#define FADER_RESERVE (2*CORNER_RADIUS)
|
||||
#define CORNER_SIZE 2
|
||||
#define CORNER_OFFSET 1
|
||||
#define FADER_RESERVE 5
|
||||
|
||||
std::list<PixFader::FaderImage*> PixFader::_patterns;
|
||||
|
||||
@ -54,6 +56,12 @@ PixFader::PixFader (Gtk::Adjustment& adj, int orientation, int fader_length, int
|
||||
|
||||
adjustment.signal_value_changed().connect (mem_fun (*this, &PixFader::adjustment_changed));
|
||||
adjustment.signal_changed().connect (mem_fun (*this, &PixFader::adjustment_changed));
|
||||
|
||||
if (_orien == VERT) {
|
||||
DrawingArea::set_size_request(girth, span);
|
||||
} else {
|
||||
DrawingArea::set_size_request(span, girth);
|
||||
}
|
||||
}
|
||||
|
||||
PixFader::~PixFader ()
|
||||
@ -105,11 +113,8 @@ PixFader::create_patterns ()
|
||||
|
||||
cairo_surface_t* surface;
|
||||
cairo_t* tc = 0;
|
||||
float radius = CORNER_RADIUS;
|
||||
|
||||
double w = get_width();
|
||||
|
||||
if (w <= 1 || get_height() <= 1) {
|
||||
if (get_width() <= 1 || get_height() <= 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -136,13 +141,12 @@ PixFader::create_patterns ()
|
||||
|
||||
/* paint lower shade */
|
||||
|
||||
w -= 2.0;
|
||||
|
||||
shade_pattern = cairo_pattern_create_linear (0.0, 0.0, w, 0);
|
||||
shade_pattern = cairo_pattern_create_linear (0.0, 0.0, get_width() - 2 - CORNER_OFFSET , 0);
|
||||
cairo_pattern_add_color_stop_rgba (shade_pattern, 0, fr*0.8,fg*0.8,fb*0.8, 1.0);
|
||||
cairo_pattern_add_color_stop_rgba (shade_pattern, 1, fr*0.6,fg*0.6,fb*0.6, 1.0);
|
||||
cairo_set_source (tc, shade_pattern);
|
||||
Gtkmm2ext::rounded_top_half_rectangle (tc, 1.0, get_height(), w, get_height(), radius-1.5);
|
||||
Gtkmm2ext::rounded_top_half_rectangle (tc, CORNER_OFFSET, get_height() + CORNER_OFFSET,
|
||||
get_width() - CORNER_SIZE, get_height(), CORNER_RADIUS);
|
||||
cairo_fill (tc);
|
||||
|
||||
cairo_pattern_destroy (shade_pattern);
|
||||
@ -169,7 +173,8 @@ PixFader::create_patterns ()
|
||||
cairo_pattern_add_color_stop_rgba (shade_pattern, 0, fr*0.8,fg*0.8,fb*0.8, 1.0);
|
||||
cairo_pattern_add_color_stop_rgba (shade_pattern, 1, fr*0.6,fg*0.6,fb*0.6, 1.0);
|
||||
cairo_set_source (tc, shade_pattern);
|
||||
Gtkmm2ext::rounded_right_half_rectangle (tc, 0, 1, get_width(), get_height() - 2.0, radius-1.5);
|
||||
Gtkmm2ext::rounded_right_half_rectangle (tc, CORNER_OFFSET, CORNER_OFFSET,
|
||||
get_width() - CORNER_OFFSET, get_height() - CORNER_SIZE, CORNER_RADIUS);
|
||||
cairo_fill (tc);
|
||||
cairo_pattern_destroy (shade_pattern);
|
||||
|
||||
@ -212,7 +217,6 @@ PixFader::on_expose_event (GdkEventExpose* ev)
|
||||
cairo_set_source_rgb (cr, br, bg, bb);
|
||||
cairo_rectangle (cr, ev->area.x, ev->area.y, ev->area.width, ev->area.height);
|
||||
cairo_fill (cr);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -223,18 +227,27 @@ PixFader::on_expose_event (GdkEventExpose* ev)
|
||||
float w = get_width();
|
||||
float h = get_height();
|
||||
|
||||
Gdk::Color c = get_style()->get_bg (Gtk::STATE_PRELIGHT);
|
||||
cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
|
||||
cairo_rectangle (cr, 0, 0, w, h);
|
||||
cairo_fill(cr);
|
||||
|
||||
cairo_set_line_width (cr, 1);
|
||||
cairo_set_source_rgba (cr, 0, 0, 0, 1.0);
|
||||
|
||||
cairo_matrix_t matrix;
|
||||
Gtkmm2ext::rounded_rectangle (cr, CORNER_OFFSET, CORNER_OFFSET, w-CORNER_SIZE, h-CORNER_SIZE, CORNER_RADIUS);
|
||||
cairo_stroke_preserve(cr);
|
||||
|
||||
if (_orien == VERT) {
|
||||
|
||||
if (ds > h - FADER_RESERVE) {
|
||||
ds = h - FADER_RESERVE;
|
||||
if (ds > h - FADER_RESERVE - CORNER_OFFSET) {
|
||||
ds = h - FADER_RESERVE - CORNER_OFFSET;
|
||||
}
|
||||
|
||||
cairo_set_source (cr, pattern);
|
||||
cairo_matrix_init_translate (&matrix, 0, (h - ds));
|
||||
cairo_pattern_set_matrix (pattern, &matrix);
|
||||
Gtkmm2ext::rounded_rectangle (cr, 0, 0, w, h, CORNER_RADIUS-1.5);
|
||||
cairo_fill (cr);
|
||||
|
||||
} else {
|
||||
@ -258,7 +271,6 @@ PixFader::on_expose_event (GdkEventExpose* ev)
|
||||
cairo_set_source (cr, pattern);
|
||||
cairo_matrix_init_translate (&matrix, w - ds, 0);
|
||||
cairo_pattern_set_matrix (pattern, &matrix);
|
||||
Gtkmm2ext::rounded_rectangle (cr, 0, 0, w, h, CORNER_RADIUS-1.5);
|
||||
cairo_fill (cr);
|
||||
}
|
||||
|
||||
@ -270,14 +282,14 @@ PixFader::on_expose_event (GdkEventExpose* ev)
|
||||
context->set_source_rgba (c.get_red_p()*1.5, c.get_green_p()*1.5, c.get_blue_p()*1.5, 0.85);
|
||||
if ( _orien == VERT) {
|
||||
if (unity_loc < h ) {
|
||||
context->move_to (1.5, unity_loc + .5);
|
||||
context->line_to (girth - 1.5, unity_loc + .5);
|
||||
context->move_to (1.5, unity_loc + CORNER_OFFSET + .5);
|
||||
context->line_to (girth - 1.5, unity_loc + CORNER_OFFSET + .5);
|
||||
context->stroke ();
|
||||
}
|
||||
} else {
|
||||
if ( unity_loc < w ){
|
||||
context->move_to (unity_loc + .5, 1.5);
|
||||
context->line_to (unity_loc + .5, girth - 1.5);
|
||||
context->move_to (unity_loc - CORNER_OFFSET + .5, 1.5);
|
||||
context->line_to (unity_loc - CORNER_OFFSET + .5, girth - 1.5);
|
||||
context->stroke ();
|
||||
}
|
||||
}
|
||||
@ -293,11 +305,11 @@ PixFader::on_expose_event (GdkEventExpose* ev)
|
||||
}
|
||||
|
||||
if (!get_sensitive()) {
|
||||
Gtkmm2ext::rounded_rectangle (cr, 0, 0, get_width(), get_height(), 3);
|
||||
Gtkmm2ext::rounded_rectangle (cr, CORNER_OFFSET, CORNER_OFFSET, w-CORNER_SIZE, h-CORNER_SIZE, CORNER_RADIUS);
|
||||
cairo_set_source_rgba (cr, 0.505, 0.517, 0.525, 0.4);
|
||||
cairo_fill (cr);
|
||||
} else if (_hovering) {
|
||||
Gtkmm2ext::rounded_rectangle (cr, 0, 0, get_width(), get_height(), 3);
|
||||
Gtkmm2ext::rounded_rectangle (cr, CORNER_OFFSET, CORNER_OFFSET, w-CORNER_SIZE, h-CORNER_SIZE, CORNER_RADIUS);
|
||||
cairo_set_source_rgba (cr, 0.905, 0.917, 0.925, 0.1);
|
||||
cairo_fill (cr);
|
||||
}
|
||||
@ -546,9 +558,9 @@ void
|
||||
PixFader::update_unity_position ()
|
||||
{
|
||||
if (_orien == VERT) {
|
||||
unity_loc = (int) rint (span * (1 - (default_value / (adjustment.get_upper() - adjustment.get_lower())))) - 1;
|
||||
unity_loc = (int) rint (span * (1 - ((default_value - adjustment.get_lower()) / (adjustment.get_upper() - adjustment.get_lower())))) - 1;
|
||||
} else {
|
||||
unity_loc = (int) rint (default_value * span / (adjustment.get_upper() - adjustment.get_lower()));
|
||||
unity_loc = (int) rint ((default_value - adjustment.get_lower()) * span / (adjustment.get_upper() - adjustment.get_lower()));
|
||||
}
|
||||
|
||||
queue_draw ();
|
||||
@ -614,6 +626,7 @@ PixFader::on_state_changed (Gtk::StateType old_state)
|
||||
{
|
||||
Widget::on_state_changed (old_state);
|
||||
create_patterns ();
|
||||
queue_draw ();
|
||||
}
|
||||
|
||||
void
|
||||
@ -630,4 +643,5 @@ PixFader::on_style_changed (const Glib::RefPtr<Gtk::Style>&)
|
||||
*/
|
||||
|
||||
pattern = 0;
|
||||
queue_draw ();
|
||||
}
|
||||
|
@ -26,7 +26,8 @@ def configure(conf):
|
||||
conf.load('compiler_cxx')
|
||||
autowaf.configure(conf)
|
||||
autowaf.check_pkg(conf, 'fftw3f', uselib_store='FFTW3F', mandatory=True)
|
||||
autowaf.check_pkg(conf, 'aubio', uselib_store='AUBIO', mandatory=False)
|
||||
autowaf.check_pkg(conf, 'aubio', uselib_store='AUBIO', mandatory=False,
|
||||
exact_version='0.3.2')
|
||||
conf.write_config_header('libvampplugins-config.h', remove=False)
|
||||
|
||||
def build(bld):
|
||||
|
213
patchfiles/Moog_MF-104M_Analog_Delay.midnam
Normal file
213
patchfiles/Moog_MF-104M_Analog_Delay.midnam
Normal file
@ -0,0 +1,213 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE MIDINameDocument PUBLIC "-//MIDI Manufacturers Association//DTD MIDINameDocument 1.0//EN" "http://www.midi.org/dtds/MIDINameDocument10.dtd">
|
||||
<MIDINameDocument>
|
||||
<Author>David Robillard</Author>
|
||||
<MasterDeviceNames>
|
||||
<Manufacturer>Moog</Manufacturer>
|
||||
<Model>MF-104M Analog Delay</Model>
|
||||
<CustomDeviceMode Name="Default">
|
||||
<ChannelNameSetAssignments>
|
||||
<ChannelNameSetAssign Channel="1" NameSet="Names"/>
|
||||
</ChannelNameSetAssignments>
|
||||
</CustomDeviceMode>
|
||||
<ChannelNameSet Name="Names">
|
||||
<AvailableForChannels>
|
||||
<AvailableChannel Channel="1" Available="true"/>
|
||||
</AvailableForChannels>
|
||||
<UsesControlNameList Name="Controls"/>
|
||||
<PatchBank Name="User Patches">
|
||||
<PatchNameList Name="User Patches"/>
|
||||
</PatchBank>
|
||||
</ChannelNameSet>
|
||||
<ValueNameList Name="Toggle">
|
||||
<Value Number="0" Name="Disabled"/>
|
||||
<Value Number="64" Name="Enabled"/>
|
||||
</ValueNameList>
|
||||
<ControlNameList Name="Controls">
|
||||
<Control Type="7bit" Number="7" Name="Output Level (Coarse)"/>
|
||||
<Control Type="7bit" Number="39" Name="Output Level (Fine)"/>
|
||||
|
||||
<Control Type="7bit" Number="12" Name="Time (Coarse)"/>
|
||||
<Control Type="7bit" Number="44" Name="Time (Fine)"/>
|
||||
|
||||
<Control Type="7bit" Number="13" Name="Feedback (Coarse)"/>
|
||||
<Control Type="7bit" Number="45" Name="Feedback (Fine)"/>
|
||||
|
||||
<Control Type="7bit" Number="14" Name="Mix (Coarse)"/>
|
||||
<Control Type="7bit" Number="46" Name="Mix (Fine)"/>
|
||||
|
||||
<Control Type="7bit" Number="15" Name="LFO Rate (Coarse)"/>
|
||||
<Control Type="7bit" Number="47" Name="LFO Rate (Fine)"/>
|
||||
|
||||
<Control Type="7bit" Number="16" Name="LFO Amount (Coarse)"/>
|
||||
<Control Type="7bit" Number="48" Name="LFO Amount (Fine)"/>
|
||||
|
||||
<Control Type="7bit" Number="70" Name="LFO Waveform">
|
||||
<Values Min="0" Max="127">
|
||||
<ValueNameList>
|
||||
<Value Number="0" Name="Sine"/>
|
||||
<Value Number="16" Name="Triangle"/>
|
||||
<Value Number="32" Name="Square"/>
|
||||
<Value Number="48" Name="Saw"/>
|
||||
<Value Number="64" Name="Ramp"/>
|
||||
<Value Number="80" Name="Sample & Hold"/>
|
||||
<Value Number="96" Name="Smooth Sample & Hold"/>
|
||||
</ValueNameList>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
<Control Type="7bit" Number="74" Name="Range (Fast/Slow)">
|
||||
<Values Min="0" Max="127">
|
||||
<ValueNameList>
|
||||
<Value Number="0" Name="Slow"/>
|
||||
<Value Number="64" Name="Fast"/>
|
||||
</ValueNameList>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
<Control Type="7bit" Number="91" Name="Bypass On/Off">
|
||||
<Values Min="0" Max="127">
|
||||
<ValueNameList>
|
||||
<Value Number="0" Name="Bypassed"/>
|
||||
<Value Number="64" Name="Active"/>
|
||||
</ValueNameList>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
<Control Type="7bit" Number="5" Name="Time Slew Rate (Coarse)"/>
|
||||
<Control Type="7bit" Number="37" Name="Time Slew Rate (Fine)"/>
|
||||
|
||||
<Control Type="7bit" Number="83" Name="Pitch Bend Amount">
|
||||
<Values Min="0" Max="127">
|
||||
<ValueNameList>
|
||||
<Value Number="0" Name="Off"/>
|
||||
<Value Number="16" Name="2 Semi"/>
|
||||
<Value Number="32" Name="3 Semi"/>
|
||||
<Value Number="48" Name="4 Semi"/>
|
||||
<Value Number="64" Name="5 Semi"/>
|
||||
<Value Number="80" Name="7 Semi"/>
|
||||
<Value Number="96" Name="12 Semi"/>
|
||||
<Value Number="112" Name="24 Semi"/>
|
||||
</ValueNameList>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
<Control Type="7bit" Number="85" Name="Filter Bright/Dark">
|
||||
<Values Min="0" Max="127">
|
||||
<ValueNameList>
|
||||
<Value Number="0" Name="Bright"/>
|
||||
<Value Number="64" Name="Dark"/>
|
||||
</ValueNameList>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
<Control Type="7bit" Number="87" Name="Delay Time Multiplier">
|
||||
<Values Min="0" Max="127">
|
||||
<ValueNameList>
|
||||
<Value Number="0" Name="Norm"/>
|
||||
<Value Number="32" Name="x2"/>
|
||||
<Value Number="64" Name="x4"/>
|
||||
<Value Number="96" Name="x8"/>
|
||||
</ValueNameList>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
<Control Type="7bit" Number="89" Name="Delay Time MIDI Sync Enable">
|
||||
<Values Min="0" Max="127">
|
||||
<UsesValueNameList Name="Toggle"/>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
<Control Type="7bit" Number="105" Name="LFO Phase Reset"/>
|
||||
|
||||
<Control Type="7bit" Number="107" Name="LFO Clock Divisions">
|
||||
<Values Min="0" Max="127">
|
||||
<ValueNameList>
|
||||
<Value Number="0" Name="4 Whole"/>
|
||||
<Value Number="6" Name="3 Whole"/>
|
||||
<Value Number="12" Name="2 Whole"/>
|
||||
<Value Number="18" Name="WH + 1/2 Dot"/>
|
||||
<Value Number="24" Name="WH + 1/2"/>
|
||||
<Value Number="30" Name="WH + 1/4"/>
|
||||
<Value Number="35" Name="WH"/>
|
||||
<Value Number="41" Name="1/2 Dot"/>
|
||||
<Value Number="47" Name="WH T"/>
|
||||
<Value Number="53" Name="1/2"/>
|
||||
<Value Number="59" Name="1/4 Dot"/>
|
||||
<Value Number="64" Name="1/2 T"/>
|
||||
<Value Number="70" Name="1/4"/>
|
||||
<Value Number="76" Name="1/8 Dot"/>
|
||||
<Value Number="82" Name="1/4 T"/>
|
||||
<Value Number="88" Name="1/8"/>
|
||||
<Value Number="94" Name="1/16 Dot"/>
|
||||
<Value Number="99" Name="1/8 T"/>
|
||||
<Value Number="105" Name="1/16"/>
|
||||
<Value Number="111" Name="1/16 T"/>
|
||||
<Value Number="117" Name="1/32"/>
|
||||
<Value Number="123" Name="1/32 T"/>
|
||||
</ValueNameList>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
<Control Type="7bit" Number="108" Name="Enable LFO MIDI Sync">
|
||||
<Values Min="0" Max="127">
|
||||
<UsesValueNameList Name="Toggle"/>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
<Control Type="7bit" Number="109" Name="Enable LFO Note Reset">
|
||||
<Values Min="0" Max="127">
|
||||
<UsesValueNameList Name="Toggle"/>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
<Control Type="7bit" Number="110" Name="Enable MIDI Note Spillover">
|
||||
<Values Min="0" Max="127">
|
||||
<UsesValueNameList Name="Toggle"/>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
<Control Type="7bit" Number="113" Name="MIDI Note Mode">
|
||||
<Values Min="0" Max="127">
|
||||
<ValueNameList>
|
||||
<Value Number="0" Name="Off"/>
|
||||
<Value Number="42" Name="Absolute"/>
|
||||
<Value Number="84" Name="Relative"/>
|
||||
</ValueNameList>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
<Control Type="7bit" Number="114" Name="MIDI Tap Tempo (Latching)">
|
||||
<Values Min="0" Max="127">
|
||||
<ValueNameList>
|
||||
<Value Number="0" Name="Tap"/>
|
||||
</ValueNameList>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
<Control Type="7bit" Number="115" Name="MIDI Tap Tempo (Momentary)">
|
||||
<Values Min="0" Max="127">
|
||||
<ValueNameList>
|
||||
<Value Number="64" Name="Tap"/>
|
||||
</ValueNameList>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
<Control Type="7bit" Number="117" Name="Time/MIDI LED Select">
|
||||
<Values Min="0" Max="127">
|
||||
<ValueNameList>
|
||||
<Value Number="0" Name="Time LED"/>
|
||||
<Value Number="64" Name="MIDI LED"/>
|
||||
</ValueNameList>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
<Control Type="7bit" Number="119" Name="Enable Mod Wheel to LFO Amount">
|
||||
<Values Min="0" Max="127">
|
||||
<UsesValueNameList Name="Toggle"/>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
</ControlNameList>
|
||||
</MasterDeviceNames>
|
||||
</MIDINameDocument>
|
181
patchfiles/Moog_MF-108M_Cluster_Flux.midnam
Normal file
181
patchfiles/Moog_MF-108M_Cluster_Flux.midnam
Normal file
@ -0,0 +1,181 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE MIDINameDocument PUBLIC "-//MIDI Manufacturers Association//DTD MIDINameDocument 1.0//EN" "http://www.midi.org/dtds/MIDINameDocument10.dtd">
|
||||
<MIDINameDocument>
|
||||
<Author>David Robillard</Author>
|
||||
<MasterDeviceNames>
|
||||
<Manufacturer>Moog</Manufacturer>
|
||||
<Model>MF-108M Cluster Flux</Model>
|
||||
<CustomDeviceMode Name="Default">
|
||||
<ChannelNameSetAssignments>
|
||||
<ChannelNameSetAssign Channel="1" NameSet="Names"/>
|
||||
</ChannelNameSetAssignments>
|
||||
</CustomDeviceMode>
|
||||
<ChannelNameSet Name="Names">
|
||||
<AvailableForChannels>
|
||||
<AvailableChannel Channel="1" Available="true"/>
|
||||
</AvailableForChannels>
|
||||
<UsesControlNameList Name="Controls"/>
|
||||
<PatchBank Name="User Patches">
|
||||
<PatchNameList Name="User Patches"/>
|
||||
</PatchBank>
|
||||
</ChannelNameSet>
|
||||
<ControlNameList Name="Controls">
|
||||
<Control Type="7bit" Number="5" Name="Delay Time Portamento (Coarse)"/>
|
||||
<Control Type="7bit" Number="37" Name="Delay Time Portamento (Fine)"/>
|
||||
|
||||
<Control Type="7bit" Number="7" Name="Output Level Control (Coarse)"/>
|
||||
<Control Type="7bit" Number="39" Name="Output Level Control (Fine)"/>
|
||||
|
||||
<Control Type="7bit" Number="12" Name="Delay Time (Coarse)"/>
|
||||
<Control Type="7bit" Number="44" Name="Delay Time (Fine)"/>
|
||||
|
||||
<Control Type="7bit" Number="13" Name="Feedback (Coarse)"/>
|
||||
<Control Type="7bit" Number="45" Name="Feedback (Fine)"/>
|
||||
|
||||
<Control Type="7bit" Number="14" Name="Mix (Coarse)"/>
|
||||
<Control Type="7bit" Number="46" Name="Mix (Fine)"/>
|
||||
|
||||
<Control Type="7bit" Number="15" Name="LFO Rate (Coarse)"/>
|
||||
<Control Type="7bit" Number="47" Name="LFO Rate (Fine)"/>
|
||||
|
||||
<Control Type="7bit" Number="16" Name="LFO Amount (Coarse)"/>
|
||||
<Control Type="7bit" Number="48" Name="LFO Amount (Fine)"/>
|
||||
|
||||
<Control Type="7bit" Number="70" Name="LFO Waveform">
|
||||
<Values Min="0" Max="127">
|
||||
<ValueNameList>
|
||||
<Value Number="0" Name="Sine"/>
|
||||
<Value Number="16" Name="Triangle"/>
|
||||
<Value Number="32" Name="Square"/>
|
||||
<Value Number="48" Name="Saw"/>
|
||||
<Value Number="64" Name="Ramp"/>
|
||||
<Value Number="80" Name="Random Stepped"/>
|
||||
<Value Number="96" Name="Smoothed Random"/>
|
||||
</ValueNameList>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
<Control Type="7bit" Number="74" Name="Range (Flange/Chorus)">
|
||||
<Values Min="0" Max="127">
|
||||
<ValueNameList>
|
||||
<Value Number="0" Name="Flange"/>
|
||||
<Value Number="64" Name="Chorus"/>
|
||||
</ValueNameList>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
<Control Type="7bit" Number="91" Name="Bypass On/Off">
|
||||
<Values Min="0" Max="127">
|
||||
<ValueNameList>
|
||||
<Value Number="0" Name="Bypassed"/>
|
||||
<Value Number="64" Name="Active"/>
|
||||
</ValueNameList>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
<Control Type="7bit" Number="71" Name="LFO Clock Divisions">
|
||||
<Values Min="0" Max="127">
|
||||
<ValueNameList>
|
||||
<Value Number="0" Name="4 Whole"/>
|
||||
<Value Number="6" Name="3 Whole"/>
|
||||
<Value Number="12" Name="2 Whole"/>
|
||||
<Value Number="18" Name="WH + 1/2 Dot"/>
|
||||
<Value Number="24" Name="WH + 1/2"/>
|
||||
<Value Number="30" Name="WH + 1/4"/>
|
||||
<Value Number="35" Name="WH"/>
|
||||
<Value Number="41" Name="1/2 Dot"/>
|
||||
<Value Number="47" Name="WH T"/>
|
||||
<Value Number="53" Name="1/2"/>
|
||||
<Value Number="59" Name="1/4 Dot"/>
|
||||
<Value Number="64" Name="1/2 T"/>
|
||||
<Value Number="70" Name="1/4"/>
|
||||
<Value Number="76" Name="1/8 Dot"/>
|
||||
<Value Number="82" Name="1/4 T"/>
|
||||
<Value Number="88" Name="1/8"/>
|
||||
<Value Number="94" Name="1/16 Dot"/>
|
||||
<Value Number="99" Name="1/8 T"/>
|
||||
<Value Number="105" Name="1/16"/>
|
||||
<Value Number="111" Name="1/16 T"/>
|
||||
<Value Number="117" Name="1/32"/>
|
||||
<Value Number="123" Name="1/32 T"/>
|
||||
</ValueNameList>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
<Control Type="7bit" Number="72" Name="LFO Phase Reset"/>
|
||||
|
||||
<Control Type="7bit" Number="73" Name="Enable LFO Note Reset">
|
||||
<Values Min="0" Max="127">
|
||||
<UsesValueNameList Name="Toggle"/>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
<Control Type="7bit" Number="75" Name="Delay Time Range Multiplier">
|
||||
<Values Min="0" Max="127">
|
||||
<ValueNameList>
|
||||
<Value Number="0" Name="Off"/>
|
||||
<Value Number="32" Name="x2"/>
|
||||
<Value Number="64" Name="x4"/>
|
||||
<Value Number="96" Name="x8"/>
|
||||
</ValueNameList>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
<Control Type="7bit" Number="76" Name="MIDI Sync Enable">
|
||||
<Values Min="0" Max="127">
|
||||
<UsesValueNameList Name="Toggle"/>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
<Control Type="7bit" Number="77" Name="Enable MIDI Note Mode">
|
||||
<Values Min="0" Max="127">
|
||||
<UsesValueNameList Name="Toggle"/>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
<Control Type="7bit" Number="78" Name="Enable MIDI Note Spillover">
|
||||
<Values Min="0" Max="127">
|
||||
<UsesValueNameList Name="Toggle"/>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
<Control Type="7bit" Number="79" Name="Enable Mod Wheel to LFO Amount">
|
||||
<Values Min="0" Max="127">
|
||||
<UsesValueNameList Name="Toggle"/>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
<Control Type="7bit" Number="80" Name="Pitch Bend Amount">
|
||||
<Values Min="0" Max="127">
|
||||
<ValueNameList>
|
||||
<Value Number="0" Name="Off"/>
|
||||
<Value Number="16" Name="2 Semi"/>
|
||||
<Value Number="32" Name="3 Semi"/>
|
||||
<Value Number="48" Name="4 Semi"/>
|
||||
<Value Number="64" Name="5 Semi"/>
|
||||
<Value Number="80" Name="7 Semi"/>
|
||||
<Value Number="96" Name="12 Semi"/>
|
||||
<Value Number="112" Name="24 Semi"/>
|
||||
</ValueNameList>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
<Control Type="7bit" Number="92" Name="MIDI Tap Tempo (Latching)">
|
||||
<Values Min="0" Max="127">
|
||||
<ValueNameList>
|
||||
<Value Number="0" Name="Tap"/>
|
||||
</ValueNameList>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
<Control Type="7bit" Number="93" Name="MIDI Tap Tempo (Momentary)">
|
||||
<Values Min="0" Max="127">
|
||||
<ValueNameList>
|
||||
<Value Number="64" Name="Tap"/>
|
||||
</ValueNameList>
|
||||
</Values>
|
||||
</Control>
|
||||
|
||||
</ControlNameList>
|
||||
</MasterDeviceNames>
|
||||
</MIDINameDocument>
|
@ -121,6 +121,20 @@
|
||||
<Patch Number="99" Name="Patch 99" ProgramChange="98"/>
|
||||
<Patch Number="100" Name="Patch 100" ProgramChange="99"/>
|
||||
</PatchNameList>
|
||||
<ValueNameList Name="Toggle">
|
||||
<Value Number="0" Name="Off"/>
|
||||
<Value Number="64" Name="On"/>
|
||||
</ValueNameList>
|
||||
<ValueNameList Name="PitchRange">
|
||||
<Value Number="0" Name="Off"/>
|
||||
<Value Number="16" Name="2 Semi"/>
|
||||
<Value Number="32" Name="3 Semi"/>
|
||||
<Value Number="48" Name="4 Semi"/>
|
||||
<Value Number="64" Name="5 Semi"/>
|
||||
<Value Number="80" Name="7 Semi"/>
|
||||
<Value Number="96" Name="12 Semi"/>
|
||||
<Value Number="112" Name="24 Semi"/>
|
||||
</ValueNameList>
|
||||
<ControlNameList Name="Controls">
|
||||
<!-- Modulation -->
|
||||
<Control Type="7bit" Number="3" Name="LFO Rate (Coarse)"/>
|
||||
@ -129,21 +143,94 @@
|
||||
<Control Type="7bit" Number="45" Name="LFO VCO Amount (Fine)"/>
|
||||
<Control Type="7bit" Number="12" Name="LFO VCF Amount (Coarse)"/>
|
||||
<Control Type="7bit" Number="44" Name="LFO VCF Amount (Fine)"/>
|
||||
<Control Type="7bit" Number="87" Name="LFO MIDI Sync"/>
|
||||
<Control Type="7bit" Number="86" Name="LFO Sync Clock Div"/>
|
||||
<Control Type="7bit" Number="82" Name="LFO Key Trigger"/>
|
||||
<Control Type="7bit" Number="87" Name="LFO MIDI Sync">
|
||||
<Values Min="0" Max="127">
|
||||
<ValueNameList>
|
||||
<Value Number="0" Name="Internal"/>
|
||||
<Value Number="16" Name="MIDI Clock"/>
|
||||
</ValueNameList>
|
||||
</Values>
|
||||
</Control>
|
||||
<Control Type="7bit" Number="86" Name="LFO Sync Clock Div">
|
||||
<Values Min="0" Max="127">
|
||||
<ValueNameList>
|
||||
<Value Number="0" Name="4 Whole"/>
|
||||
<Value Number="7" Name="3 Whole"/>
|
||||
<Value Number="13" Name="2 Whole"/>
|
||||
<Value Number="19" Name="WH + 1/2"/>
|
||||
<Value Number="25" Name="WH"/>
|
||||
<Value Number="31" Name="1/2 Dot"/>
|
||||
<Value Number="37" Name="WH T"/>
|
||||
<Value Number="43" Name="1/2"/>
|
||||
<Value Number="49" Name="1/4 Dot"/>
|
||||
<Value Number="55" Name="1/2 T"/>
|
||||
<Value Number="61" Name="1/4"/>
|
||||
<Value Number="68" Name="1/8 Dot"/>
|
||||
<Value Number="74" Name="1/4 T"/>
|
||||
<Value Number="80" Name="1/8"/>
|
||||
<Value Number="86" Name="1/16 Dot"/>
|
||||
<Value Number="92" Name="1/8 T"/>
|
||||
<Value Number="98" Name="1/16"/>
|
||||
<Value Number="104" Name="1/16 T"/>
|
||||
<Value Number="116" Name="1/32"/>
|
||||
<Value Number="122" Name="1/64 T"/>
|
||||
</ValueNameList>
|
||||
</Values>
|
||||
</Control>
|
||||
<Control Type="7bit" Number="82" Name="LFO Key Trigger">
|
||||
<Values Min="0" Max="127">
|
||||
<UsesValueNameList Name="Toggle"/>
|
||||
</Values>
|
||||
</Control>
|
||||
<!-- Oscillators -->
|
||||
<Control Type="7bit" Number="70" Name="VCO 1 Wave"/>
|
||||
<Control Type="7bit" Number="71" Name="VCO 2 Wave"/>
|
||||
<Control Type="7bit" Number="70" Name="VCO 1 Wave">
|
||||
<Values Min="0" Max="127">
|
||||
<ValueNameList>
|
||||
<Value Number="0" Name="Saw"/>
|
||||
<Value Number="64" Name="Square"/>
|
||||
</ValueNameList>
|
||||
</Values>
|
||||
</Control>
|
||||
<Control Type="7bit" Number="71" Name="VCO 2 Wave">
|
||||
<Values Min="0" Max="127">
|
||||
<ValueNameList>
|
||||
<Value Number="0" Name="Saw"/>
|
||||
<Value Number="64" Name="Square"/>
|
||||
</ValueNameList>
|
||||
</Values>
|
||||
</Control>
|
||||
<Control Type="7bit" Number="17" Name="VCO 2 Freq (Coarse)"/>
|
||||
<Control Type="7bit" Number="49" Name="VCO 2 Freq (Fine)"/>
|
||||
<Control Type="7bit" Number="18" Name="VCO 2 Beat (Coarse)"/>
|
||||
<!-- Duplicate <Control Type="7bit" Number="50" Name="VCO 2 Beat (Fine)"/> -->
|
||||
<Control Type="7bit" Number="81" Name="Note Sync"/>
|
||||
<Control Type="7bit" Number="81" Name="Note Sync">
|
||||
<Values Min="0" Max="127">
|
||||
<UsesValueNameList Name="Toggle"/>
|
||||
</Values>
|
||||
</Control>
|
||||
<Control Type="7bit" Number="5" Name="Glide Rate"/>
|
||||
<Control Type="7bit" Number="65" Name="Glide Switch"/>
|
||||
<Control Type="7bit" Number="92" Name="Glide Type"/>
|
||||
<Control Type="7bit" Number="83" Name="Legato Glide"/>
|
||||
<Control Type="7bit" Number="65" Name="Glide Switch">
|
||||
<Values Min="0" Max="127">
|
||||
<UsesValueNameList Name="Toggle"/>
|
||||
</Values>
|
||||
</Control>
|
||||
<Control Type="7bit" Number="92" Name="Glide Type">
|
||||
<Values Min="0" Max="127">
|
||||
<ValueNameList>
|
||||
<Value Number="0" Name="Linear Constant Rate"/>
|
||||
<Value Number="43" Name="Linear Constant Time"/>
|
||||
<Value Number="85" Name="Exponential"/>
|
||||
</ValueNameList>
|
||||
</Values>
|
||||
</Control>
|
||||
<Control Type="7bit" Number="83" Name="Legato Glide">
|
||||
<Values Min="0" Max="127">
|
||||
<ValueNameList>
|
||||
<Value Number="0" Name="Always Glide"/>
|
||||
<Value Number="43" Name="Glide Legato Notes Only"/>
|
||||
</ValueNameList>
|
||||
</Values>
|
||||
</Control>
|
||||
<!-- Mixer -->
|
||||
<Control Type="7bit" Number="15" Name="VCO 1 (Coarse)"/>
|
||||
<Control Type="7bit" Number="47" Name="VCO 1 (Fine)"/>
|
||||
@ -174,20 +261,48 @@
|
||||
<Control Type="7bit" Number="61" Name="VCA Decay/Release (Fine)"/>
|
||||
<Control Type="7bit" Number="30" Name="VCA Sustain (Coarse)"/>
|
||||
<Control Type="7bit" Number="62" Name="VCA Sustain (Fine)"/>
|
||||
<Control Type="7bit" Number="72" Name="Release Switch"/>
|
||||
<Control Type="7bit" Number="73" Name="Trigger Mode"/>
|
||||
<Control Type="7bit" Number="72" Name="Release Switch">
|
||||
<Values Min="0" Max="127">
|
||||
<UsesValueNameList Name="Toggle"/>
|
||||
</Values>
|
||||
</Control>
|
||||
<Control Type="7bit" Number="73" Name="Trigger Mode">
|
||||
<Values Min="0" Max="127">
|
||||
<ValueNameList>
|
||||
<Value Number="0" Name="Legato On"/>
|
||||
<Value Number="43" Name="Legato Off"/>
|
||||
<Value Number="85" Name="EG Reset"/>
|
||||
</ValueNameList>
|
||||
</Values>
|
||||
</Control>
|
||||
<!-- Volume -->
|
||||
<Control Type="7bit" Number="7" Name="Volume (Coarse)"/>
|
||||
<Control Type="7bit" Number="39" Name="Volume (Fine)"/>
|
||||
<Control Type="7bit" Number="90" Name="Volume Velocity Sensitivity"/>
|
||||
<!-- Keyboard Response -->
|
||||
<Control Type="7bit" Number="91" Name="Key Priority"/>
|
||||
<Control Type="7bit" Number="91" Name="Key Priority">
|
||||
<Values Min="0" Max="127">
|
||||
<ValueNameList>
|
||||
<Value Number="0" Name="Low"/>
|
||||
<Value Number="43" Name="High"/>
|
||||
<Value Number="85" Name="Last"/>
|
||||
</ValueNameList>
|
||||
</Values>
|
||||
</Control>
|
||||
<!-- Mod Wheel Response -->
|
||||
<Control Type="7bit" Number="1" Name="Mod Wheel (Coarse)"/>
|
||||
<Control Type="7bit" Number="33" Name="Mod Wheel (Fine)"/>
|
||||
<!-- Pitch Wheel Response -->
|
||||
<Control Type="7bit" Number="107" Name="Bend Up Amount"/>
|
||||
<Control Type="7bit" Number="108" Name="Bend Down Amount"/>
|
||||
<Control Type="7bit" Number="107" Name="Bend Up Amount">
|
||||
<Values Min="0" Max="127">
|
||||
<UsesValueNameList Name="PitchRange"/>
|
||||
</Values>
|
||||
</Control>
|
||||
<Control Type="7bit" Number="108" Name="Bend Down Amount">
|
||||
<Values Min="0" Max="127">
|
||||
<UsesValueNameList Name="PitchRange"/>
|
||||
</Values>
|
||||
</Control>
|
||||
<!-- Control -->
|
||||
<Control Type="7bit" Number="122" Name="Local Control Off"/>
|
||||
<Control Type="7bit" Number="120" Name="All Sounds Off"/>
|
||||
|
7
wscript
7
wscript
@ -163,6 +163,11 @@ def set_compiler_flags (conf,opt):
|
||||
# Prevents visibility issues in standard headers
|
||||
conf.define("_DARWIN_C_SOURCE", 1)
|
||||
|
||||
if conf.options.asan:
|
||||
conf.check_cxx(cxxflags=["-fsanitize=address"], linkflags=["-fsanitize=address"])
|
||||
cxx_flags.append('-fsanitize=address')
|
||||
linker_flags.append('-fsanitize=address')
|
||||
|
||||
if is_clang and platform == "darwin":
|
||||
# Silence warnings about the non-existing osx clang compiler flags
|
||||
# -compatibility_version and -current_version. These are Waf
|
||||
@ -505,6 +510,8 @@ def options(opt):
|
||||
help='Do not ask questions that require confirmation during the build')
|
||||
opt.add_option('--cxx11', action='store_true', default=False, dest='cxx11',
|
||||
help='Turn on c++11 compiler flags (-std=c++11)')
|
||||
opt.add_option('--address-sanitizer', action='store_true', default=False, dest='asan',
|
||||
help='Turn on AddressSanitizer (requires GCC >= 4.8 or clang)')
|
||||
for i in children:
|
||||
opt.recurse(i)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user