iphs -- initial phase, expressed as a fraction of a cycle (0 to 1). If -1 initialization is skipped. If iphas>1 each phasor will be initialized with a random value.
Performance
kndx -- index value to access individual phasors
For each independent phasor, an internal phase is successively accumulated in accordance with the kcps or xcps frequency to produce a moving phase value, normalized to lie in the range 0 <= phs < 1. Each individual phasor is accessed by index kndx.
This phasor bank can be used inside a k-rate loop to generate multiple independent voices, or together with the adsynt opcode to change parameters in the tables used by adsynt.
Examples
Here is an example of the phasorbnk opcode. It uses the file phasorbnk.csd.
<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 phasorbnk.wav -W ;;; for file output any platform</CsOptions><CsInstruments>; Initialize the global variables.sr=44100kr=4410ksmps=10nchnls=1; Generate a sinewave table.giwaveftgen1,0,1024,10,1; Instrument #1instr1; Generate 10 voices.icnt=10; Empty the output buffer.asum=0; Reset the loop index.kindex=0; This loop is executed every k-cycle.loop:; Generate non-harmonic partials.kcps=(kindex+1)*100+30; Get the phase for each voice.aphasphasorbnkkcps,kindex,icnt; Read the wave from the table.asigtableaphas,giwave,1; Accumulate the audio output.asum=asum+asig; Increment the index.kindex=kindex+1; Perform the loop until the index (kindex) reaches ; the counter value (icnt).if(kindex<icnt)kgotoloopoutasum*3000endin</CsInstruments><CsScore>; Play Instrument #1 for two seconds.i102e</CsScore></CsoundSynthesizer>
Generate multiple voices with independent partials. This example is better with adsynt. See also the example under adsynt, for k-rate use of phasorbnk.