The Alternative Csound Reference Manual
Previous |  | Next

# phasorbnk

phasorbnk -- Produce an arbitrary number of normalized moving phase values.

## Description

Produce an arbitrary number of normalized moving phase values, accessable by an index.

## Syntax

ar phasorbnk xcps, kndx, icnt [, iphs]

kr phasorbnk kcps, kndx, icnt [, iphs]

## Initialization

icnt -- maximum number of phasors to be used.

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 files phasorbnk.orc and phasorbnk.sco.

Example 1. Example of the phasorbnk opcode.

    /* phasorbnk.orc */
    ; Initialize the global variables.
    sr = 44100
    kr = 4410
    ksmps = 10
    nchnls = 1

    ; Generate a sinewave table.
    giwave ftgen 1, 0, 1024, 10, 1

    ; Instrument #1
    instr 1
      ; 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.
      aphas phasorbnk kcps, kindex, icnt
      ; Read the wave from the table.
      asig table aphas, 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) kgoto loop

      out asum*3000
    endin
    /* phasorbnk.orc */

    /* phasorbnk.sco */
    ; Play Instrument #1 for two seconds.
    i 1 0 2
    e
    /* phasorbnk.sco */

Generate multiple voices with independent partials. This example is better with adsynt. See also the example under adsynt, for k-rate use of phasorbnk.

## Credits

Author: Peter Neubäcker
Munich, Germany
August 1999

New in Csound version 3.58

Previous | Home | Next
phasor | Up | pinkish