QUICK-REF - CsoundManual - Top of this section - Previous - Contents - Index - Next

Toot 12: Tables and Labels

This is by far our most complex instrument. In it we have designed the ability to store pitches in a table and then index them in three different ways: 1) directly, 2) via an lfo, and 3) randomly. As a means of switching between these three methods, we will use Csound's program control statements and logical and conditional operations.

      instr 12
         iseed      =      p8
         iamp       =      ampdb(p4)
         kdirect    =      p5
         imeth      =      p6
         ilforate   =      p7                 ; lfo and random index rate
         itab       =      2
         itablesize =      8

                if (imeth == 1)   igoto direct
                if (imeth == 2)   kgoto lfo
                if (imeth == 3)   kgoto random 

 direct: kpitch   table   kdirect, itab        ; index "f2" via p5
                  kgoto   contin 
      
 lfo:    kindex   phasor  ilforate
         kpitch   table   kindex  *  itablesize, itab
                  kgoto   contin

 random: kindex   randh   int(7), ilforate, iseed
         kpitch   table   abs(kindex), itab

 contin: kamp     linseg   0, p3 * .1, iamp, p3 * .9, 0  ; amp envelope
         asig     oscil    kamp, cpspch(kpitch), 1    ; audio osc   
                  out      asig                   
        endin

  f1 0 2048 10 1                             ; Sine
  f2 0 8 -2  8.00 8.02 8.04 8.05 8.07 8.09 8.11 9.00   ; cpspch C major scale

; method 1 - direct index of table values
; ins start   dur  amp index method  lforate   rndseed
  i12     0    .5   86   7    1        0        0
  i12    .5    .5   86   6    1        0
  i12     1    .5   86   5    1        0
  i12     1.5  .5   86   4    1        0
  i12     2    .5   86   3    1        0
  i12     2.5  .5   86   2    1        0
  i12     3    .5   86   1    1        0
  i12     3.5  .5   86   0    1        0
  i12     4    .5   86   0    1        0
  i12     4.5  .5   86   2    1        0
  i12     5    .5   86   4    1        0
  i12     5.5  2.5  86   7    1        0
s  

; method 2 - lfo index of table values
; ins  start dur  amp index method lforate   rndseed
  i12     0    2    86   0    2      1         0
  i12     3    2    86   0    2      2
  i12     6    2    86   0    2      4
  i12     9    2    86   0    2      8
  i12     12   2    86   0    2      16
s

; method 3 - random index of table values
; ins  start dur  amp  index method  rndrate  rndseed
  i12     0    2    86   0    3      2       .1
  i12     3    2    86   0    3      3       .2
  i12     6    2    86   0    3      4       .3
  i12     9    2    86   0    3      7       .4
  i12     12   2    86   0    3      11      .5
  i12     15   2    86   0    3      18      .6
  i12     18   2    86   0    3      29      .7
  i12     21   2    86   0    3      47      .8
  i12     24   2    86   0    3      76      .9
  i12     27   2    86   0    3      123     .9
  i12     30   5    86   0    3      199     .1


QUICK-REF - CsoundManual - Top of this section - Previous - Contents - Index - Next

HTML Csound Manual - © Jean Piché & Peter J. Nix, 1994-97