Sampling / Echantillonnage

L’échantillonneur de Sonic-Pi

Jusqu’à présent, les besoins de ce guide m’ont mis en réserve de vous parler de l’échantillonneur de Sonic-Pi et des possibilités de sampling que le logiciel offre. Beaucoup d’interfaces de live-coding offrent un contrôle avancé du sampling, et Sonic-Pi n’y fait pas exception. Une librairie de sons intégrés est prévue pour pouvoir jouer facilement sans que vous n’ayez besoin d’avoir à disposition des librairies personnelles d’échantillons sonores. Soyez prévenus, Sonic-Pi est capable de jouer des sons aux formats .wav, .wave, .aif, .aiff, .ogg, .oga ou .flac. Des formats populaires comme le mp3 seront ignorés.

Le guide disponible à l’aide de Ctrl + I vous en propose une liste exhaustive. L’auto-complétion vous suggérera également par défaut les samples intégrées dès lors que vous entrerez le mot clef sample. Les sons fournis sont assez polyvalents, et vous passerez le plus clair de votre temps à les déformer. Voici quelques sons issus de cette librairie :


live_loop :exemples do sample :bd_fat ; sleep 0.5 sample :perc_door ; sleep 0.5 sample :ambi_piano ; sleep 0.5 end

Sample, tout comme play peut reçevoir un grand nombre de paramètres. Vous pouvez dès à présent commencer à les explorer. Les possibilités d’expressions sont potentiellement infinies. Voici quelques-uns des paramètres qui m’offrent le plus de joie :

rate : contrôle de la vitesse de lecture de l’échantillon. Accepte des valeurs négatives aussi bien que positives. Rate modifie la vitesse de lecture et aura donc un impact sur la hauteur du son. Il ne faut pas chercher à l’utiliser pour obtenir une hauteur précise :


live_loop :exemples do ; tick sample :bd_fat ; sleep 0.5 sample :perc_door ; sleep 0.5 sample :ambi_piano, rate: (ring 1, 0.9, 0.8).look ; sleep 0.5 end

start et finish vous permettent de choisir la position de la tête de lecture au début de l’échantillon ainsi que la fin de l’échantillon exprimée en millisecondes. Particulièrement pratique sur les échantillons les plus longs.

live_loop :exemples do ; tick sample :perc_till, rate: 0.5, finish: (knit 0.1, 4, 0.5, 2).look sleep 0.5 end

pitch contrôle la hauteur de la sample jouée sans modifier sa durée. Comme tout algorithme de modification de la hauteur, le son ne sera pas parfait, et vous entendrez nécessairement des artefacts. Jouez avec, le son sera de toute manière irréel. En témoigne cette cowbell  :


live_loop :exemples do ; tick sample :drum_cowbell, finish: [0.5, 1].choose, pitch: (ring 0, [2, 6, 16].choose, 4, 6, [8, 24, 12].choose).reflect.look sleep 0.125 end

beat_stretch permet de modifier la longueur de l’échantillon (en modifiant la hauteur) pour le faire correspondre à la durée que vous souhaitez. Une utilisation possible est celle d’utilisation de boucles de batterie. En voici une autre, qui sonne assez mal :

live_loop :test do ; tick sample :ambi_soft_buzz, beat_stretch: (ring 0.5 ,1, 0.25).look sleep (ring 0.5, 1, 0.25).look end

Il existe certainement trop de paramètres liés à l’opérateur sample. Ceci est lié à la SynthDef utilisée par Sam Aaron, qui est d’une grande complexité (chaque argument déclaré dans SuperCollider est immédiatement répercuté dans les parmaètres disponibles dans Sonic-Pi). Ne vous formalisez pas si vous ne comprenez pas tout à la liste des cinquante paramètres proposés, peu vous seront utiles.

Temps et samples : séquençage

Tout les échantillons que vous utiliserez ne sont pas de longueur égale. Il peut parfois être difficile de jouer simultanément plusieurs échantillons de durée variable en gardant un semblant de synchronisation. Sonic-Pi vous propose quelques contrôles afin de vous faciliter la tâche. Observez cette ligne de code, lancez-la.


puts sample_duration :loop_safari

