Avertissement : geek-friendly topic !
J'utilise pas mal Audacity, surtout pour faire du montage-découpage, et je voudrais m'en servir pour créer des effets. En ce moment, j'étudie la composition harmonique des distorsions. Jusqu'à présent, je téléchargeais les sources et je créais un effet en C++ (en fait, la syntaxe du C suffit) en appliquant une fonction sur les éléments du tableau appelé *buffer qui contient la sélection en cours. Exemple simple extrait d'un fichier Disto.cpp que j'ai créé :
Citation:
bool EffectDisto:: ProcessSimpleMono(float *buffer, sampleCount len)
{
sampleCount i;
for (i = 0; i < len; i++)
buffer[i] = sin(buffer[i]*3.14592/2);
return true;
}
(zut, il n'y a plus la balise [code]...)
Et puis j'ai découvert un langage intégré dans Audacity qui s'appelle Nyquist, permettant de scripter des plug-ins qu'on met simplement dans un répertoire standard et hop, l'effet est là. On peut aussi ouvrir la « Console Nyquist » dans le menu Effets pour tester un algo.
Citation:
(cue (mult s 2))
cue semble renvoyer le résultat là où il faut (dans la sélection), mult est une fonction de multiplication adaptée aux samples et s contient la sélection en cours. Ici, j'ai multiplié chaque sample par 2, c'est à dire que j'ai augmenté le niveau de 3 dB. Il y a des tas de primitives d'assez haut niveau pour jouer sur la fréquence du son, son enveloppe, pour moduler en anneau, pour mettre du delai, j'en passe et des meilleures.
Le langage est un dialecte de Lisp, donc un langage fonctionnel plein de S-expressions et de lambda-calcul. Rien à voir avec un langage impératif comme le C mais on s'en tire dès qu'on a compris 2 ou 3 notions. Seulement voilà, je n'arrive pas à appliquer une fonction sinus (ou un polynôme) aux samples pour générer des harmoniques, elle prend un argument et basta. Alors, comment faire ? Est-ce que quelqu'un s'est déjà coltiné toute la doc et les exemples (en cours pour ma part), et a réussi quelque chose dans cet esprit ?