pvscross
Performs cross-synthesis between two source fsigs.
Syntax
The operation of this opcode is identical to that of pvcross (q.v.), except in using fsig_s rather than analysis files, and the absence of spectral envelope preservation. The amplitudes from _fsrc and fdest (using scale factors kamp1 for fsrc and kamp2 for fdest) are applied to the frequencies of fsrc. kamp1 and kamp2 must not exceed the range 0 to 1.
With this opcode, cross-synthesis can be performed on real-time audio input, by using pvsanal to generate fsrc and fdest. These must have the same format.
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 use of the pvscross opcode. It uses the file pvscross.csd.
| Example of the _pvscross_ opcode. |
|---|
| <CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
-odac ;;;realtime audio out
;-iadc ;;;uncomment -iadc if realtime audio input is needed too
; For Non-realtime ouput leave only the line below:
;-o pvscross.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>
sr = 44100
ksmps = 32
nchnls = 2
0dbfs = 1
; by Menno Knevel 2021, after an example by joachim heintz 2009
instr 1
ipermut = p4 ; 1 = change order of soundfiles
ifftsize = 1024
ioverlap = ifftsize / 4
iwinsize = ifftsize
iwinshape = 1 ; von-Hann window
Sfile1 = "oboe.aiff"
Sfile2 = "finneganswake1.flac"
ain1 = diskin2:a(Sfile1, .5, 0, 1)
ain2 = diskin2:a(Sfile2, 1, 0, 1) ; the wave plays 4 x faster and higher
fftin1 = pvsanal(ain1, ifftsize, ioverlap, iwinsize, iwinshape) ; fft-analysis of file 1
fftin2 = pvsanal(ain2, ifftsize, ioverlap, iwinsize, iwinshape) ; fft-analysis of file 2
ktrans = linseg(0, p3*.2, 0, p3*.6, p5, p3*.2, p5) ; transitions
if ipermut == 1 then
fcross = pvscross(fftin2, fftin1, ktrans, 1 - ktrans)
else
fcross = pvscross(fftin1, fftin2, ktrans, 1 - ktrans)
endif
aout = pvsynth(fcross)
outs(aout, aout)
endin
</CsInstruments>
<CsScore>
; use only first portion of sample (=p5)
i 1 0 12.7 0 0 ; frequencies from the oboe, no transition
i 1 14 12.7 1 0 ; frequencies from the voice, no transition
; transition over total sample (=p5)
i 1 28 12.7 0 1 ; frequencies from the oboe, amplitude transition from voice to oboe
i 1 42 12.7 1 1 ; frequencies from the voice, amplitude transition from oboe to voice
e
</CsScore>
</CsoundSynthesizer>
|
See also
Tools for Real-time Spectral Processing (pvs opcodes)
Credits
Author: Richard Dobson
August 2001
November 2003. Thanks to Kanata Motohashi, fixed the link to the pvcross opcode.
New in version 4.13