lorisread

lorisread — Importe un ensemble de partiels à largeur de bande améliorée depuis un fichier de données au format SDIF, leur applique des enveloppes de mise en forme de fréquence, d'amplitude et de largeur de bande au taux-k et stocke les partiels modifiés en mémoire.

Syntaxe

lorisread ktimpnt, ifilcod, istoreidx, kfreqenv, kampenv, kbwenv[, ifadetime]

Description

lorisread importe un ensemble de partiels à largeur de bande améliorée depuis un fichier de données au format SDIF, leur applique des enveloppes de mise en forme de fréquence, d'amplitude et de largeur de bande au taux-k et stocke les partiels modifiés en mémoire.

Initialisation

ifilcod - nombre entier ou chaîne de caractères dénotant un fichier de contrôle dérivé de l'analyse d'un signal audio par réassignation de largeur de bande améliorée. Un nombre entier indique le suffixe d'un fichier loris.sdif (par exemple loris.sdif.1) ; une chaîne de caractères (entre guillemets) donne un nom de fichier, qui peut être un nom de chemin complet. Si ce n'est pas un nom de chemin complet, le fichier est d'abord cherché dans le répertoire courant, puis dans celui qui est donné par la variable d'environnement SADIR (si elle est définie). Le fichier de données de réassignation de largeur de bande améliorée contient des valeurs de points charnières de fréquence, d'amplitude, de caractère bruiteux et d'enveloppe de phase organisés pour une synthèse additive à largeur de bande améliorée. Les données de contrôle doivent être conformes à l'un des formats SDIF existant.

Loris stocke les partiels dans des trames SDIF RBEP. Chaque trame RBEP contient une matrice RBEP et chaque ligne d'une matrice RBEP décrit un point charnière d'un partiel de Loris. Une trame RBEL contenant une matrice RBEL qui décrit l'étiquetage des partiels peut précéder la première trame RBEP dans le fichier SDIF. Les définitions des trames et des matrices RBEP et RBEL sont inclues dans l'en-tête du fichier SDIF. En plus des trames RBEP, Loris peut également lire et écrire des trames SDIF 1TRC. Comme les trames 1TRC ne représentent pas une amélioration de largeur de bande ou les coordonnées temporelles exactes de points charnière de Loris, leur utilisation est déconseillée. Les possibilités 1TRC sont fournies pour pouvoir échanger des données avec des programmes qui ne peuvent pas traiter les trames RBEP.

istoreidx, ireadidx, isrcidx, itgtidx sont des étiquettes qui identifient un ensemble stocké de partiels à largeur de bande améliorée. lorisread importe les partiels depuis un fichier SDIF et les stocke avec l'étiquette entière istoreidx. lorismorph réalise un morphing des ensembles de partiels étiquetés isrcidx et itgtidx, et stocke les partiels résultants avec l'étiquette entière istoreidx. lorisplay restitue les partiels stockés avec l'étiquette ireadidx. Les étiquettes ne sont utilisées qu'à l'initialisation de la note, et l'on peut les réutiliser sans coût supplémentaire ou bénéfice en efficacité, et sans introduire d'interaction entre les instruments ou leurs instances.

ifadetime (facultatif) - En général, les partiels exportés depuis Loris commencent et se terminent avec une amplitude non nulle. Afin d'éviter les artefacts, il est très souvent nécessaire de d'introduire et de terminer progressivement les partiels au lieu de les commencer et de les terminer de façon abrupte. Si ifadetime est différent de zéro, les partiels ont une attaque progressive et une chute dégressive. Ceci est réalisé en ajoutant deux points charnière à chaque partiel : un ifadetime secondes avant le début et un autre ifadetime secondes après la fin. (Cependant, aucun point charnière n'est ajouté à une date inférieure à zéro. Si nécessaire, la durée de l'introduction progressive est raccourcie.) Les points charnière supplémentaires au début et à la fin du partiel auront respectivement la même fréquence et la même largeur de bande que celle du premier et du dernier point charnière du partiel mais leurs amplitudes seront nulles. La phase des nouveaux points charnière sera extrapolée pour préserver la cohérence de phase. Si aucune valeur n'est spécifiée, ifadetime vaut par défaut zéro. Notez que la valeur de ifadetime peut être approchée, car les enveloppes des paramètres des partiels sont échantillonnées au taux de contrôle (taux-k) et indexées par ktimpnt (voir ci-dessous), et non pas en temps réel.

