Skip to content

pvsarp

Arpeggiate the spectral components of a streaming pv signal.

This opcode arpeggiates spectral components, by amplifying one bin and attenuating all the others around it. Used with an LFO it will provide a spectral arpeggiator similar to Trevor Wishart's CDP program specarp.

Syntax

fsig pvsarp fsigin, kbin, kdepth, kgain

Performance

fsig -- output pv stream

fsigin -- input pv stream

kbin -- target bin, normalised 0 - 1 (0Hz - Nyquist).

kdepth -- depth of attenuation of surrounding bins

kgain -- gain boost applied to target bin

⚠ Warning

It is unsafe to use the same f-variable for both input and output of pvs opcodes. Using the same one might lead to undefined behavior on some opcodes. Use a different one on the left and right sides of the opcode.

Examples

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

Example of the pvsarp opcode.
<CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
; Audio out   Audio in    No messages
-odac           -iadc     ;;;-d     RT audio I/O
; For Non-realtime ouput leave only the line below:
; -o pvsarp.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>
; additions by Menno Knevel 2021
sr = 44100
ksmps = 32
nchnls = 2
0dbfs = 1
nchnls_i = 1  ; number of input channels

instr 1

asig  diskin2   "flute.aiff", 1, 0, 1      ; get the sample in
idepth = p4
prints "\n--**here the sample is used**--\n"
fsig  pvsanal   asig, 1024, 256, 1024, 1 ; analyse it
kbin  oscili   0.1, 0.05, 1               ; ftable 1 in the 0-1 range
ftps  pvsarp   fsig, kbin+0.01, idepth, 7   ; arpeggiate it (range 220.5 - 2425.5)
atps  pvsynth  ftps                      ; synthesise it
       outs atps, atps

endin

instr 2

asig  in                                 ; get the (microphone?) signal in
idepth = p4
prints "\n--**please use microphone**--\n"
prints "--**if no input is given, there will be only silence...\n"
fsig  pvsanal   asig, 1024, 256, 1024, 1 ; analyse it
kbin  oscili   0.1, 0.3, 1               ; ftable 1 in the 0-1 range
ftps  pvsarp   fsig, kbin+0.01, idepth, 7   ; arpeggiate it (range 220.5 - 2425.5)
atps  pvsynth  ftps                      ; synthesise it
       outs atps, atps

endin

</CsInstruments>
<CsScore>
f 1 0 4096 10 1 ;sine wave
s
i 1 0 10 0.5    ; notes for the flute sample
i 1 + 10 1
s
i 2 0 10 0.9    ; notes for the microphone
i 2 + 10 0.5
e
</CsScore>
</CsoundSynthesizer>

Here is another example of the pvsarp opcode. It uses the file pvsarp2.csd

Example of the pvsarp 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 pvsarp2.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
 instr 1
 ifftsize       = 1024
 ioverlap       = ifftsize / 4
 iwinsize       = ifftsize
 iwinshape      = 1     ; von-Hann window
 Sfile1         = "fox.wav"
 ain1           soundin Sfile1
 fftin          pvsanal ain1, ifftsize, ioverlap, iwinsize, iwinshape
   ;make 3 independently moving accentuations in the spectrum
 kbin1          linseg          0.05, p3/2, .05, p3/2, .05
 farp1          pvsarp          fftin, kbin1, .9, 10
 kbin2          linseg          0.075, p3/2, .1, p3/2, .075
 farp2          pvsarp          fftin, kbin2, .9, 10
 kbin3          linseg          0.02, p3/2, .03, p3/2, .04
 farp3          pvsarp          fftin, kbin3, .9, 10
   ;resynthesize and add them
 aout1          pvsynth farp1
 aout2          pvsynth farp2
 aout3          pvsynth farp3
 ;aout          =               aout1*.3 + aout2*.3 + aout3*.3
                outs            aout1*1 + aout2*.5, aout2*.5 + aout3*.3
 endin

 </CsInstruments>
 <CsScore>
 i 1 0 3
 e
 </CsScore>
 </CsoundSynthesizer>

See also

Tools for Real-time Spectral Processing (pvs opcodes)

Credits

Author: Victor Lazzarini
April 2005

New plugin in version 5

April 2005.