sndwarpst

sndwarpst — Lit un son stéréo échantillonné dans une table et lui applique une modification de durée et/ou de hauteur.

Description

sndwarpst lit des échantillons stéréo sonores dans une table et applique une modification de durée et/ou de hauteur. Les modifications du temps et de la fréquence sont indépendantes l'une de l'autre. Par exemple un son peut être ralenti en durée tout en étant transposé dans l'aigu !

Les arguments de taille de fenêtre et de chevauchement influent grandement sur le résultat et seront fixés par expérimentation. En général ils doivent être aussi petits que possible. Par exemple, on peut commencer avec iwsize=sr/10 et ioverlap=15. Essayer irandw=iwsize*0,2. Si l'on peut arriver à ses fins avec moins de chevauchements, le programme sera plus rapide. Mais si ces dernières sont en nombre insuffisant, on peut entendre des fluctuations d'amplitude. L'algorithme réagit différemment selon le son en entrée et il n'y a pas de règle fixe adaptée à toutes les circonstances. Si l'on arrive à trouver les bons réglages, on peut obtenir d'excellents résultats.

Syntaxe

ar1, ar2 [,ac1] [, ac2] sndwarpst xamp, xtimewarp, xresample, ifn1, \
      ibeg, iwsize, irandw, ioverlap, ifn2, itimemode

Initialisation

ifn1 -- le numéro de la table contenant les échantillons qui seront traités par sndwarpst. GEN01 est le générateur de fonction approprié pour mémoriser les échantillons d'un fichier son pré-existant.

ibeg -- le temps en secondes à partir duquel commencera la lecture dans la table. Lorsque itimemode est différent de zéro, la valeur de xtimewarp est décalée de ibeg.

iwsize -- la taille en échantillons de la fenêtre utilisée dans l'algorithme de variation de la durée.

irandw -- la largeur de bande d'un générateur de nombres aléatoires. Les nombres aléatoires seront ajoutés à iwsize.

ioverlap -- détermine la densité de fenêtres se chevauchant.

ifn2 -- une fonction qui fournit la forme de la fenêtre. On l'utilise habituellement pour créer une sorte de rampe qui part de zéro au début et qui y retourne à la fin de chaque fenêtre. Essayer d'utiliser une moitié de sinusoïde (c-à-d : f1 0 16384 9 .5 1 0) qui fonctionne plutôt bien. On peut utiliser d'autres formes.

Exécution

ar1, ar2 -- ar1 et ar2 sont les sorties stéréo (gauche et droite) de sndwarpst. sndwarpst suppose que la table de fonction contenant le signal échantillonné est stéréophonique. sndwarpst indexera la table avec un incrément de deux échantillons. Il faut ainsi remarquer que si l'on utilise un signal mono avec sndwarpst, la durée et la hauteur seront altérées en conséquence.

ac1, ac2 -- ac1 et ac2 sont des versions mono-couche (pas de superpositions), et non fenêtrées du signal modifié en durée et/ou en hauteur. Elles sont fournies afin de permettre de pondérer l'amplitude du signal de sortie, qui contient habituellement beaucoup de versions se chevauchant et fenêtrées du signal, avec une version épurée du signal modifié en durée et en hauteur. Le traitement de sndwarpst peut causer des variations notables en amplitude (en plus ou en moins), à cause de la différence de temps entre les superpositions lorsque la variation de durée est appliquée. Si on les utilise avec une unité balance, ac1 et ac2 permettent d'améliorer grandement la qualité sonore. Ils sont facultatifs mais il faut noter que la syntaxe exige la présence des deux arguments (utiliser les deux ou aucun). Un exemple de leur utilisation est donné ci-dessous.

xamp -- la valeur qui sert à pondérer l'amplitude (voir la note sur son utilisation avec ac1 et ac2).

xtimewarp -- détermine comment la durée du signal en entrée sera allongée ou raccourcie. Il y a deux manières d'utiliser cet argument selon la valeur donnée à itimemode. Si la valeur de itimemode est 0, xtimewarp changera l'échelle temporelle du son. Par exemple, une valeur de 2 doublera la durée du son. Si itimemode a une valeur non nulle, alors xtimewarp est utilisé comme un pointeur temporel de la même manière que dans lpread et dans pvoc. Un des exemples ci-dessous illustre cette possibilité. Dans les deux cas, la hauteur ne sera pas altérée par le traitement. La transposition de hauteur est effectuée indépendamment au moyen de xresample.

