pan
Prev | Orchestra Opcodes and Operators | Next

## pan

pan — Distribute an audio signal amongst four channels.

## Description

Distribute an audio signal amongst four channels with localization control.

## Syntax

    a1, a2, a3, a4 pan asig, kx, ky, ifn [, imode] [, ioffset]

## Initialization

ifn -- function table number of a stored pattern describing the amplitude growth in a speaker channel as sound moves towards it from an adjacent speaker. Requires extended guard-point.

imode (optional) -- mode of the kx, ky position values. 0 signifies raw index mode, 1 means the inputs are normalized (0 - 1). The default value is 0.

ioffset (optional) -- offset indicator for kx, ky. 0 infers the origin to be at channel 3 (left rear); 1 requests an axis shift to the quadraphonic center. The default value is 0.

## Performance

pan takes an input signal asig and distributes it amongst four outputs (essentially quad speakers) according to the controls kx and ky. For normalized input (mode=1) and no offset, the four output locations are in order: left-front at (0,1), right-front at (1,1), left-rear at the origin (0,0), and right-rear at (1,0). In the notation (kx, ky), the coordinates kx and ky, each ranging 0 - 1, thus control the 'rightness' and 'forwardness' of a sound location.

Movement between speakers is by amplitude variation, controlled by the stored function table ifn. As kx goes from 0 to 1, the strength of the right-hand signals will grow from the left-most table value to the right-most, while that of the left-hand signals will progress from the right-most table value to the left-most. For a simple linear pan, the table might contain the linear function 0 - 1. A more correct pan that maintains constant power would be obtained by storing the first quadrant of a sinusoid. Since pan will scale and truncate kx and ky in simple table lookup, a medium-large table (say 8193) should be used.

kx, ky values are not restricted to 0 - 1. A circular motion passing through all four speakers (inscribed) would have a diameter of root 2, and might be defined by a circle of radius R = root 1/2 with center at (.5,.5). kx, ky would then come from Rcos(angle), Rsin(angle), with an implicit origin at (.5,.5) (i.e. ioffset = 1). Unscaled raw values operate similarly. Sounds can thus be located anywhere in the polar or Cartesian plane; points lying outside the speaker square are projected correctly onto the square's perimeter as for a listener at the center.

## Example

Here is an example of the pan opcodes. It uses the file pan.csd.

Example 600. Example of the pan opcodes.

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
    -odac     ;;;realtime audio out
    ;-iadc    ;;;uncomment -iadc if real audio input is needed too
    ; For Non-realtime ouput leave only the line below:
    ; -o pan.wav -W ;;; for file output any platform
    </CsOptions>
    <CsInstruments>

    sr = 44100
    ksmps = 32
    nchnls = 4
    0dbfs  = 1

    instr 1

    kcps = p4
    k1   phasor kcps		; "fraction" of circle - controls speed of rotation - can be negative
    k2   tablei k1, 1, 1 		; sin of angle (sinusoid in f1)
    k3   tablei k1, 1, 1, .25, 1	; cos of angle (sin offset 1/4 circle)
    arnd randomi 400, 1000, 50	; produce random values
    asig poscil .7, arnd, 1		; audio signal..

    a1,a2,a3,a4 pan	asig, k2/2, k3/2, 2, 1, 1	; sent in a circle (f2=1st quad sin)
    	outq	a1, a2, a3, a4

    endin
    </CsInstruments>
    <CsScore>

    f1 0 8192 10 1
    f2 0 8193 9 .25 1 0

    i1 0 10 .2	;move to the tight
    i1 11 10 -.2	;move to the left
    e

    </CsScore>
    </CsoundSynthesizer>

Prev | Up | Next
pan2 | Home | pareq