# FX en pratique

Bien qu’ils paraissent trompeusement simples extérieurement, les FX sont en fait des bêtes plutôt complexes à l’intérieur. Leur simplicité incite souvent les gens à en abuser dans leurs morceaux. Cela ne sera peut-être pas gênant si vous avez une machine puissante, mais si - comme moi - vous utilisez un Raspberry Pi pour improviser, vous devez prendre garde à la somme de travail que vous lui demandez de faire si vous voulez vous assurer que la cadence reste fluide.

Considérez ce code :

    loop do
      with_fx :reverb do
        play 60, release: 0.1
        sleep 0.125
      end
    end

Dans ce code, nous jouons la note 60 avec une durée d’extinction très courte, c’est donc une note courte. Nous voulons aussi de la réverbération, alors nous l’avons imbriqué dans un bloc de réverbération. Jusqu’à maintenant, tout est bon. Sauf que…

Regardons ce que fait le code. En premier lieu, nous avons une boucle (`loop`), ce qui signifie que tout ce qui est à l’intérieur est répété sans fin. Ensuite, nous avons un bloc `with_fx`. Ceci veut dire que nous allons créer un nouvel FX de réverbération chaque fois que nous bouclons. C’est comme si nous disposions d’une pédale de réverbération distincte à chaque fois que nous pincions une corde sur une guitare. C’est super de pouvoir faire ça, mais ce n’est pas toujours ce que vous voulez. Par exemple, ce code va avoir du mal à s’exécuter comme il faut sur un Raspberry Pi. Tout le travail de création de la réverbération puis d’attente jusqu’à ce qu’elle doive être stoppée et enlevée est complètement pris en charge par `with_fx` pour vous, mais ceci prend de la puissance du microprocesseur (CPU) qui peut être précieuse.

Comment le faire d’une manière plus proche d’une installation traditionnelle où notre guitariste n’a qu’une pédale de réverbération dans laquelle passent tous les sons ? Simple :

    with_fx :reverb do
      loop do
        play 60, release: 0.1
        sleep 0.125
      end
    end

Nous mettons notre boucle à l’intérieur du bloc `with_fx`. De cette façon, nous créons seulement une unique réverbération pour toutes les notes jouées dans notre boucle. Ce code est beaucoup plus efficace et fonctionnerait bien sur un Raspberry Pi.

Un compromis est d’utiliser `with_fx` sur une itération à l’intérieur d’une boucle :

    loop do
      with_fx :reverb do
        16.times do
          play 60, release: 0.1
          sleep 0.125
        end
      end
    end

De cette façon, nous avons remonté le `with_fx` en dehors de la partie la plus intérieure de la boucle, et nous créons maintenant une nouvelle réverbération toutes les 16 notes.

C’est quelque chose que l’on fait si souvent que `with_fx` supporte une option pour faire exactement cela sans devoir écrire le bloc `16.times` :

    loop do
      with_fx :reverb, reps: 16 do
        play 60, release: 0.1
        sleep 0.125
      end
    end

Les deux exemples `reps: 16` et `16.times do` se comporteront de la même manière. L’exemple avec `reps: 16` répète en fait le code dans le bloc `do/end` seize fois donc vous pouvez choisir l’un ou l’autre en fonction de vos préférences.

Rappelez-vous, il n’y a pas de fautes, juste des possibilités. Toutefois, certaines de ces approches donneront un son différent et auront des caractéristiques de performance différentes. Donc, jouez et utilisez l’approche qui sonne le mieux pour vous tout en restant dans les contraintes de performance de votre plateforme.