xresample -- le facteur de changement de la hauteur du son. Par exemple, une valeur de 2 produira un son une octave plus haut que l'original. La durée du son, quant à elle, ne sera pas modifiée.

Exemples

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

Exemple 984. Exemple de l'opcode sndwarpst.

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
-odac     ;;;realtime audio out
;-iadc    ;;;uncomment -iadc if realtime audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o sndwarpst.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

; by Menno Knevel 2022

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


instr 1

ktimewarp line 0, p3, 1		;length of stereo file "drumsSlp.wav"
kresample init 1		;playback at the normal speed
ibeg = 0
iwsize = 4410
irandw = 441
ioverlap = p4
itimemode = 1			; Use the ktimewarp parameter as a "time" pointer
prints  "\nnumber of overlaps = %d\n\n", p4

aL, aR sndwarpst .35, ktimewarp, kresample, 1, ibeg, iwsize, irandw, ioverlap, 2, itimemode
aL dcblock aL			;get rid of DC offsets for left channel &
aR dcblock aR			;right channel
   outs aL, aR
  
endin
</CsInstruments>
<CsScore>
f 1 0 0 1 "drumsSlp.wav" 0 0 0
f 2 0 16384 9 0.5 1 0		;half of a sine wave

i 1 0 7 2			;different overlaps
i 1 + 7 5
i 1 + 7 15
e
</CsScore>
</CsoundSynthesizer>


L'exemple ci-dessous montre un ralentissement du son stocké dans la table (ifn1). Pendant toute la durée de la note, le ralentissement s'intensifiera depuis l'original jusqu'à un son dix fois plus « lent » que l'original. Pendant ce temps, la hauteur montera progressivement d'une octave.

iwindfun = 1
isampfun = 2
ibeg = 0
iwindsize = 2000
iwindrand = 400
ioverlap = 10
awarp   line    1, p3, 1
aresamp line    1, p3, 2
kenv    line    1, p3, .1
asig    sndwarp kenv, awarp, aresamp, isampfun, ibeg, iwindsize, iwindrand, ioverlap, iwindfun, 0

Voici maintenant un exemple utilisant xtimewarp comme pointeur temporel et la stéréophonie :

itimemode     =         1
atime         line      0, p3, 10
ar1, ar2      sndwarpst kenv, atime, aresamp, sampfun, ibeg, iwindsize, iwindrand, ioverlap, \
                        iwindfun, itimemode

Ci-dessus, atime avance le pointeur temporel utilisé dans sndwarpst de 0 à 10 sur toute la durée de la note. Si p3 vaut 20 alors le son sera deux fois plus lent que l'original. Bien sûr, on peut utiliser une fonction plus complexe qu'une simple ligne droite pour contrôler le facteur temporel.

Maintenant le même exemple que ci-dessus mais en utilisant la fonction balance avec les sorties facultatives :

asig,acmp   sndwarp  1, awarp, aresamp, isampfun, ibeg, iwindsize, iwindrand, ioverlap, iwindfun, itimemode
abal        balance asig, acmp
  
asig1,asig2,acmp1,acmp2 sndwarpst 1, atime, aresamp, sampfun, ibeg, iwindsize, iwindrand, ioverlap, \
                                  iwindfun, itimemode
abal1       balance asig1, acmp1
abal2       balance asig2, acmp2

Noter l'utilisation de l'unité balance dans les deux exemples ci-dessus. La sortie de balance peut ensuite être pondérée, enveloppée, envoyée à un out ou un outs, etc. Noter que les arguments d'amplitude de sndwarp et de sndwarpst valent « 1 » dans ces exemples. En pondérant le signal après son traitement par sndwarp, abal, abal1, et abal2 contiendront des signaux ayant à peu près la même amplitude que le signal original traité par sndwarp. Il est ainsi plus facile de prédire les niveaux et d'éviter d'avoir des échantillons hors intervalle ou des valeurs d'échantillon trop petites.

[Note] Conseil Supplémentaire

N'utilisez la version stéréo que si vous avez réellement besoin de traiter un fichier stéréo. Elle est sensiblement plus lente que la version mono et si vous utilisez la fonction balance, c'est encore plus lent. Il n'y a aucun inconvénient à utiliser un sndwarp mono dans un orchestre stéréo puis d'envoyer le résultat à un ou aux deux canaux de la sortie stéréo.

Voir aussi

sndwarp

Crédits

Auteur : Richard Karpen
Seattle, WA USA
1997