locsig
Prev | Orchestra Opcodes and Operators | Next

## locsig

locsig — Takes an input signal and distributes between 2 or 4 channels.

## Description

locsig takes an input signal and distributes it among 2 or 4 channels using values in degrees to calculate the balance between adjacent channels. It also takes arguments for distance (used to attenuate signals that are to sound as if they are some distance further than the loudspeaker itself), and for the amount the signal that will be sent to reverberators. This unit is based upon the example in the Charles Dodge/Thomas Jerse book, Computer Music, page 320.

## Syntax

    a1, a2 locsig asig, kdegree, kdistance, kreverbsend

    a1, a2,  a3, a4 locsig asig, kdegree, kdistance, kreverbsend

## Performance

kdegree -- value between 0 and 360 for placement of the signal in a 2 or 4 channel space configured as: a1=0, a2=90, a3=180, a4=270 (kdegree=45 would balanced the signal equally between a1 and a2). locsig maps kdegree to sin and cos functions to derive the signal balances (e.g.: asig=1, kdegree=45, a1=a2=.707).

kdistance -- value >= 1 used to attenuate the signal and to calculate reverb level to simulate distance cues. As kdistance gets larger the sound should get softer and somewhat more reverberant (assuming the use of locsend in this case).

kreverbsend -- the percentage of the direct signal that will be factored along with the distance and degree values to derive signal amounts that can be sent to a reverb unit such as reverb, or reverb2.

## Examples

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

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

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

    ga1 init 0
    ga2 init 0
    ga3 init 0
    ga4 init 0

    instr 1

    krevsend  = p4
    aout	  diskin2 "drumsMlp.wav", 1, 0, 1
    kdegree	  line 0, p3, 360 ;full circle
    kdistance line 1, p3 , 1
    a1, a2, a3, a4     locsig aout, kdegree, kdistance, krevsend
    ar1, ar2, ar3, ar4 locsend

    ga1 = ga1+ar1
    ga2 = ga2+ar2
    ga3 = ga3+ar3
    ga4 = ga4+ar4
        outq a1, a2, a3, a4

    endin

    instr 99 ; reverb instrument
    a1 reverb2 ga1, 3.5, .5
    a2 reverb2 ga2, 3.5, .5
    a3 reverb2 ga3, 3.5, .5
    a4 reverb2 ga4, 3.5, .5
       outq	a1, a2, a3, a4

    ga1 = 0
    ga2 = 0
    ga3 = 0
    ga4 = 0

    endin
    </CsInstruments>
    <CsScore>
    ; sine wave.
    f 1 0 16384 10 1

    i 1 0  14  .1	;with reverb
    i 1 14 14  0	;no reverb
    i99 0 36
    e
    </CsScore>
    </CsoundSynthesizer>

In the above example, the signal, aout, is sent around a complete circle once during the duration of a note while at the same time it becomes more and more "distant" from the listeners' location. locsig sends the appropriate amount of the signal internally to locsend. The outputs of the locsend are added to global accumulators in a common Csound style and the global signals are used as inputs to the reverb units in a separate instrument.

locsig is useful for quad and stereo panning as well as fixed placed of sounds anywhere between two loudspeakers. Below is an example of the fixed placement of sounds in a stereo field.

    instr 1
      a1, a2             locsig  asig, p4, p5, .1
      ar1, ar2           locsend
      ga1 = ga1+ar1
      ga2 = ga2+ar2
                         outs a1, a
    endin
    instr 99
      ; reverb....
    endin

A few notes:

      ;place the sound in the left speaker and near:
      i1 0 1 0 1

      ;place the sound in the right speaker and far:
      i1 1 1 90 25

      ;place the sound equally between left and right and in the middle ground distance:
      i1 2 1 45 12
      e

The next example shows a simple intuitive use of the distance value to simulate Doppler shift. The same value is used to scale the frequency as is used as the distance input to locsig.

      kdistance          line    1, p3, 10
      kfreq = (ifreq * 340) / (340 + kdistance)
      asig               oscili  iamp, kfreq, 1
      kdegree            line    0, p3, 360
      a1, a2, a3, a4     locsig  asig, kdegree, kdistance, .1
      ar1, ar2, ar3, ar4 locsend

## See also

Panning and Spatialization: Amplitude spatialization

## Credits

Author: Richard Karpen
Seattle, WA USA
1998

New in Csound version 3.48

Prev | Up | Next
locsend | Home | log