GEN12
Prev | Score Statements and GEN Routines | Next

## GEN12

GEN12 — Generates the log of a modified Bessel function of the second kind.

## Description

This generates the log of a modified Bessel function of the second kind, order 0, suitable for use in amplitude-modulated FM.

## Syntax

    f # time size 12 xint

## Initialization

size -- number of points in the table. Must be a power of 2 or a power-of-2 plus 1 (see f statement). The normal value is power-of-2 plus 1.

xint -- specifies the x interval [0 to +xint] over which the function is defined.

| Note
This subroutine draws the natural log of a modified Bessel function of the second kind, order 0 (commonly written as I subscript 0), over the x-interval requested. The call should have rescaling inhibited. The function is useful as an amplitude scaling factor in cycle-synchronous amplitude-modulated FM. (See Palamin & Palamin, J. Audio Eng. Soc., 36/9, Sept. 1988, pp.671-684.) The algorithm is interesting because it permits the normally symmetric FM spectrum to be made asymmetric around a frequency other than the carrier, and is thereby useful for formant positioning. By using a table lookup index of I(r - 1/r), where I is the FM modulation index and r is an exponential parameter affecting partial strengths, the Palamin algorithm becomes relatively efficient, requiring only oscil's, table lookups, and a single exp call.

## Examples

Here is a simple example of the GEN12 routine. It uses the file gen12.csd. It generates the function ln(I0(x)) from 0 to 20. Here is its diagram:

Diagram of the waveform generated by GEN12.

Example 620. A simple example of the GEN12 routine.

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           -iadc    ;;;RT audio I/O
    ; For Non-realtime ouput leave only the line below:
    ; -o gen12.wav -W ;;; for file output any platform
    </CsOptions>
    <CsInstruments>

    ; Initialize the global variables.
    sr = 44100
    kr = 4410
    ksmps = 10
    nchnls = 1

    ; Instrument #1.
    instr 1
      ; Create an index over the length of our entire note.
      kcps init 1/p3
      kndx phasor kcps

      ; Read Table #1 with our index.
      ifn = 1
      ixmode = 1
      kamp tablei kndx, ifn, ixmode

      ; Create a sine wave, use the Table #1 values to control
      ; the amplitude. This creates a sound with a long attack.
      a1 oscil kamp*30000, 440, 2
      out a1
    endin

    </CsInstruments>
    <CsScore>

    ; Table #1: a modified Bessel function (using GEN12).
    f 1 0 2049 12 20
    ; Table #2, a sine wave.
    f 2 0 16384 10 1

    ; Play Instrument #1 for 2 seconds.
    i 1 0 2
    e

    </CsScore>
    </CsoundSynthesizer>

## Credits

Example written by Kevin Conder

Prev | Up | Next
GEN11 | Home | GEN13