Exécution

lorisread lit des données pré-calculées d'analyse par réassignation de largeur de bande améliorée depuis un fichier stocké au format SDIF, comme décrit ci-dessus. L'écoulement du temps dans ce fichier est spécifié par ktimpnt qui réprésente le temps en secondes. ktimpnt doit toujours être positif mais peut avancer ou reculer dans le temps, être stationnaire ou discontinu, comme un pointeur dans le fichier d'analyse. kfreqenv est un facteur de transposition au taux de contrôle, 1.5 transposant vers l'aigu d'une quinte juste, et 0.5 transposant vers le grave d'une octave. kampenv est un facteur de mise à l'échelle au taux de contrôle qui est appliqué à toutes les enveloppes d'amplitude des partiels. kbwenv est un facteur de mise à l'échelle au taux de contrôle qui est appliqué à toutes les enveloppes de largeur de bande ou de caractère bruiteux des partiels. Les données de partiel à largeur de bande améliorée sont stockées en mémoire avec une étiquette spécifiée pour un accès ultérieur par un autre générateur.

Exemples

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

Exemple 427. Exemple de l'opcode lorisread.

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 lorisread.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

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

; Play the partials in clarinet.sdif from 0 to 3 sec with 1 ms fadetime
; and no frequency , amplitude, or bandwidth modification.

instr 1

ktime linseg 0, p3, 3			; linear time function from 0 to 3 seconds
      lorisread	ktime, "clarinet.sdif", 1, 1, 1, 1, .001
asig  lorisplay	1, 1, 1, 1
      outs asig, asig
endin


; Play the partials in clarinet.sdif from 0 to 3 sec with 1 ms fadetime
; adding tuning and vibrato, increasing the "breathiness" (noisiness) and overall
; amplitude, and adding a highpass filter.

instr 2

ktime linseg 0, p3, 3			; linear time function from 0 to 3 seconds
					; compute frequency scale for tuning  
ifscale	= cpspch(p4)/cpspch(8.08)	; (original pitch was G#4)
					; make a vibrato envelope
kvenv  linseg 0, p3/6, 0, p3/6, .02, p3/3, .02, p3/6, 0, p3/6, 0
kvib   oscil  kvenv, 4, 1		; table 1, sinusoid
kbwenv linseg 1, p3/6, 1, p3/6, 2, 2*p3/3, 2	;lots of noise
       lorisread ktime, "clarinet.sdif", 1, 1, 1, 1, .001
a1     lorisplay 1, ifscale+kvib, 2, kbwenv
asig   atone a1, 1000			; highpass filter, cutoff 1000 Hz
       outs  asig, asig
endin

</CsInstruments>
<CsScore>
; a sinus
f 1 0 4096 10 1

i 1    0      3
i 1    +      1
i 1    +      6
s

;                  pitch
i 2      1    3    8.08
i 2      3.5  1    8.04
i 2      4    6    8.00
i 2      4    6    8.07
e
</CsScore>
</CsoundSynthesizer>


Crédits

Cette implémentation des générateurs unitaires Loris a été écrite par Kelly Fitz (loris@cerlsoundgroup.org). Elle est modèlisée sur un prototype d'implémentation du générateur unitaire lorisplay écrit par Corbin Champion, et basé sur la méthode de synthèse additive à largeur de bande améliorée et sur les algorithmes de métamorphose sonore implémentés dans la bibliothèque Loris pour la modélisation et la manipulation du son. Les opcodes ont été ensuite adaptés sous la forme d'un greffon de Csound 5 par Michael Gogins.