X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fparameter_descriptor.cc;h=660abbc6161b801c20ef954fddf7dc4125761744;hb=499e7907337da36d6d0440c22a2f63e3ada7c439;hp=619150071612f4155600d42a1b64032b96f0c06d;hpb=59af923b77bdc407f4a5f70f954879c84f4d2c71;p=ardour.git diff --git a/libs/ardour/parameter_descriptor.cc b/libs/ardour/parameter_descriptor.cc index 6191500716..660abbc616 100644 --- a/libs/ardour/parameter_descriptor.cc +++ b/libs/ardour/parameter_descriptor.cc @@ -24,6 +24,8 @@ #include "ardour/types.h" #include "ardour/utils.h" +#include "pbd/i18n.h" + namespace ARDOUR { ParameterDescriptor::ParameterDescriptor(const Evoral::Parameter& parameter) @@ -43,11 +45,26 @@ ParameterDescriptor::ParameterDescriptor(const Evoral::Parameter& parameter) , max_unbound(0) , enumeration(false) { + ScalePoints sp; + switch((AutomationType)parameter.type()) { case GainAutomation: upper = Config->get_max_gain(); normal = 1.0f; break; + case BusSendLevel: + upper = Config->get_max_gain (); + normal = 1.0f; + break; + case BusSendEnable: + normal = 1.0f; + toggled = true; + break; + case TrimAutomation: + upper = 10; // +20dB + lower = .1; // -20dB + normal = 1.0f; + break; case PanAzimuthAutomation: normal = 0.5f; // there really is no _normal but this works for stereo, sort of upper = 1.0f; @@ -58,6 +75,7 @@ ParameterDescriptor::ParameterDescriptor(const Evoral::Parameter& parameter) normal = 0.0f; break; case RecEnableAutomation: + case RecSafeAutomation: lower = 0.0; upper = 1.0; toggled = true; @@ -78,6 +96,7 @@ ParameterDescriptor::ParameterDescriptor(const Evoral::Parameter& parameter) case MidiCCAutomation: case MidiPgmChangeAutomation: case MidiChannelPressureAutomation: + case MidiNotePressureAutomation: lower = 0.0; normal = 0.0; upper = 127.0; @@ -87,6 +106,21 @@ ParameterDescriptor::ParameterDescriptor(const Evoral::Parameter& parameter) normal = 8192.0; upper = 16383.0; break; + case PhaseAutomation: + toggled = true; + break; + case MonitoringAutomation: + enumeration = true; + integer_step = true; + lower = MonitorAuto; + upper = MonitorDisk; /* XXX bump when we add MonitorCue */ + break; + case SoloIsolateAutomation: + toggled = true; + break; + case SoloSafeAutomation: + toggled = true; + break; default: break; } @@ -98,6 +132,7 @@ ParameterDescriptor::ParameterDescriptor() : Evoral::ParameterDescriptor() , key((uint32_t)-1) , datatype(Variant::NOTHING) + , type(NullAutomation) , unit(NONE) , step(0) , smallstep(0) @@ -116,7 +151,7 @@ ParameterDescriptor::update_steps() if (unit == ParameterDescriptor::MIDI_NOTE) { step = smallstep = 1; // semitone largestep = 12; // octave - } else if (type == GainAutomation) { + } else if (type == GainAutomation || type == TrimAutomation) { /* dB_coeff_step gives a step normalized for [0, max_gain]. This is like "slider position", so we convert from "slider position" to gain to have the correct unit here. */ @@ -124,6 +159,9 @@ ParameterDescriptor::update_steps() step = slider_position_to_gain(largestep / 10.0); smallstep = step; } else { + /* note that LV2Plugin::get_parameter_descriptor () + * overrides this is lv2:rangeStep is set for a port. + */ const float delta = upper - lower; /* 30 happens to be the total number of steps for a fader with default @@ -144,11 +182,41 @@ ParameterDescriptor::update_steps() step = step / logf(30.0f); largestep = largestep / logf(30.0f); } else if (integer_step) { - smallstep = std::max(1.0, rint(smallstep)); - step = std::max(1.0, rint(step)); - largestep = std::max(1.0, rint(largestep)); + smallstep = 1.0; + step = std::max(1.f, rintf (step)); + largestep = std::max(1.f, rintf (largestep)); } } } +std::string +ParameterDescriptor::midi_note_name (const uint8_t b) +{ + char buf[16]; + if (b > 127) { + snprintf(buf, sizeof(buf), "%d", b); + return buf; + } + + static const char* notes[] = { + S_("Note|C"), + S_("Note|C#"), + S_("Note|D"), + S_("Note|D#"), + S_("Note|E"), + S_("Note|F"), + S_("Note|F#"), + S_("Note|G"), + S_("Note|G#"), + S_("Note|A"), + S_("Note|A#"), + S_("Note|B") + }; + + /* MIDI note 0 is in octave -1 (in scientific pitch notation) */ + const int octave = b / 12 - 1; + snprintf (buf, sizeof (buf), "%s%d", notes[b % 12], octave); + return buf; +} + } // namespace ARDOUR