Découverte du framework Juce (02)
La semaine dernière nous avons implémenté un traitement tout simple sous la forme d'un plugin VST avec Juce.
Ce plugin (disponible ici) est un simple plugin à base de LFO qui fait pour l'instant une modulation en anneau dont la fréquence peut être variée grâce à un Slider.
Je vous propose comme exercice de modifier ce plugin en ajoutant d'autres paramètres manipulables graphiquement.
Dans un premier temps, téléchargez le code initial du plugin et compilez-le en suivant les instructions fournies dans le fichier readme.md du répertoire JucePlugins.
Vous devriez obtenir une fenêtre comme celle-ci une fois le plugin chargé au sein d'un logiciel hôte (ici Reaper) :
Si on prototype le traitement DSP du plugin dans Max, à l'heure actuel cela donne:
Ajoutez un paramètre au plugin pour gérer un gain de sortie général pouvant varier entre 0.
et 1.
pour produire l'effet suivant :
Dans un premier temps vous pouvez simplement ajouter un paramètre en vous inspirant du paramètre de fréquence déjà implémenté. Néanmoins vous verrez très vite que ça génère des clics au changement de la valeur. Pour remédier à ça, on doit lisser la valeur. Dans Juce on peut se servir de la classe LinearSmoothedValue prévue à cet effet.
Le paramètre de gain se présentera alors non-plus sous la forme d'un simple float
mais sera de type juce::LinearSmoothedValue<float> m_gain;
Quand vous voudrez changer la valeur de gain il vous suffira alors d'écrire :
float new_gain_value = 0.6f;
m_gain.setValue(new_gain_value);
Dans la méthode prepareToPlay
il faudra ensuite faire appel à la méthode reset
de tous les paramètres lissés en spécifiant le vectorsize.
Pour chaque nouveau sample, dans la méthode processBlock
du PluginProcessor
vous pouvez demander la valeur de gain lissée en écrivant :
void AmplitudeModulationAudioProcessor::processBlock (AudioSampleBuffer& buffer, MidiBuffer& midiMessages)
{
// [...]
for(int i = 0; i < buffer.getNumSamples(); ++i)
{
float gain = m_gain.getNextValue();
// [...]
}
}
Vous ajouterez un troisième paramètre qui permette de gérer la profondeur du tremolo comme présenté au sein du patch suivant :
Version finale du plugin :