pvsbufread

pvsbufread — Lit un tampon circulaire de signaux-f (signaux PV en flot).

Description

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.

Syntaxe

fsig pvsbufread  ktime, khandle[, ilo, ihi, iclear] 

Initialisation

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.

Exécution

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 :

  • étirer/compresser dans le temps un flot fsig, en le lisant à différentes vitesses
  • retarder un fsig ou certaines de ses parties.
  • "brasser" deux ou plusieurs fsigs en alternant les tampons, car les identifiants de lecture sont de taux-k. Noter que lorsque l'on utilise des identifiants de taux-k, il est important d'initialiser la variable de taux-k avec un identifiant donné (afin que l'initialisation du fsig puisse avoir lieu) et on ne peut changer d'identifiant qu'entre des tampons de fsig compatibles (avec les mêmes taille de TFR et de recouvrement).

[Note] 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.

Exemples

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>


Voir aussi

pvsanal, pvsynth, pvsbuffer, pvsadsyn

Crédits

Auteur : Victor Lazzarini
Juillet 2007