pvsbufread
Précédent | Opcodes et opérateurs de l'orchestre | Suivant

## 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
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 704. 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 705. 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 = 16
    nchnls = 1
    0dbfs = 1

    ;; example written by joachim heintz 2009

    opcode FileToPvsBuf, iik, Siiii
    ;;writes an audio file at the first k-cycle to a fft-buffer (via pvsbuffer)
    Sfile, ifftsize, ioverlap, iwinsize, iwinshape 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
    ibuf, ktim	pvsbuffer	fftin, ilen + (ifftsize / sr)
    		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
    ibuffer, ilen, k0		FileToPvsBuf	"fox.wav", ifftsize, ioverlap, iwinsize, iwinshape
    ktmpnt		linseg		ilen, p3, 0; reads the buffer backwards in p3 seconds
    fread 		pvsbufread  	ktmpnt, ibuffer
    aout		pvsynth	fread
    		out		aout
    endin

    </CsInstruments>
    <CsScore>
    i 1 0 5
    e
    </CsScore>
    </CsoundSynthesizer>

## Voir aussi

pvsanal, pvsynth, pvsbuffer, pvsadsyn

## Crédits

Auteur : Victor Lazzarini
Juillet 2007

Précédent | Niveau supérieur | Suivant
pvsbuffer | Sommaire | pvsbufread2