// static EffectManifestPointer FilterEffect::getManifest() { EffectManifestPointer pManifest(new EffectManifest()); pManifest->setId(getId()); pManifest->setName(QObject::tr("Filter")); pManifest->setShortName(QObject::tr("Filter")); pManifest->setAuthor("The Mixxx Team"); pManifest->setVersion("1.0"); pManifest->setDescription(QObject::tr( "Allows only high or low frequencies to play.")); pManifest->setEffectRampsFromDry(true); EffectManifestParameterPointer lpf = pManifest->addParameter(); lpf->setId("lpf"); lpf->setName(QObject::tr("Low Pass Filter Cutoff")); lpf->setShortName(QObject::tr("LPF")); lpf->setDescription(QObject::tr( "Corner frequency ratio of the low pass filter")); lpf->setControlHint(EffectManifestParameter::ControlHint::KNOB_LOGARITHMIC); lpf->setSemanticHint(EffectManifestParameter::SemanticHint::UNKNOWN); lpf->setUnitsHint(EffectManifestParameter::UnitsHint::HERTZ); lpf->setDefaultLinkType(EffectManifestParameter::LinkType::LINKED_LEFT); lpf->setNeutralPointOnScale(1); lpf->setDefault(kMaxCorner); lpf->setMinimum(kMinCorner); lpf->setMaximum(kMaxCorner); EffectManifestParameterPointer q = pManifest->addParameter(); q->setId("q"); q->setName(QObject::tr("Resonance")); q->setShortName(QObject::tr("Q")); q->setDescription(QObject::tr( "Resonance of the filters\n" "Default: flat top")); // What does this mean? q->setControlHint(EffectManifestParameter::ControlHint::KNOB_LOGARITHMIC); q->setSemanticHint(EffectManifestParameter::SemanticHint::UNKNOWN); q->setUnitsHint(EffectManifestParameter::UnitsHint::SAMPLERATE); q->setDefault(0.707106781); // 0.707106781 = Butterworth q->setMinimum(0.4); q->setMaximum(4.0); EffectManifestParameterPointer hpf = pManifest->addParameter(); hpf->setId("hpf"); hpf->setName(QObject::tr("High Pass Filter Cutoff")); hpf->setShortName(QObject::tr("HPF")); hpf->setDescription(QObject::tr( "Corner frequency ratio of the high pass filter")); hpf->setControlHint(EffectManifestParameter::ControlHint::KNOB_LOGARITHMIC); hpf->setSemanticHint(EffectManifestParameter::SemanticHint::UNKNOWN); hpf->setUnitsHint(EffectManifestParameter::UnitsHint::HERTZ); hpf->setDefaultLinkType(EffectManifestParameter::LinkType::LINKED_RIGHT); hpf->setNeutralPointOnScale(0.0); hpf->setDefault(kMinCorner); hpf->setMinimum(kMinCorner); hpf->setMaximum(kMaxCorner); return pManifest; }
// static EffectManifestPointer MoogLadder4FilterEffect::getManifest() { EffectManifestPointer pManifest(new EffectManifest()); pManifest->setId(getId()); pManifest->setName(QObject::tr("Moog Ladder 4 Filter")); pManifest->setShortName(QObject::tr("Moog Filter")); pManifest->setAuthor("The Mixxx Team"); pManifest->setVersion("1.0"); pManifest->setDescription(QObject::tr( "A 4-pole Moog ladder filter, based on Antti Houvilainen's non linear digital implementation")); pManifest->setEffectRampsFromDry(true); EffectManifestParameterPointer lpf = pManifest->addParameter(); lpf->setId("lpf"); lpf->setName(QObject::tr("LPF")); lpf->setDescription(QObject::tr("Corner frequency ratio of the low pass filter")); lpf->setControlHint(EffectManifestParameter::ControlHint::KNOB_LOGARITHMIC); lpf->setSemanticHint(EffectManifestParameter::SemanticHint::UNKNOWN); lpf->setUnitsHint(EffectManifestParameter::UnitsHint::UNKNOWN); lpf->setDefaultLinkType(EffectManifestParameter::LinkType::LINKED_LEFT); lpf->setNeutralPointOnScale(1); lpf->setDefault(kMaxCorner); lpf->setMinimum(kMinCorner); lpf->setMaximum(kMaxCorner); EffectManifestParameterPointer q = pManifest->addParameter(); q->setId("resonance"); q->setName(QObject::tr("Resonance")); q->setShortName(QObject::tr("Res")); q->setDescription(QObject::tr("Resonance of the filters. 4 = self oscillating")); q->setControlHint(EffectManifestParameter::ControlHint::KNOB_LOGARITHMIC); q->setSemanticHint(EffectManifestParameter::SemanticHint::UNKNOWN); q->setUnitsHint(EffectManifestParameter::UnitsHint::SAMPLERATE); q->setMinimum(0.0); q->setMaximum(4.0); q->setDefault(1.0); EffectManifestParameterPointer hpf = pManifest->addParameter(); hpf->setId("hpf"); hpf->setName(QObject::tr("HPF")); hpf->setDescription(QObject::tr("Corner frequency ratio of the high pass filter")); hpf->setControlHint(EffectManifestParameter::ControlHint::KNOB_LOGARITHMIC); hpf->setSemanticHint(EffectManifestParameter::SemanticHint::UNKNOWN); hpf->setUnitsHint(EffectManifestParameter::UnitsHint::UNKNOWN); hpf->setDefaultLinkType(EffectManifestParameter::LinkType::LINKED_RIGHT); hpf->setNeutralPointOnScale(0.0); hpf->setDefault(kMinCorner); hpf->setMinimum(kMinCorner); hpf->setMaximum(kMaxCorner); return pManifest; }
// static EffectManifestPointer Bessel4LVMixEQEffect::getManifest() { EffectManifestPointer pManifest(new EffectManifest()); pManifest->setId(getId()); pManifest->setName(QObject::tr("Bessel4 LV-Mix Isolator")); pManifest->setShortName(QObject::tr("Bessel4 ISO")); pManifest->setAuthor("The Mixxx Team"); pManifest->setVersion("1.0"); pManifest->setDescription(QObject::tr( "A Bessel 4th-order filter isolator with Lipshitz and Vanderkooy mix (bit perfect unity, roll-off -24 dB/octave).") + " " + EqualizerUtil::adjustFrequencyShelvesTip()); pManifest->setIsMixingEQ(true); pManifest->setEffectRampsFromDry(true); EqualizerUtil::createCommonParameters(pManifest.data(), false); return pManifest; }
// static EffectManifestPointer BitCrusherEffect::getManifest() { EffectManifestPointer pManifest(new EffectManifest()); pManifest->setId(getId()); pManifest->setName(QObject::tr("Bitcrusher")); pManifest->setShortName(QObject::tr("Bitcrusher")); pManifest->setAuthor("The Mixxx Team"); pManifest->setVersion("1.0"); pManifest->setDescription(QObject::tr( "Adds noise by the reducing the bit depth and sample rate")); pManifest->setEffectRampsFromDry(true); pManifest->setMetaknobDefault(0.0); EffectManifestParameterPointer depth = pManifest->addParameter(); depth->setId("bit_depth"); depth->setName(QObject::tr("Bit Depth")); depth->setShortName(QObject::tr("Bit Depth")); depth->setDescription(QObject::tr( "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); EffectManifestParameterPointer frequency = pManifest->addParameter(); frequency->setId("downsample"); frequency->setName(QObject::tr("Downsampling")); frequency->setShortName(QObject::tr("Down")); frequency->setDescription(QObject::tr( "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 pManifest; }
// static EffectManifestPointer AutoPanEffect::getManifest() { EffectManifestPointer pManifest(new EffectManifest()); pManifest->setId(getId()); pManifest->setName(QObject::tr("Autopan")); pManifest->setShortName(QObject::tr("Autopan")); pManifest->setAuthor("The Mixxx Team"); pManifest->setVersion("1.0"); pManifest->setDescription(QObject::tr( "Bounce the sound left and right across the stereo field")); // Period EffectManifestParameterPointer period = pManifest->addParameter(); period->setId("period"); period->setName(QObject::tr("Period")); period->setShortName(QObject::tr("Period")); period->setDescription(QObject::tr( "How fast the sound goes from one side to another\n" "1/4 - 4 beats rounded to 1/2 beat if tempo is detected\n" "1/4 - 4 seconds if no tempo is detected")); 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); EffectManifestParameterPointer smoothing = pManifest->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. EffectManifestParameterPointer width = pManifest->addParameter(); width->setId("width"); width->setName(QObject::tr("Width")); width->setShortName(QObject::tr("Width")); width->setDescription(QObject::tr( "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 pManifest; }
// static EffectManifestPointer PhaserEffect::getManifest() { EffectManifestPointer pManifest(new EffectManifest()); pManifest->setId(getId()); pManifest->setName(QObject::tr("Phaser")); pManifest->setShortName(QObject::tr("Phaser")); pManifest->setAuthor("The Mixxx Team"); pManifest->setVersion("1.0"); pManifest->setDescription(QObject::tr( "Mixes the input signal with a copy passed through a series of " "all-pass filters to create comb filtering")); pManifest->setEffectRampsFromDry(true); EffectManifestParameterPointer period = pManifest->addParameter(); period->setId("lfo_period"); period->setName(QObject::tr("Period")); period->setShortName(QObject::tr("Period")); period->setDescription(QObject::tr( "Period of the LFO (low frequency oscillator)\n" "1/4 - 4 beats rounded to 1/2 beat if tempo is detected\n" "1/4 - 4 seconds if no tempo is detected")); period->setControlHint(EffectManifestParameter::ControlHint::KNOB_LINEAR); period->setSemanticHint(EffectManifestParameter::SemanticHint::UNKNOWN); period->setUnitsHint(EffectManifestParameter::UnitsHint::BEATS); period->setMinimum(0.0); period->setMaximum(4.0); period->setDefault(1.0); EffectManifestParameterPointer fb = pManifest->addParameter(); fb->setId("feedback"); fb->setName(QObject::tr("Feedback")); fb->setShortName(QObject::tr("Feedback")); fb->setDescription(QObject::tr( "Controls how much of the output signal is looped")); fb->setControlHint(EffectManifestParameter::ControlHint::KNOB_LINEAR); fb->setSemanticHint(EffectManifestParameter::SemanticHint::UNKNOWN); fb->setUnitsHint(EffectManifestParameter::UnitsHint::UNKNOWN); fb->setMinimum(-1.0); fb->setMaximum(1.0); fb->setDefault(0.0); EffectManifestParameterPointer range = pManifest->addParameter(); range->setId("range"); range->setName(QObject::tr("Range")); range->setShortName(QObject::tr("Range")); range->setDescription(QObject::tr( "Controls the frequency range across which the notches sweep.")); range->setControlHint(EffectManifestParameter::ControlHint::KNOB_LINEAR); range->setSemanticHint(EffectManifestParameter::SemanticHint::UNKNOWN); range->setUnitsHint(EffectManifestParameter::UnitsHint::UNKNOWN); range->setMinimum(0.05); range->setMaximum(1.0); range->setDefault(1.0); EffectManifestParameterPointer stages = pManifest->addParameter(); stages->setId("stages"); stages->setName(QObject::tr("Stages")); stages->setShortName(QObject::tr("Stages")); stages->setDescription(QObject::tr( "Number of stages")); // stages of what? stages->setControlHint(EffectManifestParameter::ControlHint::KNOB_LINEAR); stages->setSemanticHint(EffectManifestParameter::SemanticHint::UNKNOWN); stages->setUnitsHint(EffectManifestParameter::UnitsHint::UNKNOWN); stages->setMinimum(1.0); stages->setMaximum(6.0); stages->setDefault(3.5); EffectManifestParameterPointer depth = pManifest->addParameter(); depth->setId("depth"); depth->setName(QObject::tr("Depth")); depth->setShortName(QObject::tr("Depth")); depth->setDescription(QObject::tr( "Intensity of the effect")); depth->setControlHint(EffectManifestParameter::ControlHint::KNOB_LINEAR); depth->setSemanticHint(EffectManifestParameter::SemanticHint::UNKNOWN); depth->setUnitsHint(EffectManifestParameter::UnitsHint::UNKNOWN); depth->setDefaultLinkType(EffectManifestParameter::LinkType::LINKED); depth->setMinimum(0.5); depth->setMaximum(1.0); depth->setDefault(0.5); EffectManifestParameterPointer triplet = pManifest->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); EffectManifestParameterPointer stereo = pManifest->addParameter(); stereo->setId("stereo"); stereo->setName(QObject::tr("Stereo")); stereo->setShortName(QObject::tr("Stereo")); stereo->setDescription(QObject::tr( "Sets the LFOs (low frequency oscillators) for the left and right channels out of phase with each others")); stereo->setControlHint(EffectManifestParameter::ControlHint::TOGGLE_STEPPING); stereo->setSemanticHint(EffectManifestParameter::SemanticHint::UNKNOWN); stereo->setUnitsHint(EffectManifestParameter::UnitsHint::UNKNOWN); stereo->setMinimum(0); stereo->setMaximum(1); stereo->setDefault(0); return pManifest; }
// static EffectManifestPointer GraphicEQEffect::getManifest() { EffectManifestPointer pManifest(new EffectManifest()); pManifest->setId(getId()); pManifest->setName(QObject::tr("Graphic Equalizer")); pManifest->setShortName(QObject::tr("Graphic EQ")); pManifest->setAuthor("The Mixxx Team"); pManifest->setVersion("1.0"); pManifest->setDescription(QObject::tr( "An 8-band graphic equalizer based on biquad filters")); pManifest->setEffectRampsFromDry(true); pManifest->setIsMasterEQ(true); // Display rounded center frequencies for each filter float centerFrequencies[8] = {45, 100, 220, 500, 1100, 2500, 5500, 12000}; EffectManifestParameterPointer low = pManifest->addParameter(); low->setId(QString("low")); low->setName(QString("%1 Hz").arg(centerFrequencies[0])); low->setShortName(QString("%1 Hz").arg(centerFrequencies[0])); low->setDescription(QObject::tr( "Gain for Low Filter")); low->setControlHint(EffectManifestParameter::ControlHint::KNOB_LINEAR); low->setSemanticHint(EffectManifestParameter::SemanticHint::UNKNOWN); low->setUnitsHint(EffectManifestParameter::UnitsHint::UNKNOWN); low->setNeutralPointOnScale(0.5); low->setDefault(0); low->setMinimum(-12); low->setMaximum(12); QString paramName; for (int i = 0; i < 6; i++) { if (centerFrequencies[i + 1] < 1000) { paramName = QString("%1 Hz").arg(centerFrequencies[i + 1]); } else { paramName = QString("%1 kHz").arg(centerFrequencies[i + 1] / 1000); } EffectManifestParameterPointer mid = pManifest->addParameter(); mid->setId(QString("mid%1").arg(i)); mid->setName(paramName); mid->setShortName(paramName); mid->setDescription(QObject::tr( "Gain for Band Filter %1").arg(i + 1)); mid->setControlHint(EffectManifestParameter::ControlHint::KNOB_LINEAR); mid->setSemanticHint(EffectManifestParameter::SemanticHint::UNKNOWN); mid->setUnitsHint(EffectManifestParameter::UnitsHint::UNKNOWN); mid->setNeutralPointOnScale(0.5); mid->setDefault(0); mid->setMinimum(-12); mid->setMaximum(12); } EffectManifestParameterPointer high = pManifest->addParameter(); high->setId(QString("high")); high->setName(QString("%1 kHz").arg(centerFrequencies[7] / 1000)); high->setDescription(QObject::tr( "Gain for High Filter")); high->setControlHint(EffectManifestParameter::ControlHint::KNOB_LINEAR); high->setSemanticHint(EffectManifestParameter::SemanticHint::UNKNOWN); high->setUnitsHint(EffectManifestParameter::UnitsHint::UNKNOWN); high->setDefault(0); high->setMinimum(-12); high->setMaximum(12); return pManifest; }
// static EffectManifestPointer FlangerEffect::getManifest() { EffectManifestPointer pManifest(new EffectManifest()); pManifest->setId(getId()); pManifest->setName(QObject::tr("Flanger")); pManifest->setShortName(QObject::tr("Flanger")); pManifest->setAuthor("The Mixxx Team"); pManifest->setVersion("1.0"); pManifest->setDescription(QObject::tr( "Mixes the input with a delayed, pitch modulated copy of itself to create comb filtering")); pManifest->setMetaknobDefault(1.0); EffectManifestParameterPointer speed = pManifest->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); EffectManifestParameterPointer width = pManifest->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); EffectManifestParameterPointer manual = pManifest->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); EffectManifestParameterPointer regen = pManifest->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); EffectManifestParameterPointer mix = pManifest->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); EffectManifestParameterPointer triplet = pManifest->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 pManifest; }