Sonic-Pi vous renverra dans la console 8.005079365079364. Dommage, c’était presque huit secondes. Mais.. puisque c’est un chiffre :


live_loop :go do sample :loop_safari sleep sample_duration :loop_safari end

Vous pouvez désormais faire tourner en boucle vos amen breaks et autres boucles percussives ou rythmiques sans risque de superposition et de décalage. Vous pouvez également utiliser cette information pour jouer des notes qui vont précisément se caler sur la longueur de cette boucle. Stockez ce chiffre dans une variable et utilisez là. Voici un exemple un peu original. Essayez de comprendre ce qui ne va pas, et au final, pourquoi cela fonctionne quand même :


live_loop :go do long = sample_duration :loop_safari sample :loop_safari play :c2, release: long/4 sleep long end

Cette note sera jouée pour 1/4 de la durée de loop_safari. Remarquez que la durée de sleep est de moitié ce qu’elle aurait du être. Un effet de superposition rythmique apparaît au bout de 4 mesures, similaire à une pédale de flanger.

Granularité du son

Sonic-Pi est capable de découper précisément chaque échantillon en x échantillons plus minces; au point de permettre un contrôle précis de la granularité du son. Il est tout à fait possible d’utiliser Sonic-Pi pour obtenir des résultats intéressants en synthèse granulaire. Ecoutez l’exemple suivant, cela devrait vous rappeller le son spécifique de l’IDM anglaise des années 1990-2000 :


live_loop :micro_beat do ; tick sample :drum_cymbal_closed, num_slices: [24, 48, 72, 128].choose, slice: [4, 8].choose sleep (knit 0.125, 12, (0.125/2), 4).look end

Slice permet de découper chaque échantillon en x échantillons de taille égale, num_slices de jouer avec le nombre de fragments qui seront entendus au cours de la lecture. Remarquez également la présence d’un opérateur nommé .choose. Sa fonction est transparente, mais si vous souhaitez en apprendre plus, rendez-vous sur la page consacrée à la randomisation et au hasard.

Il ne s’agit ici que d’une introduction très sommaire à la synthèse granulaire dans Sonic-Pi. Soyez assurés que vous en apprendrez plus au cours des articles suivants.

Jouer des échantillons personnels

Vous n’êtes pas restreints à l’utilisation des échantillons intégrées [0]. Vous pouvez jouez les vôtres, sous peine que vous indiquiez à Sonic-Pi leur emplacement sur le disque. Ne reproduisez pas strictement ce code, allez chercher un échantillon sur votre propre ordinateur :

mon_echantillon = “/Users/raphael/Desktop/daa.wav” live_loop :hey do sample mon_echantillon sleep 1 end

Les banques d’échantillon comportent d’habitude plusieurs centaines ou milliers de fichiers. Plutôt que de les charger un par un, vous pouvez charger un dossier, et référer de plusieurs manières à un échantillon particulier :

mon_dossier = “/Users/raphael/Desktop/samples/” live_loop :hey do sample mon_dossier, 1 sleep 1 end

Ici je viens d’indiquer son index. J’aurai pu tout aussi bien essayer d’établir un filtre, en cherchant tout les fichiers comportant les caractères “daa” dans leur nom :

mon_dossier = “/Users/raphael/Desktop/samples/” live_loop :hey do sample mon_dossier, “daa”, 1 sleep 1 end

Veillez à donner des noms logiques et cohérents à vos échantillons. La vitesse compte, il faut que vous puissiez être efficaces.

Sam Aaron, le créateur de Sonic-Pi, utilise intensivement l’échantillonneur au cours de ses performances. Il a donc fait du zèle pour ce qui concerne le nombre de filtres de recherche. Il est possible de lister récursivement un dossier, d’utiliser des expressions régulières. Vous ne devriez pas avoir de mal à trouver vos propres échantillons avec toutes les options disponibles. Une nouvelle fois, Ctrl + I vous donnera toutes les précisions nécessaires. N’hésitez pas à aller regarder quelques-unes de ses performances directement sur sa chaîne YouTube. Vous verrez comment le créateur de ce langage lui-même s’en sert en public.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[0] Exemples : utilisez vos propres échantillons pour générer les exemples. Je ne vois aucun intérêt à utiliser ici les miens !