Monday, July 18, 2011

fm-drum

Orch:
sr = 44100
kr = 4410
ksmps = 10
nchnls = 1

;
; This is fm-drum written by Jan Mattox and distributed with
; CLM (Common Lisp Music). The CLM original is in the file 
; fmex.ins. 
;
; Note - the low drum is pretty close to the CLM original, but the 
; high drum is some way off.
;


instr 1
  isinetbl      = 1
  idur          = p3
  iamp          = p4
  ifreq         = p5
  iindx         = p6
  ihigh         = p7
  inoiseamp     = 1000.0
  icasrat       = (ihigh > 0 ? 8.525 : 3.515)
  imodrat       = (ihigh > 0 ? 3.414 : 1.414)
  iamprise      = 0.015
  iamp1decay    = (idur < 0.18 ? 0.5 * idur : 0.18)
  iamp2decay    = idur - (iamprise + iamp1decay)
  icascadehz    = ifreq * icasrat
  imodhz        = ifreq * imodrat
  icarrhz       = ifreq
  idevscaler    = 7000
  icascscaler   = iindx * icascadehz 
  imodscaler    = iindx * imodhz
  iglsscaler    = (ihigh > 0 ? 66.0 : 0.0)

  

  ; modulator indices
  kindxenv    transeg .01, .015, 2,  1, .085, -1, 0.333,  idur-.10, -1, .012

  ; noise envelope does not decay to zero...
  ; In CLM there is a minor difference for high and low but it 
  ; seems to do little in the generated waveform.
  knoiseenv   expseg  .01, .015, 1, .005, 1, .010, .1, .040, .002, idur-.070, 0.01

  ; amplitude envelope...
  kampenv     transeg .01, iamprise, 1, 1.0, iamp1decay, 2, .75, iamp2decay, -8, .001


  ; gls envelope
  kgls        linseg 0, idur*0.25, 0, idur*.5, 1, idur*.25, 1

  ; deviation
  adev1     rand inoiseamp
  adevsig   = idevscaler * knoiseenv * adev1
  adevsig   = (icasrat * iglsscaler * kgls) + adevsig 

  ; cacasade 
  acascphs  phasor  icascadehz + adevsig
  acascsig  tablei  acascphs, isinetbl, 1, 0, 1

  acascsig  = icascscaler * kindxenv * acascsig 
  acascsig  = (imodrat * iglsscaler * kgls) + acascsig

  ; modulator
  amodphs   phasor  imodhz + acascsig
  amodsig   tablei  amodphs, isinetbl, 1, 0, 1

  amodsig   = imodscaler * kindxenv * amodsig
  amodsig   = (iglsscaler * kgls) + amodsig

  ; carrier
  acarrphs  phasor  icarrhz + amodsig
  acarrsig  tablei  acarrphs, isinetbl, 1, 0, 1
  
            out iamp * acarrsig * kampenv

endin


Score:
; Table #1: sinewave
f 1 0 1024 10 1

; #   st   drn  amp    hz  ix   hi
i 1   0    1.5  20000  55  5    0
i 1   2    1.5  20000  66  4    1

Blog Archive

About Me

My photo
Disambiguating biog as there are a few Stephen Tetley's in the world. I'm neither a cage fighter or yachtsman. I studied Fine Art in the nineties (foundation Bradford 1992, degree Cheltenham 1992 - 95) then Computing part-time at Leeds Met graduating in 2003. I'm the Stephen Tetley on Haskell Cafe and Stackoverflow.