Csound Csound-dev Csound-tekno Search About

New Opcodes

Date1999-02-18 05:24
FromHans Mikelson
SubjectNew Opcodes
Hi,

I put source for some new opcodes at
http://www.werewolf.net/~hljmm/csound/opcodes/

nestedap implements three different nested all-pass filters useful for
implementing reverbs.

aout nestedap asig, imode, imaxdelay, idelay1, igain1 [, idelay2, igain2,
idelay3, igain3]

Mode 1 is a simple all-pass filter:

   __d1,g1__
  |         |
  v         v
------------->

Mode 2 is a single nested all-pass filter:

   __d1,g1____
  |  _d2,g2_  |
  | |       | |
  v v       v v
---------------->

Mode 3 is a double nested all-pass filter:

   __d1,g1______________
  |  _d2,g2_   _d3,g3_  |
  | |       | |       | |
  v v       v v       v v
-------------------------->

Note imaxdelay is not currently used but will be necessary if k-rate delay
is implemented.


lorenz implements the lorenz system of equations:

ax, ay, az lorenz ksv, krv, kbv, kh, ix, iy, iz, iskip

Note that the biquad example is not the latest version with the
initialization skipping feature.

entry.c:
void    nestedapset(void*), nestedap(void*);
void    lorenzset(void*), lorenz(void*);
{ "nestedap", S(NESTEDAP), 5,     "a",   "aiiiiooooo",   nestedapset, NULL,
nestedap  },
{ "lorenz", S(LORENZ), 5, "aaa", "kkkkiiii", lorenzset, NULL, lorenz },


The following example illustrates usage:

sr=44100
kr=4410
ksmps=10
nchnls=2

      instr     5

insnd =         p4

gasig diskin    insnd, 1

      endin

      instr     10

imax  =         1
idel1 =         p4
igain1 =        p5
idel2  =        p6
igain2 =        p7
idel3  =        p8
igain3 =        p9
idel4  =        p10
igain4 =        p11
idel5  =        p12
igain5 =        p13
idel6  =        p14
igain6 =        p15

afdbk  init     0

aout1 nestedap  gasig+afdbk*.4, 3, imax, idel1, igain1, idel2, igain2,
idel3, igain3
aout2 nestedap  aout1, 2, imax, idel4, igain4, idel5, igain5
aout  nestedap  aout2, 1, imax, idel6, igain6
afdbk butterlp  aout, 1000

      outs      gasig+(aout+aout1)/2, gasig-(aout+aout1)/2
gasig =         0


      endin

      instr     20

ksv    =         p4
krv    =         p5
kbv    =         p6

ax, ay, az lorenz ksv, krv, kbv, .01, .6, .6, .6, 1

      outs      ax*1000, ay*1000

      endin

; SCORE
f1 0 8192 10 1

; Diskin
;   Sta  Dur  Soundin
i5  0    3    1

; Reverb
;   Sta  Dur  Del1 Gain1 Del2 Gain2  Del3 Gain3 Del4 Gain4 Del5 Gain5 Del6
Gain6
i10 0    4    97   .11   23   .07    43   .09   72   .2    53   .2    119
.3

; Lorenz system
;   Sta  Dur  S   R  V
i20 5    1    10  28  2.667