pvsbufread
Prev | Orchestra Opcodes and Operators | Next

## pvsbufread

pvsbufread — This opcode reads a circular buffer of f-signals (streaming PV signals).

## Description

This opcode reads from a circular buffer of length ilen (secs), taking a handle for the buffer and a time pointer, which holds the current read position (also in seconds). It is used in conjunction with a pvsbuffer opocde. Reading is circular, wrapping around at the end of the buffer.

## Syntax

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

## Initialisation

ilo, ihi -- set the lowest and highest freqs to be read from the buffer (defaults to 0, Nyquist).

iclear -- set to 1 to clear output fsig before every write (default 1), 0 tells the opcode not to clear the output fsig. This is relevant when writing to subsets of an fsig frame using ilo, ihi.

## Performance

fsig -- output pv stream

ktime -- time position of reading pointer (in secs).

khandle -- handle identifying the buffer to be read. When using k-rate handles, it is important to initialise the k-rate variable to a given existing handle. When changing buffers, fsig buffers need to be compatible (same fsig format).

With this opcode and pvsbuffer, it is possible to, among other things:

- time-stretch/compress a fsig stream, by reading it at different rates
- delay a fsig or portions of it.
- 'brassage' two or more fsigs by switching buffers, since the reading handles are k-rate. Note that, when using k-rate handles, it is important to initialise the k-rate variable to a given handle (so that the fsig initialisation can take place) and it is only possible to switch handles between compatible fsig buffers (with the same fftsize and overlap).

| Note
It is important that the handle value passed to pvsbufread is valid and was created by pvsbuffer. Csound will crash with invalid handles.

## Examples

Here is an example of the pvsbufread opcode. It does 'brassage' by switching between two buffers.

Example 820. Example of the pvsbufread opcode

See the sections Real-time Audio and Command Line Flags for more information on using command line flags.

    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

Here is an example of the pvsbufread opcode. It uses the file pvsbufread.csd.

Example 821. Example of the pvsbufread opcode.

See the sections Real-time Audio and Command Line Flags for more information on using command line flags.

    <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 "drumsMlp.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>

## See also

Tools for Real-time Spectral Processing (pvs opcodes)

## Credits

Author: Victor Lazzarini
July 2007

Prev | Up | Next
pvsbuffer | Home | pvsbufread2