// static EffectManifest AutoPanEffect::getManifest() { EffectManifest manifest; manifest.setId(getId()); manifest.setName(QObject::tr("AutoPan")); manifest.setAuthor("The Mixxx Team"); manifest.setVersion("1.0"); manifest.setDescription(QObject::tr("Bounce the sound from a channel " "to another, roughly or softly, fully or partially, fastly or slowly. " "A delay, inversed on each side, is added to increase the " "spatial move and the period can be synced with the BPM.")); // Period EffectManifestParameter* period = manifest.addParameter(); period->setId("period"); period->setName(QObject::tr("Period")); period->setDescription(QObject::tr("How fast the sound goes from a side to another\n" "1/4 - 4 beats rounded to 1/2 beat if tempo is detected (decks and samplers)\n" "1/4 - 4 seconds if tempo is detected (mic & aux inputs, master mix)")); period->setControlHint(EffectManifestParameter::ControlHint::KNOB_LINEAR); period->setSemanticHint(EffectManifestParameter::SemanticHint::UNKNOWN); period->setUnitsHint(EffectManifestParameter::UnitsHint::UNKNOWN); period->setDefaultLinkType(EffectManifestParameter::LinkType::LINKED); period->setDefaultLinkInversion(EffectManifestParameter::LinkInversion::INVERTED); period->setMinimum(0.0); period->setMaximum(4.0); period->setDefault(2.0); EffectManifestParameter* smoothing = manifest.addParameter(); smoothing->setId("smoothing"); smoothing->setName(QObject::tr("Smoothing")); smoothing->setShortName(QObject::tr("Smooth")); smoothing->setDescription( QObject::tr("How smoothly the signal goes from one side to the other")); smoothing->setControlHint(EffectManifestParameter::ControlHint::KNOB_LOGARITHMIC); smoothing->setSemanticHint(EffectManifestParameter::SemanticHint::UNKNOWN); smoothing->setUnitsHint(EffectManifestParameter::UnitsHint::UNKNOWN); smoothing->setDefaultLinkType(EffectManifestParameter::LinkType::LINKED); smoothing->setMinimum(0.25); smoothing->setMaximum(0.50); // there are two steps per period so max is half smoothing->setDefault(0.50); // TODO(Ferran Pujol): when KnobComposedMaskedRing branch is merged to master, // make the scaleStartParameter for this be 1. // Width : applied on the channel with gain reducing. EffectManifestParameter* width = manifest.addParameter(); width->setId("width"); width->setName(QObject::tr("Width")); width->setDescription("How far the signal goes to each side"); width->setControlHint(EffectManifestParameter::ControlHint::KNOB_LINEAR); width->setSemanticHint(EffectManifestParameter::SemanticHint::UNKNOWN); width->setUnitsHint(EffectManifestParameter::UnitsHint::UNKNOWN); width->setDefaultLinkType(EffectManifestParameter::LinkType::LINKED); width->setMinimum(0.0); width->setMaximum(1.0); // 0.02 * sampleRate => 20ms width->setDefault(0.5); return manifest; }
// static EffectManifest FilterEffect::getManifest() { EffectManifest manifest; manifest.setId(getId()); manifest.setName(QObject::tr("Filter")); manifest.setAuthor("The Mixxx Team"); manifest.setVersion("1.0"); manifest.setDescription(QObject::tr("The filter changes the tone of the " "music by allowing only high or low " "frequencies to pass through.")); manifest.setEffectRampsFromDry(true); manifest.setIsForFilterKnob(true); EffectManifestParameter* lpf = manifest.addParameter(); lpf->setId("lpf"); lpf->setName(QObject::tr("LPF")); lpf->setDescription(QObject::tr("Corner frequency ratio of the low pass filter")); lpf->setControlHint(EffectManifestParameter::CONTROL_KNOB_LOGARITHMIC); lpf->setSemanticHint(EffectManifestParameter::SEMANTIC_UNKNOWN); lpf->setUnitsHint(EffectManifestParameter::UNITS_UNKNOWN); lpf->setDefaultLinkType(EffectManifestParameter::LINK_LINKED_LEFT); lpf->setNeutralPointOnScale(1); lpf->setDefault(kMaxCorner); lpf->setMinimum(kMinCorner); lpf->setMaximum(kMaxCorner); EffectManifestParameter* q = manifest.addParameter(); q->setId("q"); q->setName(QObject::tr("Q")); q->setDescription(QObject::tr("Resonance of the filters, default = Flat top")); q->setControlHint(EffectManifestParameter::CONTROL_KNOB_LOGARITHMIC); q->setSemanticHint(EffectManifestParameter::SEMANTIC_UNKNOWN); q->setUnitsHint(EffectManifestParameter::UNITS_SAMPLERATE); q->setDefault(2.8); // 0.707106781 = Butterworth q->setMinimum(0.4); q->setMaximum(4.0); EffectManifestParameter* hpf = manifest.addParameter(); hpf->setId("hpf"); hpf->setName(QObject::tr("HPF")); hpf->setDescription(QObject::tr("Corner frequency ratio of the high pass filter")); hpf->setControlHint(EffectManifestParameter::CONTROL_KNOB_LOGARITHMIC); hpf->setSemanticHint(EffectManifestParameter::SEMANTIC_UNKNOWN); hpf->setUnitsHint(EffectManifestParameter::UNITS_UNKNOWN); hpf->setDefaultLinkType(EffectManifestParameter::LINK_LINKED_RIGHT); hpf->setNeutralPointOnScale(0.0); hpf->setDefault(kMinCorner); hpf->setMinimum(kMinCorner); hpf->setMaximum(kMaxCorner); return manifest; }
// static EffectManifest MoogLadder4FilterEffect::getManifest() { EffectManifest manifest; manifest.setId(getId()); manifest.setName(QObject::tr("Moog Ladder 4 Filter")); manifest.setAuthor("The Mixxx Team"); manifest.setVersion("1.0"); manifest.setDescription(QObject::tr( "A 4-pole Moog ladder filter, based on Antti Houvilainen's non linear digital implementation")); manifest.setEffectRampsFromDry(true); manifest.setIsForFilterKnob(true); EffectManifestParameter* lpf = manifest.addParameter(); lpf->setId("lpf"); lpf->setName(QObject::tr("LPF")); lpf->setDescription(QObject::tr("Corner frequency ratio of the low pass filter")); lpf->setControlHint(EffectManifestParameter::CONTROL_KNOB_LOGARITHMIC); lpf->setSemanticHint(EffectManifestParameter::SEMANTIC_UNKNOWN); lpf->setUnitsHint(EffectManifestParameter::UNITS_UNKNOWN); lpf->setDefaultLinkType(EffectManifestParameter::LINK_LINKED_LEFT); lpf->setNeutralPointOnScale(1); lpf->setDefault(kMaxCorner); lpf->setMinimum(kMinCorner); lpf->setMaximum(kMaxCorner); EffectManifestParameter* q = manifest.addParameter(); q->setId("resonance"); q->setName(QObject::tr("Resonance")); q->setDescription(QObject::tr("Resonance of the filters. 4 = self oscillating")); q->setControlHint(EffectManifestParameter::CONTROL_KNOB_LOGARITHMIC); q->setSemanticHint(EffectManifestParameter::SEMANTIC_UNKNOWN); q->setUnitsHint(EffectManifestParameter::UNITS_SAMPLERATE); q->setDefault(0); q->setMinimum(0.0); q->setMaximum(4.0); EffectManifestParameter* hpf = manifest.addParameter(); hpf->setId("hpf"); hpf->setName(QObject::tr("HPF")); hpf->setDescription(QObject::tr("Corner frequency ratio of the high pass filter")); hpf->setControlHint(EffectManifestParameter::CONTROL_KNOB_LOGARITHMIC); hpf->setSemanticHint(EffectManifestParameter::SEMANTIC_UNKNOWN); hpf->setUnitsHint(EffectManifestParameter::UNITS_UNKNOWN); hpf->setDefaultLinkType(EffectManifestParameter::LINK_LINKED_RIGHT); hpf->setNeutralPointOnScale(0.0); hpf->setDefault(kMinCorner); hpf->setMinimum(kMinCorner); hpf->setMaximum(kMaxCorner); return manifest; }
// static EffectManifest EchoEffect::getManifest() { EffectManifest manifest; manifest.setId(getId()); manifest.setName(QObject::tr("Echo")); manifest.setAuthor("The Mixxx Team"); manifest.setVersion("1.0"); manifest.setDescription(QObject::tr("Simple Echo with pingpong")); EffectManifestParameter* time = manifest.addParameter(); time->setId("send_amount"); time->setName(QObject::tr("Send")); time->setDescription( QObject::tr("How much of the signal to send into the delay buffer")); time->setControlHint(EffectManifestParameter::CONTROL_KNOB_LINEAR); time->setSemanticHint(EffectManifestParameter::SEMANTIC_UNKNOWN); time->setUnitsHint(EffectManifestParameter::UNITS_UNKNOWN); time->setMinimum(0.0); time->setDefault(1.0); time->setMaximum(1.0); time = manifest.addParameter(); time->setId("delay_time"); time->setName(QObject::tr("Delay")); time->setDescription(QObject::tr("Delay time (seconds)")); time->setControlHint(EffectManifestParameter::CONTROL_KNOB_LINEAR); time->setSemanticHint(EffectManifestParameter::SEMANTIC_UNKNOWN); time->setUnitsHint(EffectManifestParameter::UNITS_TIME); time->setDefaultLinkType(EffectManifestParameter::LINK_LINKED); time->setMinimum(0.1); time->setDefault(0.25); time->setMaximum(2.0); time = manifest.addParameter(); time->setId("feedback_amount"); time->setName(QObject::tr("Feedback")); time->setDescription( QObject::tr("Amount the echo fades each time it loops")); time->setControlHint(EffectManifestParameter::CONTROL_KNOB_LOGARITHMIC); time->setSemanticHint(EffectManifestParameter::SEMANTIC_UNKNOWN); time->setUnitsHint(EffectManifestParameter::UNITS_UNKNOWN); time->setMinimum(0.00); time->setDefault(0.40); time->setMaximum(1.0); time = manifest.addParameter(); time->setId("pingpong_amount"); time->setName(QObject::tr("PingPong")); time->setDescription( QObject::tr("As the ping-pong amount increases, increasing amounts " "of the echoed signal is bounced between the left and " "right speakers.")); time->setControlHint(EffectManifestParameter::CONTROL_KNOB_LINEAR); time->setSemanticHint(EffectManifestParameter::SEMANTIC_UNKNOWN); time->setUnitsHint(EffectManifestParameter::UNITS_UNKNOWN); time->setMinimum(0.0); time->setDefault(0.0); time->setMaximum(1.0); return manifest; }
// static EffectManifest BitCrusherEffect::getManifest() { EffectManifest manifest; manifest.setId(getId()); manifest.setName(QObject::tr("BitCrusher")); manifest.setAuthor("The Mixxx Team"); manifest.setVersion("1.0"); manifest.setDescription(QObject::tr( "The BitCrusher is an effect that adds quantisation noise to the signal " "by the reduction of the resolution or bandwidth of the samples.")); manifest.setEffectRampsFromDry(true); EffectManifestParameter* depth = manifest.addParameter(); depth->setId("bit_depth"); depth->setName(QObject::tr("Bit Depth")); depth->setDescription(QObject::tr("Adjusts the bit depth of the samples.")); depth->setControlHint(EffectManifestParameter::ControlHint::KNOB_LOGARITHMIC); depth->setSemanticHint(EffectManifestParameter::SemanticHint::UNKNOWN); depth->setUnitsHint(EffectManifestParameter::UnitsHint::UNKNOWN); depth->setDefaultLinkType(EffectManifestParameter::LinkType::LINKED); depth->setDefaultLinkInversion(EffectManifestParameter::LinkInversion::INVERTED); depth->setNeutralPointOnScale(1.0); depth->setDefault(16); // for values -1 0 +1 // we do not allow a 1 bit version because this causes a distortion because of the missing sign bit depth->setMinimum(2); depth->setMaximum(16); EffectManifestParameter* frequency = manifest.addParameter(); frequency->setId("downsample"); frequency->setName(QObject::tr("Downsampling")); frequency->setShortName(QObject::tr("Down")); frequency->setDescription(QObject::tr("Adjusts the sample rate, to which the signal is downsampled.")); frequency->setControlHint(EffectManifestParameter::ControlHint::KNOB_LOGARITHMIC); frequency->setSemanticHint(EffectManifestParameter::SemanticHint::UNKNOWN); frequency->setUnitsHint(EffectManifestParameter::UnitsHint::SAMPLERATE); frequency->setDefaultLinkType(EffectManifestParameter::LinkType::LINKED); frequency->setDefaultLinkInversion(EffectManifestParameter::LinkInversion::INVERTED); frequency->setNeutralPointOnScale(1.0); frequency->setDefault(1.0); frequency->setMinimum(0.02); frequency->setMaximum(1.0); return manifest; }
// static EffectManifest ReverbEffect::getManifest() { EffectManifest manifest; manifest.setId(getId()); manifest.setName(QObject::tr("Reverb")); manifest.setAuthor("The Mixxx Team, CAPS Plugins"); manifest.setVersion("1.0"); manifest.setDescription("This is a port of the GPL'ed CAPS Reverb plugin, " "which has the following description:" "This is based on some of the famous Stanford CCRMA reverbs " "(NRev, KipRev) all based on the Chowning/Moorer/Schroeder " "reverberators, which use networks of simple allpass and comb" "delay filters."); EffectManifestParameter* time = manifest.addParameter(); time->setId("bandwidth"); time->setName(QObject::tr("Bandwidth")); time->setDescription(QObject::tr("Higher bandwidth values cause more " "bright (high-frequency) tones to be included")); time->setControlHint(EffectManifestParameter::CONTROL_KNOB_LINEAR); time->setSemanticHint(EffectManifestParameter::SEMANTIC_UNKNOWN); time->setUnitsHint(EffectManifestParameter::UNITS_UNKNOWN); time->setDefaultLinkType(EffectManifestParameter::LINK_LINKED_LEFT_RIGHT); time->setMinimum(0.0005); time->setDefault(0.5); time->setMaximum(1.0); EffectManifestParameter* damping = manifest.addParameter(); damping->setId("damping"); damping->setName(QObject::tr("Damping")); damping->setDescription(QObject::tr("Higher damping values cause " "reverberations to die out more quickly.")); damping->setControlHint(EffectManifestParameter::CONTROL_KNOB_LINEAR); damping->setSemanticHint(EffectManifestParameter::SEMANTIC_UNKNOWN); damping->setUnitsHint(EffectManifestParameter::UNITS_UNKNOWN); damping->setDefaultLinkType(EffectManifestParameter::LINK_LINKED); damping->setMinimum(0.005); damping->setDefault(0.5); damping->setMaximum(1.0); return manifest; }
// static EffectManifest BitCrusherEffect::getManifest() { EffectManifest manifest; manifest.setId(getId()); manifest.setName(QObject::tr("BitCrusher")); manifest.setAuthor("The Mixxx Team"); manifest.setVersion("1.0"); manifest.setDescription("TODO"); manifest.setEffectRampsFromDry(true); EffectManifestParameter* depth = manifest.addParameter(); depth->setId("bit_depth"); depth->setName(QObject::tr("Bit Depth")); depth->setDescription("TODO"); depth->setControlHint(EffectManifestParameter::CONTROL_KNOB_LOGARITHMIC); depth->setSemanticHint(EffectManifestParameter::SEMANTIC_UNKNOWN); depth->setUnitsHint(EffectManifestParameter::UNITS_UNKNOWN); depth->setDefaultLinkType(EffectManifestParameter::LINK_LINKED); depth->setNeutralPointOnScale(1.0); depth->setDefault(16); // for values -1 0 +1 // we do not allow a 1 bit version because this causes a distortion because of the missing sign bit depth->setMinimum(2); depth->setMaximum(16); EffectManifestParameter* frequency = manifest.addParameter(); frequency->setId("downsample"); frequency->setName(QObject::tr("Downsampling")); frequency->setDescription("TODO"); frequency->setControlHint(EffectManifestParameter::CONTROL_KNOB_LOGARITHMIC); frequency->setSemanticHint(EffectManifestParameter::SEMANTIC_UNKNOWN); frequency->setUnitsHint(EffectManifestParameter::UNITS_SAMPLERATE); frequency->setDefaultLinkType(EffectManifestParameter::LINK_LINKED); frequency->setNeutralPointOnScale(1.0); frequency->setDefault(1.0); frequency->setMinimum(0.02); frequency->setMaximum(1.0); return manifest; }
// static EffectManifest FlangerEffect::getManifest() { EffectManifest manifest; manifest.setId(getId()); manifest.setName(QObject::tr("Flanger")); manifest.setAuthor("The Mixxx Team"); manifest.setVersion("1.0"); manifest.setDescription(QObject::tr( "A simple modulation effect, created by taking the input signal " "and mixing it with a delayed, pitch modulated copy of itself.")); EffectManifestParameter* depth = manifest.addParameter(); depth->setId("depth"); depth->setName(QObject::tr("Depth")); depth->setDescription(QObject::tr("Controls the intensity of the effect.")); depth->setControlHint(EffectManifestParameter::CONTROL_KNOB_LINEAR); depth->setSemanticHint(EffectManifestParameter::SEMANTIC_UNKNOWN); depth->setUnitsHint(EffectManifestParameter::UNITS_UNKNOWN); depth->setDefaultLinkType(EffectManifestParameter::LINK_LINKED_LEFT_RIGHT); depth->setDefault(0.5); depth->setMinimum(0.0); depth->setMaximum(1.0); EffectManifestParameter* delay = manifest.addParameter(); delay->setId("delay"); delay->setName(QObject::tr("Delay")); delay->setDescription(QObject::tr("Sets the value for the delay length.")); delay->setControlHint(EffectManifestParameter::CONTROL_KNOB_LINEAR); delay->setSemanticHint(EffectManifestParameter::SEMANTIC_UNKNOWN); delay->setUnitsHint(EffectManifestParameter::UNITS_UNKNOWN); delay->setDefault(9001.0); delay->setMinimum(50.0); delay->setMaximum(10000.0); EffectManifestParameter* period = manifest.addParameter(); period->setId("period"); period->setName(QObject::tr("Period")); period->setDescription(QObject::tr("Controls the speed of the effect.")); period->setControlHint(EffectManifestParameter::CONTROL_KNOB_LINEAR); period->setSemanticHint(EffectManifestParameter::SEMANTIC_UNKNOWN); period->setUnitsHint(EffectManifestParameter::UNITS_UNKNOWN); period->setDefault(1500000.0); period->setMinimum(50000.0); period->setMaximum(2000000.0); return manifest; }
// static EffectManifest FlangerEffect::getManifest() { EffectManifest manifest; manifest.setId(getId()); manifest.setName(QObject::tr("Flanger")); manifest.setShortName(QObject::tr("Flanger")); manifest.setAuthor("The Mixxx Team"); manifest.setVersion("1.0"); manifest.setDescription(QObject::tr( "Mixes the input with a delayed, pitch modulated copy of itself to create comb filtering")); EffectManifestParameter* speed = manifest.addParameter(); speed->setId("speed"); speed->setName(QObject::tr("Speed")); speed->setShortName(QObject::tr("Speed")); speed->setDescription(QObject::tr( "Speed of the LFO (low frequency oscillator)\n" "32 - 1/4 beats rounded to 1/2 beat per LFO cycle if tempo is detected\n" "1/32 - 4 Hz if no tempo is detected")); speed->setControlHint(EffectManifestParameter::ControlHint::KNOB_LOGARITHMIC_INVERSE); speed->setSemanticHint(EffectManifestParameter::SemanticHint::UNKNOWN); speed->setMinimum(kMinLfoBeats); speed->setMaximum(kMaxLfoBeats); speed->setDefault(8); EffectManifestParameter* width = manifest.addParameter(); width->setId("width"); width->setName(QObject::tr("Width")); width->setShortName(QObject::tr("Width")); width->setDescription(QObject::tr( "Delay amplitude of the LFO (low frequency oscillator)")); width->setControlHint(EffectManifestParameter::ControlHint::KNOB_LOGARITHMIC); width->setSemanticHint(EffectManifestParameter::SemanticHint::UNKNOWN); width->setUnitsHint(EffectManifestParameter::UnitsHint::UNKNOWN); width->setDefault(kMaxLfoWidthMs / 2); width->setMinimum(0.0); width->setMaximum(kMaxLfoWidthMs); EffectManifestParameter* manual = manifest.addParameter(); manual->setId("manual"); manual->setName(QObject::tr("Manual")); manual->setShortName(QObject::tr("Manual")); manual->setDescription(QObject::tr( "Delay offset of the LFO (low frequency oscillator).\n" "With width at zero, this allows for manually sweeping over the entire delay range.")); manual->setControlHint(EffectManifestParameter::ControlHint::KNOB_LOGARITHMIC); manual->setSemanticHint(EffectManifestParameter::SemanticHint::UNKNOWN); manual->setUnitsHint(EffectManifestParameter::UnitsHint::UNKNOWN); manual->setDefault(kCenterDelayMs); manual->setMinimum(kMinDelayMs); manual->setMaximum(kMaxDelayMs); EffectManifestParameter* regen = manifest.addParameter(); regen->setId("regen"); regen->setName(QObject::tr("Regeneration")); regen->setShortName(QObject::tr("Regen")); regen->setDescription(QObject::tr( "How much of the delay output is feed back into the input")); regen->setControlHint(EffectManifestParameter::ControlHint::KNOB_LINEAR); regen->setSemanticHint(EffectManifestParameter::SemanticHint::UNKNOWN); regen->setUnitsHint(EffectManifestParameter::UnitsHint::UNKNOWN); regen->setDefault(0.25); regen->setMinimum(0.0); regen->setMaximum(1.0); EffectManifestParameter* mix = manifest.addParameter(); mix->setId("mix"); mix->setName(QObject::tr("Mix")); mix->setShortName(QObject::tr("Mix")); mix->setDescription(QObject::tr( "Intensity of the effect")); mix->setControlHint(EffectManifestParameter::ControlHint::KNOB_LINEAR); mix->setSemanticHint(EffectManifestParameter::SemanticHint::UNKNOWN); mix->setUnitsHint(EffectManifestParameter::UnitsHint::UNKNOWN); mix->setDefaultLinkType(EffectManifestParameter::LinkType::LINKED); mix->setDefault(1.0); mix->setMinimum(0.0); mix->setMaximum(1.0); EffectManifestParameter* triplet = manifest.addParameter(); triplet->setId("triplet"); triplet->setName(QObject::tr("Triplets")); triplet->setShortName(QObject::tr("Triplets")); triplet->setDescription(QObject::tr( "Divide rounded 1/2 beats of the Period parameter by 3.")); triplet->setControlHint(EffectManifestParameter::ControlHint::TOGGLE_STEPPING); triplet->setSemanticHint(EffectManifestParameter::SemanticHint::UNKNOWN); triplet->setUnitsHint(EffectManifestParameter::UnitsHint::UNKNOWN); triplet->setDefault(0); triplet->setMinimum(0); triplet->setMaximum(1); return manifest; }
// static EffectManifest AutoPanEffect::getManifest() { EffectManifest manifest; manifest.setId(getId()); manifest.setName(QObject::tr("AutoPan")); manifest.setAuthor("The Mixxx Team"); manifest.setVersion("1.0"); manifest.setDescription(QObject::tr("Bounce the sound from a channel " "to another, roughly or softly, fully or partially, fastly or slowly. " "A delay, inversed on each side, is added to increase the " "spatial move and the period can be synced with the BPM.")); // Width : applied on the channel with gain reducing. EffectManifestParameter* width = manifest.addParameter(); width->setId("width"); width->setName(QObject::tr("Width")); width->setDescription("How far the signal goes on the left or on the right"); width->setControlHint(EffectManifestParameter::CONTROL_KNOB_LINEAR); width->setSemanticHint(EffectManifestParameter::SEMANTIC_UNKNOWN); width->setUnitsHint(EffectManifestParameter::UNITS_UNKNOWN); width->setDefaultLinkType(EffectManifestParameter::LINK_LINKED); width->setMinimum(0.0); width->setMaximum(1.0); // 0.02 * sampleRate => 20ms width->setDefault(0.5); // Period unit EffectManifestParameter* periodUnit = manifest.addParameter(); periodUnit->setId("periodUnit"); periodUnit->setName(QObject::tr("Sync")); periodUnit->setDescription(QObject::tr("Synchronizes the period with the BPM if it can be retrieved")); periodUnit->setControlHint(EffectManifestParameter::CONTROL_TOGGLE_STEPPING); periodUnit->setSemanticHint(EffectManifestParameter::SEMANTIC_UNKNOWN); periodUnit->setUnitsHint(EffectManifestParameter::UNITS_UNKNOWN); periodUnit->setDefault(1); periodUnit->setMinimum(0); periodUnit->setMaximum(1); // Period // The maximum is at 128 + 1 allowing 128 as max value and // enabling us to pause time when the parameter is above EffectManifestParameter* period = manifest.addParameter(); period->setId("period"); period->setName(QObject::tr("Period")); period->setDescription(QObject::tr("How fast the sound goes from a side to another," " following a logarithmic scale")); period->setControlHint(EffectManifestParameter::CONTROL_KNOB_LOGARITHMIC); period->setSemanticHint(EffectManifestParameter::SEMANTIC_UNKNOWN); period->setUnitsHint(EffectManifestParameter::UNITS_UNKNOWN); period->setDefaultLinkType(EffectManifestParameter::LINK_LINKED); period->setDefaultLinkInversion(EffectManifestParameter::LinkInversion::INVERTED); period->setMinimum(0.0625); // 1 / 16 period->setMaximum(129.0); // 128 + 1 period->setDefault(3.0); // This parameter controls the easing of the sound from a side to another. EffectManifestParameter* smoothing = manifest.addParameter(); smoothing->setId("smoothing"); smoothing->setName(QObject::tr("Smoothing")); smoothing->setShortName(QObject::tr("Smooth")); smoothing->setDescription( QObject::tr("How fast the signal goes from a channel to an other")); smoothing->setControlHint(EffectManifestParameter::CONTROL_KNOB_LOGARITHMIC); smoothing->setSemanticHint(EffectManifestParameter::SEMANTIC_UNKNOWN); smoothing->setUnitsHint(EffectManifestParameter::UNITS_UNKNOWN); smoothing->setMinimum(0.0); smoothing->setMaximum(0.5); // there are two steps per period so max is half smoothing->setDefault(0.25); // TODO(Ferran Pujol): when KnobComposedMaskedRing branch is merged to master, // make the scaleStartParameter for this be 1. return manifest; }