pvsmorph — Performs morphing (or interpolation) between two source fsigs.
The operation of this opcode is similar to that of pvinterp (q.v.), except in using fsigs rather than analysis files, and the absence of spectral envelope preservation. The amplitudes and frequencies of fsig1 are interpolated with those of fsig2, depending on the values of kampint and kfrqint, respectively. These range between 0 and 1, where 0 means fsig1 and 1, fsig2. Anything in between will interpolate amps and/or freqs of the two fsigs.
With this opcode, morphing can be performed on real-time audio input, by using pvsanal to generate fsig1 and fsig2. 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. |
Here is an example of the pvsmorph opcode. It uses the file pvsmorph.csd.
Example 852. Example of the pvsmorph 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 pvsmorph.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 giSine ftgen 0, 0, 4096, 10, 1 instr 1 iampint1 = p4 iampint2 = p5 ifrqint1 = p6 ifrqint2 = p7 kampint linseg iampint1, p3*.2, iampint1, p3*.6, iampint2, p3*.2, iampint2 kfrqint linseg ifrqint1, p3*.2, ifrqint1, p3*.6, ifrqint2, p3*.2, ifrqint2 ifftsize = 1024 ioverlap = ifftsize / 4 iwinsize = ifftsize iwinshape = 1 ; von-Hann window Sfile1 = "fox.wav" ain1 diskin2 Sfile1, 1, 0, 1 kfreq line 30, p3, 500 ain2 buzz .8, kfreq, 50, giSine fftin1 pvsanal ain1, ifftsize, ioverlap, iwinsize, iwinshape fftin2 pvsanal ain2, ifftsize, ioverlap, iwinsize, iwinshape fmorph pvsmorph fftin1, fftin2, kampint, kfrqint aout pvsynth fmorph outs aout * .6, aout * .6 endin </CsInstruments> <CsScore> ; iampint1 iampint2 ifrqint1 ifrqint2 i 1 0 12.2 0 0 1 1 i 1 14 12.2 1 0 1 0 i 1 28 12.2 0 1 0 1 e </CsScore> </CsoundSynthesizer>
Here is another example of the pvsmorph opcode. It uses the file pvsmorph2.csd.
Example 853. Example of the pvsmorph 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 pvsmorph-2.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 ; this example uses the files "flute.aiff" and "saxophone-alto-C-octave0.wav" instr 1 iampint1 = p4 ; value for interpolating the amplitudes at the beginning ... iampint2 = p5 ; ... and at the end ifrqint1 = p6 ; value for unterpolating the frequencies at the beginning ... ifrqint2 = p7 ; ... and at the end kampint linseg iampint1, p3, iampint2 kfrqint linseg ifrqint1, p3, ifrqint2 ifftsize = 1024 ioverlap = ifftsize / 4 iwinsize = ifftsize iwinshape = 1 ; von-Hann window Sfile1 = "flute.aiff" Sfile2 = "saxophone-alto-C-octave0.wav" ain1 soundin Sfile1 ain2 soundin Sfile2 fftin1 pvsanal ain1, ifftsize, ioverlap, iwinsize, iwinshape fftin2 pvsanal ain2, ifftsize, ioverlap, iwinsize, iwinshape fmorph pvsmorph fftin1, fftin2, kampint, kfrqint aout pvsynth fmorph outs aout , aout endin instr 2 ; moving randomly in certain borders between two spectra iampintmin = p4 ; minimum value for amplitudes iampintmax = p5 ; maximum value for amplitudes ifrqintmin = p6 ; minimum value for frequencies ifrqintmax = p7 ; maximum value for frequencies imovefreq = p8 ; frequency for generating new random values kampint randomi iampintmin, iampintmax, imovefreq kfrqint randomi ifrqintmin, ifrqintmax, imovefreq ifftsize = 1024 ioverlap = ifftsize / 4 iwinsize = ifftsize iwinshape = 1 ; von-Hann window Sfile1 = "flute.aiff" Sfile2 = "saxophone-alto-C-octave0.wav" ain1 soundin Sfile1 ain2 soundin Sfile2 fftin1 pvsanal ain1, ifftsize, ioverlap, iwinsize, iwinshape fftin2 pvsanal ain2, ifftsize, ioverlap, iwinsize, iwinshape fmorph pvsmorph fftin1, fftin2, kampint, kfrqint aout pvsynth fmorph outs aout, aout endin </CsInstruments> <CsScore> i 1 0 3 0 0 1 1 ; amplitudes from flute, frequencies from saxophone i 1 3 3 1 1 0 0 ; amplitudes from saxophone, frequencies from flute i 1 6 3 0 1 0 1 ; amplitudes and frequencies moving from flute to saxophone i 1 9 3 1 0 1 0 ; amplitudes and frequencies moving from saxophone to flute i 2 13 3 .2 .8 .2 .8 10 ; amps and freqs moving randomly between the two spectra e </CsScore> </CsoundSynthesizer>