pvsbufread — This opcode reads a circular buffer of f-signals (streaming PV signals).
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.
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.
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:
Note | |
---|---|
It is important that the handle value passed to pvsbufread is valid and was created by pvsbuffer. Csound will crash with invalid handles. |
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>