pvsbuffer
This opcode creates and writes to a circular buffer for f-signals (streaming PV signals).
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 of the _pvsbuffer_ opcode. |
---|
| <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