sflooper

sflooper — Joue un preset d'échantillons SoundFont2 (SF2), générant un son stéréo, avec une boucle en fondu-enchainé à durée variable, définie par l'utilisateur.

Description

Joue un preset d'échantillons SoundFont2 (SF2), générant un son stéréo, comme sfplay. Mais à l'inverse de ce dernier, il ignore les points de boucle fixés dans le fichier SF2 et les remplace par une boucle en fondu-enchainé définie par l'utilisateur. C'est un mélange de sfplay et de flooper2. Afin de comprendre l'utilisation de ces opcodes, on doit connaître le format SF2, dont une brève description peut être trouvée dans la section format de fichier SoundFont2.

Syntaxe

ar1, ar2 sflooper ivel, inotenum, kamp, kpitch, ipreindex, kloopstart, kloopend, kcrossfade \
      [, istart, imode, ifenv, iskip, iflag] 

Initialisation

ivel -- vélocité.

inotenum -- numéro de note MIDI.

ipreindex -- indice de preset.

istart -- début de la lecture en secondes.

imode -- modes de boucle : 0 à l'endroit, 1 à l'envers, 2 à l'envers et à l'endroit [0 par défaut].

ifenv -- s'il est différent de zéro, numéro de la table de l'enveloppe de fondu-enchainé. La valeur par défaut de 0 définit un fondu-enchainé linéaire.

iskip -- s'il vaut 1, l'initialisation de l'opcode est ignorée, pour les notes liées, l'exécution continuant depuis la position dans la boucle où la note précédente s'est terminée. Avec la valeur par défaut de 0, l'initialisation a lieu.

iflag -- indicateur en rapport avec le comportement de kpitch et de inotenum.

Exécution

kamp -- contrôle de l'amplitude

kpitch -- contrôle de la hauteur (rapport de transposition, les valeurs négatives sont interdites.) ou multiplicateur de fréquence, dépendant de iflag. Lorsque iflag = 0, kpitch est un multiplicateur de la fréquence par défaut assignée par le préréglage de SF2 à la valeur inotenum. Lorque iflag = 1, kpitch est la fréquence absolue du son en sortie, en Hz. 0 par défaut. Lorsque iflag = 0, inotenum fixe la fréquence de la sortie selon le numéro de note MIDI utilisé, et kpitch est utilisé comme un multiplicateur. Lorsque iflag = 1, la fréquence de la sortie est directement fixée par kpitch. Cela permet l'utilisation de toutes sortes d'échelles basées sur les micro-tons. Cependant cette méthode est conçue pour ne fonctionner correctement qu'avec les préréglages fixés sur le tempérament égal. L'utilisation de cette méthode avec un préréglage comportant déjà une échelle non standard ou avec un préréglage basé sur un drum-kit peut donner des résultats imprévisibles.

kloopstart -- début de la boucle (en secondes). Noter que bien qu'étant de taux-k, les paramètres de boucle comme celui-ci ne sont mis à jour qu'une fois par itération de la boucle. Si le début de la boucle est fixé au-dela de la fin des échantillons, il n'y aura pas de boucle.

kloopend -- fin de la boucle (en secondes), mis à jour une seule fois par itération de la boucle.

kcrossfade -- longueur du fondu enchainé (en secondes), mis à jour une seule fois par itération de la boucle et limité par la longueur de la boucle.

sflooper joue un preset, générant un son stéréo.

Ces opcodes ne supportent que la structure d'échantillon des fichiers SF2. La structure de modulateur du format SoundFormat2 n'est pas supportée dans Csound. Tout traitement ou modulation des données échantillonnées est à la charge de l'utilisateur de Csound, ce qui permet de s'affranchir de toutes les restrictions imposées par le standard SF2.

Note : les points de boucle sont fixés par rapport à la touche de base de chaque son échantillonné faisant partie du preset du soundfont. Par exemple, un soundfont peu avoir un seul son échantillonné pour tout le clavier. Dans ce cas, sflooper fonctionnera comme flooper et flooper2, car lorsque le son échantillonné est transposé (joué à différentes vitesses), la boucle se raccourcit ou s'allonge. Au contraire, si le soundfont possède un son échantillonné pour chaque touche, il n'y aura pas de transposition et la boucle gardera la même longueur (sauf si kpitch est modifié).

Exemples

Voici un exemple de l'opcode sflooper. Il utilise le fichier sflooper.csd.

Exemple 964. Exemple de l'opcode sflooper.

Voir les sections Audio en Temps Réel et Options de la Ligne de Commande pour plus d'information sur l'utilisation des options de la ligne de commande.

<CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
; Audio out   Audio in    No messages
-odac   ;;;realtime audio in
; For Non-realtime ouput leave only the line below:
; -o sflooper.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

sr = 44100
ksmps = 32
nchnls = 2
0dbfs  = 1

; by  Menno Knevel - 2021

isf   sfload "07AcousticGuitar.sf2"
      sfpassign 0, isf

instr 1	

inum  = p4
ivel  = p5
kamp  linsegr 1,1,1,.1,0	; declick envelope
kamp  = kamp * .0000015		;scale amplitude
ifreq = 1			;do not change freq from sf
;"07AcousticGuitar.sf2" contains 2 samples, on notes E1 and C#4
;start loop from beginning, loop .2 seconds - on the root key of these samples
aL,aR sflooper ivel, inum, kamp*ivel, ifreq, 0, 0, .2, .05  ; make amp velocity dependent
      outs aL, aR
endin

instr 2	

ifreq  = p4
ivel  = p5
kamp  linsegr 1,1,1,.1,0	; declick envelope
kamp  = kamp * .0000015		;scale amplitude
inum = 60			;take soundfont samples belonging to midi index 60

;nearly identical instr, but now takes midi note sound 60 as reference, set iflag to 1
aL,aR sflooper ivel, inum, kamp*ivel, ifreq, 0, 0, .2, .05, 0, 0, 0, 0, 1  ; & use ifreq for frequency
      outs aL, aR

endin
</CsInstruments>
<CsScore>

i1 0 1 60 120   ; p4 = midi note
i1 + 1 62 <
i1 + 1 65 <
i1 + 1 69 10


i2 5 1 200 120  ; p4 = frequency
i2 + 1 261 <
i2 + 1 300 <
i2 + 1 1000 10
e
</CsScore>
</CsoundSynthesizer>


Voir aussi

sfilist, sfinstr, sfinstrm, sfload, sfpassign, sfplaym, sfplist, sfpreset

Crédits

Auteur : Victor Lazzarini
Août 2007

Nouveau dans la version 5.07 de Csound