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.

101 lines
3.7KB

  1. <Cabbage>
  2. form caption("Autopan / Tremolo") size(440, 102), pluginID("aptr")
  3. image pos( 0, 0), size(440, 102), colour("Maroon"), shape("rounded"), outline("white"), line(4)
  4. rslider bounds( 5, 6, 90, 90), text("Freq.[Hz]"), channel("rate"), range(0.1, 50, 0.5, 0.5), textBox(1)
  5. rslider bounds( 80, 6, 90, 90), text("Tempo[BPM]"), channel("tempo"), range(6, 3000, 30, 0.5, 1), textBox(1)
  6. rslider bounds(175, 6, 90, 90), text("Depth"), channel("depth"), range(0, 1.00, 1, 0.5), textBox(1)
  7. rslider bounds(345, 6, 90, 90), text("Level"), channel("level"), range(0, 1.00, 1), textBox(1)
  8. checkbox bounds(160, 15, 25, 25), colour("yellow"), channel("indicator"), value(0), shape("rounded")
  9. combobox bounds(260, 13, 90,20), channel("mode"), value(1), text("Autopan", "Tremolo")
  10. combobox bounds(260, 38, 90,20), channel("wave"), value(1), text("Sine", "Triangle", "Square", "Randomi", "Randomh")
  11. checkbox bounds(260, 63, 90, 15), text("TEST TONE"), colour("lime"), channel("test"), value(0)
  12. </Cabbage>
  13. <CsoundSynthesizer>
  14. <CsOptions>
  15. -d -n
  16. </CsOptions>
  17. <CsInstruments>
  18. sr = 44100
  19. ksmps = 32
  20. nchnls = 2
  21. 0dbfs = 1
  22. ;Author: Iain McCurdy (2012)
  23. opcode PanTrem,aa,aakkkK
  24. ainL,ainR,krate,kdepth,kmode,kwave xin ;READ IN INPUT ARGUMENTS
  25. ktrig changed kwave ;IF LFO WAVEFORM TYPE IS CHANGED GENERATE A MOMENTARY '1' (BANG)
  26. if ktrig=1 then ;IF A 'BANG' HAS BEEN GENERATED IN THE ABOVE LINE
  27. reinit UPDATE ;BEGIN A REINITIALIZATION PASS FROM LABEL 'UPDATE' SO THAT LFO WAVEFORM TYPE CAN BE UPDATED
  28. endif ;END OF THIS CONDITIONAL BRANCH
  29. UPDATE: ;LABEL CALLED UPDATE
  30. iwave init i(kwave)
  31. iwave limit iwave, 0, 4 ;
  32. if iwave==3 then ;if randomi chosen...
  33. klfo randomi -kdepth,kdepth,krate,1
  34. elseif iwave==4 then ;of randomh chosen...
  35. klfo randomh -kdepth,kdepth,krate,1
  36. else
  37. klfo lfo kdepth, krate, iwave ;CREATE AN LFO
  38. endif
  39. rireturn ;RETURN FROM REINITIALIZATION PASS
  40. klfo = (klfo*0.5)+0.5 ;RESCALE AND OFFSET LFO SO IT STAY WITHIN THE RANGE 0 - 1 ABOUT THE VALUE 0.5
  41. if iwave=2||iwave==4 then ;IF SQUARE WAVE MODULATION HAS BEEN CHOSEN...
  42. klfo portk klfo, 0.001 ;SMOOTH THE SQUARE WAVE A TINY BIT TO PREVENT CLICKS
  43. endif ;END OF THIS CONDITIONAL BRANCH
  44. if kmode=0 then ;PAN ;IF PANNING MODE IS CHOSEN FROM BUTTON BANK...
  45. alfo interp klfo ;INTERPOLATE K-RATE LFO AND CREATE A-RATE VARIABLE
  46. aoutL = ainL*sqrt(alfo) ;REDEFINE GLOBAL AUDIO LEFT CHANNEL SIGNAL WITH AUTO-PANNING
  47. aoutR = ainR*(1-sqrt(alfo)) ;REDEFINE GLOBAL AUDIO RIGHT CHANNEL SIGNAL WITH AUTO-PANNING
  48. kindicator = (klfo>0.5?1:0)
  49. chnset kindicator,"indicator"
  50. elseif kmode=1 then ;TREM ;IF TREMELO MODE IS CHOSEN FROM BUTTON BANK...
  51. kindicator = (klfo>0.5?1:0)
  52. chnset kindicator,"indicator"
  53. klfo = klfo+(0.5-(kdepth*0.5)) ;MODIFY LFO AT ZERO DEPTH VALUE IS 1 AND AT MAX DEPTH CENTRE OF MODULATION IS 0.5
  54. alfo interp klfo ;INTERPOLATE K-RATE LFO AND CREATE A-RATE VARIABLE
  55. aoutL = ainL*(alfo^2) ;REDEFINE GLOBAL AUDIO LEFT CHANNEL SIGNAL WITH TREMELO
  56. aoutR = ainR*(alfo^2) ;REDEFINE GLOBAL AUDIO RIGHT CHANNEL SIGNAL WITH TREMELO
  57. endif ;END OF THIS CONDITIONAL BRANCH
  58. xout aoutL,aoutR ;SEND AUDIO BACK TO CALLER INSTRUMENT
  59. endop
  60. instr 1
  61. krate chnget "rate"
  62. ktempo chnget "tempo"
  63. kdepth chnget "depth"
  64. kmode chnget "mode"
  65. kwave chnget "wave"
  66. klevel chnget "level"
  67. ktest chnget "test"
  68. ktrig changed krate
  69. ktrig2 changed ktempo
  70. if ktrig=1 then
  71. chnset krate*60,"tempo"
  72. elseif ktrig2=1 then
  73. chnset ktempo/60,"rate"
  74. endif
  75. if ktest=1 then
  76. a1 vco2 0.2,300,4,0.5
  77. a2 = a1
  78. else
  79. a1,a2 ins
  80. endif
  81. a1,a2 PanTrem a1,a2,krate,kdepth,kmode-1,kwave-1
  82. a1 = a1 * klevel
  83. a2 = a2 * klevel
  84. outs a1,a2
  85. endin
  86. </CsInstruments>
  87. <CsScore>
  88. i 1 0 [60*60*24*7]
  89. </CsScore>
  90. </CsoundSynthesizer>