pvsbufread — Lit un tampon circulaire de signaux-f (signaux PV en flot).
Cet opcode lit à partir d'un tampon circulaire de longueur ilen (secondes), prenant un identificateur pour le tampon et un pointeur temporel qui conserve la position de lecture courante (aussi en secondes). Il est utilisé en conjonction avec un opcode pvsbuffer. La lecture est circulaire avec repliement à la fin du tampon.
ilo, ihi -- fixe les fréquences la plus basse et la plus haute à lire depuis le tampon (par défaut 0 et fréquence de Nyquist).
iclear -- fixé à 1 pour effacer le fsig de sortie avant chaque écriture (1 par défaut), fixé à 0 indique à l'opcode de ne pas effacer le fsig de sortie. Ceci est pertinent lorsque l'on écrit dans des sous-ensembles d'une trame de fsig en utilisant ilo et ihi.
fsig -- flot pv en sortie.
ktime -- position temporelle du pointeur de lecture (en secondes).
khandle -- identifiant du tampon à lire. Lorsque l'on utilise des identifiants de taux-k, il est important d'initialiser la variable de taux-k avec un identifiant existant. Lorsque l'on change de tampon, les différents tampons de fsig doivent être compatibles (même format de fsig).
Avec cet opcode et pvsbuffer, il est possible entre autres de :
Note | |
---|---|
Il est important que la valeur de l'identifant passé à pvsbufread soit celle d'un identifiant valide créé par pvsbuffer. Avec des identifiants non valides, Csound plantera. |
Voici un exemple de l'opcode pvsbufread. Il effectue un "brassage" en alternant entre deux tampons.
Exemple 814. Exemple de l'opcode pvsbufread
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.
fsig1 pvsanal asig1, 1024, 256, 1024, 1 fsig2 pvsanal asig2, 1024, 256, 1024, 1 ibuf1, kt1 pvsbuffer fsig1, 10 ; 10-sec buf with fsig1 ibuf2, kt2 pvsbuffer fsig2, 7 ; 7-sec buf with fsig2 khan init ibuf1 ; initialise handle to buf1 if ktrig > 0 then ; switch buffers according to trigger khan = ibuf2 else khan = ibuf1 endif fsb pvsbufread kt1, khan ; read buffer
Voici un exemple de l'opcode pvsbufread. Il utilise le fichier pvsbufread.csd.
Exemple 815. Exemple de l'opcode pvsbufread.
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 -odac ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o pvsbufread.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 ;; example written by joachim heintz 2009 ; additions by Menno Knevel 2021 opcode FileToPvsBuf, iik, Siiiii ;;writes an audio file at the first k-cycle to a fft-buffer (via pvsbuffer) Sfile, ifftsize, ioverlap, iwinsize, iwinshape, ilength xin ktimek timeinstk if ktimek == 1 then ilen filelen Sfile kcycles = ilen * kr; number of k-cycles to write the fft-buffer kcount init 0 loop: ain soundin Sfile fftin pvsanal ain, ifftsize, ioverlap, iwinsize, iwinshape ibufln = ilen + (ifftsize / sr) ibuf, ktim pvsbuffer fftin, ibufln loop_lt kcount, 1, kcycles, loop xout ibuf, ilen, ktim endif endop instr 1 ifftsize = 1024 ioverlap = ifftsize / 4 iwinsize = ifftsize iwinshape = 1; von-Hann window ilength = p4 ibuffer, ilen, k0 FileToPvsBuf "beats.wav", ifftsize, ioverlap, iwinsize, iwinshape, ilength ktmpnt linseg ilen, p3, 0 ; reads the buffer backwards in p3 seconds fread pvsbufread ktmpnt, ibuffer, p4, p5 ; use the filter options aout pvsynth fread outs aout, aout endin </CsInstruments> <CsScore> ; low high i 1 0 5 100 1000 ; filter to this range i 1 5 5 1000 10000 ; ...and to this range i 1 10 5 0 0 ; no filtering, equal to not using ilo and ihi at all! e </CsScore> </CsoundSynthesizer>