You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
3.0KB

  1. <Cabbage>
  2. form caption("Ring Modulator") size(435, 90), pluginID("rmod")
  3. ;label bounds(7, 3, 200, 11), text("Iain McCurdy [2013]"), FontColour("grey")
  4. image pos(0, 0), size(435, 90), colour("black"), shape("rounded"), outline("lime"), line(5)
  5. rslider bounds( 5, 12, 70, 70), text("Freq."), channel("freq"), range(0, 15000, 800, 0.25), colour("yellow")
  6. rslider bounds( 75, 12, 70, 70), text("Sine/Sq."), channel("wave"), range(0, 1.00, 0), colour("yellow")
  7. line bounds(150, 2, 3, 86), colour("lime")
  8. rslider bounds(160, 12, 70, 70), text("Env."), channel("env"), range(0, 1.00, 0.5, 0.5), colour("orange")
  9. rslider bounds(230, 6, 40, 40), text("Att."), channel("att"), range(0.001, 0.5, 0.01, 0.5), colour("orange")
  10. rslider bounds(230, 46, 40, 40), text("Dec."), channel("dec"), range(0.001, 0.5, 0.1, 0.5), colour("orange")
  11. line bounds(275, 2, 3, 86), colour("lime")
  12. rslider bounds(290, 12, 70, 70), text("Mix"), channel("mix"), range(0, 1.00, 1), colour("chocolate")
  13. rslider bounds(360, 12, 70, 70), text("Level"), channel("level"), range(0, 1.00, 1), colour("chocolate")
  14. </Cabbage>
  15. <CsoundSynthesizer>
  16. <CsOptions>
  17. -d -n
  18. </CsOptions>
  19. <CsInstruments>
  20. sr = 44100
  21. ksmps = 32
  22. nchnls = 2
  23. 0dbfs = 1
  24. ;Author: Iain McCurdy (2012)
  25. ;http://iainmccurdy.org/csound.html
  26. opcode RingModulator,a,akkkkkk
  27. ain,kmix,kfreq,kwave,kenv,katt,kdec xin ;READ IN INPUT ARGUMENTS
  28. iWet ftgentmp 0,0,1024,-7,0,512,1,512,1 ;RESCALING FUNCTION FOR WET LEVEL CONTROL
  29. iDry ftgentmp 0,0,1024,-7,1,512,1,512,0 ;RESCALING FUNCTION FOR DRY LEVEL CONTROL
  30. isine ftgentmp 0,0,4096,10,1 ;SINE WAVE
  31. kWet table kmix, iWet, 1 ;RESCALE WET LEVEL CONTROL ACCORDING TO FUNCTION TABLE iWet
  32. kDry table kmix, iDry, 1 ;RESCALE DRY LEVEL CONTROL ACCORDING TO FUNCTION TABLE iDry
  33. kporttime linseg 0,0.001,0.02 ;PORTAMENTO VARIABLE
  34. kModFrq portk kfreq, kporttime ;SMOOTH VARIABLE CHANGES
  35. aFollow follow2 ain, katt, kdec ;AMPLITUDE FOLLOWING kModFrq + (cpsoct(kFollow*kenv*30)) ;CREATE A LEFT CHANNEL MODULATING FREQUENCY BASE ON THE STATIC VALUE CREATED BY kfreq AND THE AMOUNT OF DYNAMIC ENVELOPE FOLLOWING GOVERNED BY kenv
  36. kFollow downsamp aFollow
  37. kFollow logcurve kFollow/0dbfs,2
  38. kModFrq = kModFrq + (kFollow*kenv*8000) ;CREATE A LEFT CHANNEL MODULATING FREQUENCY BASE ON THE STATIC VALUE CREATED BY kfreq AND THE AMOUNT OF DYNAMIC ENVELOPE FOLLOWING GOVERNED BY kenv
  39. aModSi poscil 1, kModFrq, isine ;CREATE RING MODULATING SIGNAL
  40. aModSq vco2 1, kModFrq, 10 ;CREATE RING MODULATING SIGNAL
  41. aMod ntrpol aModSi,aModSq,kwave
  42. aout sum ain*kDry, ain*aMod*kWet ;MIX DRY AND WET SIGNALS
  43. xout aout ;SEND AUDIO BACK TO CALLER INSTRUMENT
  44. endop
  45. instr 1
  46. kmix chnget "mix"
  47. kfreq chnget "freq"
  48. kwave chnget "wave"
  49. kenv chnget "env"
  50. katt chnget "att"
  51. kdec chnget "dec"
  52. klevel chnget "level"
  53. a1,a2 ins
  54. ;;a1,a2 diskin2 "808loop.wav",1,0,1
  55. a1 RingModulator a1,kmix,kfreq,kwave,kenv,katt,kdec
  56. a2 RingModulator a2,kmix,kfreq,kwave,kenv,katt,kdec
  57. a1 = a1 * klevel
  58. a2 = a2 * klevel
  59. outs a1,a2
  60. endin
  61. </CsInstruments>
  62. <CsScore>
  63. i 1 0 [60*60*24*7]
  64. </CsScore>
  65. </CsoundSynthesizer>