pvsadsyn
Prev | Orchestra Opcodes and Operators | Next

## pvsadsyn

pvsadsyn — Resynthesize using a fast oscillator-bank.

## Description

Resynthesize using a fast oscillator-bank.

## Syntax

    ares pvsadsyn fsrc, inoscs, kfmod [, ibinoffset] [, ibinincr] [, iinit]

## Initialization

inoscs -- The number of analysis bins to synthesise. Cannot be larger than the size of fsrc (see pvsinfo), e.g. as created by pvsanal. Processing time is directly proportional to inoscs.

ibinoffset (optional, default=0) -- The first (lowest) bin to resynthesise, counting from 0 (default = 0).

ibinincr (optional) -- Starting from bin ibinoffset, resynthesize bins ibinincr apart.

iinit (optional) -- Skip reinitialization. This is not currently implemented for any of these opcodes, and it remains to be seen if it is even practical.

## Performance

kfmod -- Scale all frequencies by factor kfmod. 1.0 = no change, 2 = up one octave.

pvsadsyn is experimental, and implements the oscillator bank using a fast direct calculation method, rather than a lookup table. This takes advantage of the fact, empirically arrived at, that for the analysis rates generally used, (and presuming analysis using pvsanal, where frequencies in a bin change only slightly between frames) it is not necessary to interpolate frequencies between frames, only amplitudes. Accurate resynthesis is often contingent on the use of pvsanal with iwinsize = ifftsize*2.

This opcode is the most likely to change, or be much extended, according to feedback and advice from users. It is likely that a full interpolating table-based method will be added, via a further optional iarg. The parameter list to pvsadsyn mimics that for pvadd, but excludes spectral extraction.

## Examples

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

Example 810. Example of the pvsadsyn 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 pvsadsyn.wav -W ;;; for file output any platform
    </CsOptions>
    <CsInstruments>

    sr = 44100
    ksmps = 16
    nchnls = 2
    0dbfs = 1

    ;; example written by joachim heintz 2009
    ; (additions by Menno Knevel 2021)
    opcode FileToPvsBuf, iik, Siiii
    ;;writes an audio file at the first k-cycle to a fft-buffer (via pvsbuffer)
    Sfile, ifftsize, ioverlap, iwinsize, iwinshape 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
    ibuf, ktim	pvsbuffer	fftin, ilen + (ifftsize / sr)
    		loop_lt	kcount, 1, kcycles, loop
    		xout		ibuf, ilen, ktim
    endif
    endop

    instr 1
    istretch	=		p4; time stretching factor
    ifftsize	=		1024
    ioverlap	=		ifftsize / 4
    iwinsize	=		ifftsize
    iwinshape	=		1; von-Hann window
    ibuffer, ilen, k0		FileToPvsBuf	"fox.wav", ifftsize, ioverlap, iwinsize, iwinshape
    p3		=		istretch * ilen; set p3 to the correct value
    prints  "--**new duration of note = %f seconds**--\n", p3
    ktmpnt		linseg		0, p3, ilen; time pointer
    fread 		pvsbufread  	ktmpnt, ibuffer; read the buffer
    aout		pvsadsyn	fread, 50, 1, p5; resynthesis of 50 bins, with offset p5
    aout        *=  .7      ; scale amplitude
    		outs		aout, aout
    endin

    </CsInstruments>
    <CsScore>
    ;         stretch   offset
    i 1  0 1    10        0
    i 1 28 1    5        30
    e
    </CsScore>
    </CsoundSynthesizer>

## See also

Tools for Real-time Spectral Processing (pvs opcodes)

## Credits

Author: Richard Dobson
August 2001

New in version 4.13

Prev | Up | Next
pvread | Home | pvsanal