pvsbuffer
Prev | Orchestra Opcodes and Operators | Next

## pvsbuffer

pvsbuffer — This opcode creates and writes to a circular buffer for f-signals (streaming PV signals).

## Description

This opcode sets up and writes to a circular buffer of length ilen (secs), giving a handle for the buffer and a time pointer, which holds the current write position (also in seconds). It can be used with one or more pvsbufread opcodes. Writing is circular, wrapping around at the end of the buffer.

## Syntax

    ihandle, ktime  pvsbuffer fsig, ilen

## Initialisation

ihandle -- handle identifying this particular buffer, which should be passed to a reader opcode.

ilen -- buffer length in seconds.

fsig -- an input pv stream

ktime -- the current time of writing in the buffer

pvsbuffer stores fsig in a buffer which can be read by pvsbufread using the handle ihandle. Different buffers will have different handles so they can be read independently by different pvsbufread opcodes. pvsbuffer gives in its output the current time (ktime) inside the ring buffer which has just been written.

## Examples

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

Example 819. Example of the pvsbuffer 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 pvsbuffer.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 * ilength) + (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 "fox.wav", ifftsize, ioverlap, iwinsize, iwinshape, ilength
    ktmpnt		linseg	ilen, p3, 0; reads the buffer backwards in p3 seconds
    fread 		pvsbufread  ktmpnt, ibuffer
    aout		pvsynth	fread
    outs    aout, aout
    endin

    </CsInstruments>
    <CsScore>
    i 1 0 5 .05 ; buffer a small portion
    i 1 6 5 .5  ; half of total length
    i 1 12 5  1 ; buffer total length
    e
    </CsScore>
    </CsoundSynthesizer>

## See also

Tools for Real-time Spectral Processing (pvs opcodes)

## Credits

Author: Victor Lazzarini
July 2007

Prev | Up | Next
pvsblur | Home | pvsbufread