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] 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 815. 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 816. 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 "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>


See Also

pvsanal, pvsynth, pvsbuffer, pvsadsyn

Credits

Author: Victor Lazzarini
July 2007