Extra "ports" of juce-based plugins using the distrho build system
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.

529 lines
15KB

  1. <Cabbage>
  2. form caption("John Chowning collection") size(562, 340), colour("black"),pluginID("cho1")
  3. rslider bounds(15, 10, 100, 100) channel("spread"), range(0,1,.5), caption("Spread"), colour("GreenYellow "), midictrl(1, 1)
  4. rslider bounds(120, 10, 100, 100) channel("semi"), range(-24,12,-12), caption("Coarse"), colour("GreenYellow ")
  5. rslider bounds(225, 10, 100, 100) channel("detune"), range(-2,2,0), caption("Detune"), colour("GreenYellow ")
  6. rslider bounds(330, 10, 100, 100) channel("vibamp"), range(0,20,0), caption("Vib Amp"), colour("GreenYellow ")
  7. rslider bounds(435, 10, 100, 100) channel("vibrate"), range(0,20,0), caption("Vib rate"), colour("GreenYellow ")
  8. groupbox bounds(15, 120, 240, 100), text("ADSR amplitude"), plant("ADSR"){
  9. rslider bounds(.0, .3, .6, .6), text("A"), colour("orange"), channel("att"), range(0.01,3, .5)
  10. rslider bounds(.25, .3, .6, .6), text("D"), colour("orange"), channel("dec"), range(0,1, .5)
  11. rslider bounds(.5, .3, .6, .6), text("S"), colour("orange"), channel("sus"), range(0,1,.8)
  12. rslider bounds(.75, .3, .6, .6), text("R"), colour("orange"), channel("rel"), range(0.01,3, .2)
  13. }
  14. combobox bounds(280,120, 160, 20), channel("select"), value(1), text("clar","glass", "loop","perc","piano","rebell","soprano","string","trumpet","vibr")
  15. rslider bounds(280,150, 60, 60), text("Rev level"), colour("GreenYellow "), channel("level"), range(0,1,.8)
  16. rslider bounds(350, 150, 60, 60), text("Rev size"), colour("GreenYellow "), channel("size"), range(.1,.99,.7)
  17. checkbox bounds(420, 160, 160, 30),channel("onoff"), text("Reverb On/Off"), value(0)
  18. keyboard pos(10, 240), size(540, 60)
  19. </Cabbage>
  20. <CsoundSynthesizer>
  21. <CsOptions>
  22. -d -n -+rtmidi=null -M0 -b1024
  23. </CsOptions>
  24. <CsInstruments>
  25. sr = 44100
  26. ksmps = 32
  27. nchnls = 2
  28. 0dbfs = 1
  29. ;Author: Giorgio Zucco (2012)
  30. ga1 init 0
  31. ga2 init 0
  32. ;Chowning opcodes
  33. ;********************************************
  34. opcode CHOWNClar,a,kk
  35. gitemp1 ftgen 0,0, 8192, -12, 8
  36. gitemp2 ftgen 0,0, 8192, 9, 1, 1, 0
  37. gitemp3 ftgen 0,0, 8192, 9, 1, 1, 90
  38. kamp,knote xin
  39. ;setksmps 10
  40. ;inote cpsmidib
  41. ;iveloc ampmidi 1
  42. kgate linenr kamp,0,1,.01
  43. kenv linseg 0,0.1,1,2-0.3,1,0.2,0
  44. kramp linseg 0,2/2,4,2/2,0
  45. k1 = kramp * (.8 - 1/.8)/2
  46. k2a = kramp * (.8 + 1/.8)/2
  47. k2b = 200 * k2a
  48. k3a table k1*2,gitemp1,0,0,0
  49. k3b = k3a * (-1/2)
  50. a1 poscil k2b,knote*2,gitemp3
  51. a2 poscil k1,knote*2,gitemp3
  52. a3 = kenv* exp(a2+k3b)
  53. asig poscil a3,knote+a1,gitemp2
  54. xout asig*kgate
  55. endop
  56. ;**************************************************
  57. opcode CHOWNglass,a,kki
  58. kamp,knote,ifunc xin
  59. kgate linenr kamp, 0, .2, .01
  60. imfreq = 1.4 * 200
  61. immax = 10 * imfreq
  62. kmenv linseg 1, 5/6, 0, 5 - (5/6), 0
  63. koenv expseg 0.8, 5/6, 1, 5 - (5/6) , .01
  64. amod poscil kmenv * immax, 1.414*knote, ifunc
  65. aout poscil koenv * 1, knote + amod, ifunc
  66. xout aout*kgate
  67. endop
  68. ;**************************************************
  69. opcode CHOWNLoop,a,kki
  70. gitemp1 ftgen 0, 0, 513, 5, .7, 16, .8,48, 1 , 64, .8, 128,.2, 256, .001
  71. gitemp2 ftgen 0, 0, 513, 7, 0 , 12, 1, 52, 0, 460, 0
  72. kamp,kfreq,ifunc xin
  73. kgate linenr kamp, 0, .2, .01
  74. i1 = 1/.2
  75. idev1 = 0 * 110
  76. idev2 = (25-0) * 110
  77. ampcar poscil 1, i1, gitemp1
  78. ampmod poscil idev2, i1,gitemp2
  79. amod poscil ampmod+idev1, kfreq*1,ifunc
  80. asig poscil ampcar, kfreq+amod,ifunc
  81. xout asig*kgate
  82. endop
  83. ;**************************************************
  84. opcode CHOWNPerc,a,kki
  85. kamp,kcps,ifunc xin
  86. keg expseg .001, .01, 1, .1, .8, 999, .001
  87. keg linenr keg * kamp, .01, .333, .05
  88. kmeg expseg .001, .01,12000/1000, .25, .2, 999, .001
  89. a1 foscili keg, kcps, 1, 1.4, kmeg, 1
  90. xout a1
  91. endop
  92. ;**************************************************
  93. opcode CHOWNPiano,a,kki
  94. kamp,kcps,ifunc xin
  95. ;gitemp100 ftgen 0,0 ,128 ,7, 0, 128 , 1
  96. kndx expon 1, .3, .01
  97. a1 foscili kamp, kcps, 1, 12, kndx, ifunc
  98. a2 foscili kamp, kcps + .1, 1, 12, kndx, ifunc
  99. a3 foscili kamp, kcps - .1, 1, 12, kndx, ifunc
  100. aosc = a1 + a2 + a3
  101. kenv mxadsr .01, .1, .8, .1
  102. aosc = aosc * .5
  103. aout = aosc*kenv
  104. xout aout
  105. endop
  106. ;**************************************************
  107. opcode CHOWNrebell,a,kki
  108. gifc2 ftgen 0,0.0 ,512 ,7 ,1 ,512 ,1
  109. gifc3 ftgen 0,0.0, 512, 7 ,.5 ,512, .5
  110. gifc4 ftgen 0,0.0 ,513 ,7 ,1 ,512, 0, 1, 0
  111. gifc5 ftgen 0,0.0, 513 ,7 ,0 ,512, 1, 1, 1
  112. gifc6 ftgen 0,0.0 ,513, 7, 1, 256, 0, 256, 1 ,1, 1
  113. kamp,knote,ifunc xin
  114. kgate linenr kamp,0,1.5,.01
  115. kpitch1 = knote
  116. kpitch2 = kpitch1 * 1.001
  117. kpitch3 = kpitch1 * 0.998
  118. imodbase = (19 <= 5 ? 19 : 5)
  119. imodmax = (19 <= 5 ? 5 : 19)
  120. indxbase = (1 <= 2 ? 1 : 2)
  121. indxmax = (1 <= 2 ? 2 : 1)
  122. kmodchg oscil1i 0.00,imodmax - imodbase,p3,gifc4
  123. kmod = imodbase + kmodchg
  124. kndxchg oscil1i 0.00,indxmax - indxbase,5,gifc5
  125. kndx = indxbase + kndxchg
  126. afm1 foscili 1*.45,kpitch1,1,kmod,kndx,ifunc
  127. afm2 foscili 1*.35,kpitch2,1,kmod,kndx,ifunc
  128. afm3 foscili 1*.32,kpitch3,1,kmod,kndx,ifunc
  129. afmttl = afm1+afm2+afm3
  130. aosc1 poscil 1 *.45,kpitch1,ifunc
  131. aosc2 poscil 1 *.35,kpitch2,ifunc
  132. aosc3 poscil 1 *.32,kpitch3,ifunc
  133. aoscttl = aosc1+aosc2+aosc3
  134. afm = afmttl - aoscttl;
  135. icfbase = (3000 <= 12000 ? 3000 : 12000)
  136. icfmax = (3000 <= 12000 ? 12000 : 3000)
  137. kcfchg oscil1i 0.00,(icfmax - icfbase),5,gifc6
  138. kcf = icfbase + kcfchg
  139. ibwbase = (100 <= 400 ? 100 : 400)
  140. ibwmax = (100 <= 400 ? 400 : 100)
  141. kbwchg oscil1i 0.00,ibwmax - ibwbase,5,gifc6
  142. kbw = ibwbase + kbwchg
  143. aflt1 reson afm,kcf,kbw,1
  144. aflt2 reson afm,kcf*.9, kbw*1.11,1
  145. abal balance aflt1+aflt2,afm
  146. asig envlpx abal,.2, gifc5, gifc5*.39, gifc5, 1
  147. xout asig*kgate
  148. endop
  149. ;**************************************************
  150. opcode CHOWNSoprano,a,kki
  151. kveloc,knote,ifunc xin
  152. kgate linenr kveloc,0,2,.01
  153. k7 = knote
  154. k2 = 7000
  155. k2 = (k2/k7)+.5
  156. k2 = int(k2)
  157. k3 = .04
  158. k4 = .25
  159. k5 = 5*.4
  160. k6 = 5
  161. k8 = k5/k4
  162. k9 = exp(1.5*log(7000/32767))
  163. k10 = .00311*log(k7)
  164. k11 = sqrt(7000/32767)
  165. k12 = (1-k3)*k11
  166. k13 = k4*k7
  167. k14 = k9*k3
  168. a1 linen k12,.1,3,.08
  169. a2 poscil k13,k7,ifunc
  170. a8 = k7+a2
  171. a4 linenr k10,.6,3,.1
  172. a4 poscil a4,k6,ifunc
  173. a5 randi k10,16
  174. a6 linseg -.03,.07,.03,.03,0,3-.1,0
  175. a6 = a4+a5+a6+1.
  176. a1 poscil a1,(a8+a2)*a6,ifunc
  177. a7 = (a2*k8)+k2
  178. a3 linseg 0,.07,.1,.03,1.,3-.18,1,.02,.1,.06,0
  179. a3 = a3*(k9*k3)
  180. a3 poscil a3,a7*a6,ifunc
  181. aout = (a1+a3)*kgate
  182. xout aout
  183. endop
  184. ;**************************************************
  185. opcode CHOWNString,a,kki
  186. kamp,knote,ifunc xin
  187. ;setksmps 10
  188. iveloc ampmidi 1
  189. kgate linenr 1, 0, .2, .01
  190. ifc = cpspch(5.00)
  191. ifm1 = ifc
  192. ifm2 = ifc*3
  193. ifm3 = ifc*4
  194. indx1 = 7.5/log(ifc) ;RANGE FROM CA 2 TO 1
  195. indx2 = 15/sqrt(ifc) ;RANGE FROM CA 2.6 TO .5
  196. indx3 = 1.25/sqrt(ifc) ;RANGE FROM CA .2 TO .038
  197. kvib init 0
  198. timout 0,.75,transient
  199. kvbctl linen 1,.5,2-.75,.1
  200. krnd randi .0075,15 ;RANDOM DEVIATION IN VIB WIDTH
  201. kvib poscil kvbctl*.03+krnd,5.5*kvbctl,ifunc
  202. transient:
  203. timout .2,2,continue
  204. ktrans linseg 1,.2,0,1,0 ;TRANSIENT ENVELOPE
  205. anoise randi ktrans,.2*ifc ;NOISE...
  206. attack poscil anoise,knote,ifunc
  207. continue:
  208. amod1 poscil ifm1*(indx1+ktrans),knote,ifunc
  209. amod2 poscil ifm2*(indx2+ktrans),knote*3,ifunc
  210. amod3 poscil ifm3*(indx3+ktrans),knote*4,ifunc
  211. asig poscil kamp,(amod1+amod2+amod3)*(1+kvib),ifunc
  212. asig linen asig+attack,.2,2,.2
  213. xout asig *kgate
  214. endop
  215. ;**************************************************
  216. opcode CHOWNTrumpet,a,kki
  217. gitemp2 ftgen 0,0,129,9,.35,1,0
  218. gitemp3 ftgen 0,0,129,9,.4,1,0
  219. gitemp4 ftgen 0,0,129,9,.25,1,0
  220. gitemp5 ftgen 0,0,129,9,.3875,1.4142,0
  221. kamp,knote,ifunc xin
  222. ;setksmps 10
  223. kgate linenr kamp/2, 0, .2, .01
  224. irandev = .007
  225. ifreqrand = 125
  226. ivibatt = .6
  227. ivibdec = .2
  228. ivibwth = .007
  229. ivibrate = 7
  230. iportdev = .03
  231. iportatt = .06
  232. iportdec = .01
  233. iampfac = .833
  234. iafrmfac = 1-iampfac
  235. imax = 2.66
  236. iratio = 1.8/imax
  237. ifundatt = .03
  238. ifunddec = .15
  239. ifrmatt = .03
  240. ifrmdec = .3
  241. imodatt = .03
  242. imoddec = .01
  243. kphs linen ivibwth, ivibatt, 1, ivibdec
  244. kvfac table kphs, gitemp4, ifunc
  245. kvibgate = kvfac*ivibwth
  246. kport envlpx iportdev, iportatt, 1, iportdec, gitemp5, 1, .01
  247. krand randi irandev, ifreqrand, -1
  248. kosc poscil kvibgate, ivibrate, ifunc
  249. kvib = (krand+1)*(kosc+1)*(kport+1)
  250. kgatemod envlpx imax*knote, imodatt, 1, imoddec, gitemp3, 1.2, .01, .2
  251. kgatefd envlpx iampfac, ifundatt, 1, ifunddec, gitemp2, 1, .01
  252. kgatefrm envlpx iafrmfac, ifrmatt, 1, ifrmdec, gitemp2, 1, .01
  253. amod poscil kgatemod, knote*kvib, ifunc
  254. afund poscil kgatefd, knote*kvib+amod, ifunc
  255. afrm poscil kgatefrm, (int(1500/knote+.5)*knote)*kvib+amod*iratio, ifunc
  256. xout (afund+afrm)*kgate
  257. endop
  258. ;**************************************************
  259. opcode CHOWNVibr,a,kki
  260. kamp,kifc,ifunc xin
  261. gitemp100 ftgen 0,0 ,128 ,7, 0, 128 , 1
  262. kifm1 = kifc
  263. kifm2 = kifc*3
  264. kifm3 = kifc*4
  265. kindx1 = 7.5/log(kifc) ;RANGE FROM CA 2 TO 1
  266. kindx2 = 15/sqrt(kifc) ;RANGE FROM CA 2.6 TO .5
  267. kindx3 = 1.25/sqrt(kifc) ;RANGE FROM CA .2 TO .038
  268. kvib init 0
  269. timout 0,0.75,transient ;DELAYS VIBRATO FOR P8 SECONDS
  270. kvbctl linen 1,.5,10,.1 ;VIBRATO CONTROL ENVELOPE
  271. krnd randi .0075,15 ;RANDOM DEVIATION IN VIB WIDTH
  272. kvib poscil kvbctl*.03+krnd,5.5*kvbctl,ifunc ;VIBRATO GENERATOR
  273. transient:
  274. timout .2,10,continue ;EXECUTE FOR .2 SECS ONLY
  275. ktrans linseg 1,.2,0,1,0 ;TRANSIENT ENVELOPE
  276. anoise randi ktrans,.2*kifc ;NOISE...
  277. attack poscil anoise,2000,ifunc ;...CENTERED AROUND 2KHZ
  278. continue:
  279. amod1 poscil kifm1*(kindx1+ktrans),kifm1,ifunc
  280. amod2 poscil kifm2*(kindx2+ktrans),kifm2,ifunc
  281. amod3 poscil kifm3*(kindx3+ktrans),kifm3,ifunc
  282. asig poscil kamp,(kifc+amod1+amod2+amod3)*(1+kvib),ifunc
  283. asig linen asig+attack,.26,10,.2
  284. imax ampmidi 1, gitemp100
  285. kgate linenr imax, 0, 1, .01
  286. aout = asig * kgate
  287. xout aout
  288. endop
  289. ;**************************************************
  290. instr 1
  291. ;kselect init 1
  292. ;channel
  293. ;kmodfreq chnget "mod"
  294. ksemi1 chnget "semi"
  295. kdetune chnget "detune"
  296. kspread chnget "spread"
  297. iatt chnget "att"
  298. idec chnget "dec"
  299. isus chnget "sus"
  300. irel chnget "rel"
  301. klfoamp chnget "vibamp"
  302. klforate chnget "vibrate"
  303. kselect chnget "select"
  304. ;midi
  305. imidinn notnum
  306. iamp ampmidi 1
  307. kbend pchbend 0,2 ;pitch bend
  308. ;lfo
  309. klfo lfo klfoamp,klforate,2
  310. kfreq1 = cpsmidinn(imidinn+kbend+int(ksemi1)) ;controllo midi
  311. kfreq2 = cpsmidinn(imidinn+kbend+kdetune+int(ksemi1))
  312. ;CHOWNClar,CHOWNglass,CHOWNLoop,CHOWNPerc,CHOWNPiano,CHOWNrebell,CHOWNSoprano,CHOWNString,CHOWNTrumpet,CHOWNVibr
  313. if kselect = 1 then
  314. acho1 CHOWNClar iamp,kfreq1+klfo,1
  315. acho2 CHOWNClar iamp,kfreq2+klfo,1
  316. elseif kselect = 2 then
  317. acho1 CHOWNglass iamp,kfreq1+klfo,1
  318. acho2 CHOWNglass iamp,kfreq2+klfo,1
  319. elseif kselect = 3 then
  320. acho1 CHOWNLoop iamp,kfreq1+klfo,1
  321. acho2 CHOWNLoop iamp,kfreq2+klfo,1
  322. elseif kselect = 4 then
  323. acho1 CHOWNPerc iamp,kfreq1+klfo,1
  324. acho2 CHOWNPerc iamp,kfreq2+klfo,1
  325. elseif kselect = 5 then
  326. acho1 CHOWNPiano iamp,kfreq1+klfo,1
  327. acho2 CHOWNPiano iamp,kfreq2+klfo,1
  328. elseif kselect = 6 then
  329. acho1 CHOWNrebell iamp,kfreq1+klfo,1
  330. acho2 CHOWNrebell iamp,kfreq2+klfo,1
  331. elseif kselect = 7 then
  332. acho1 CHOWNSoprano iamp,kfreq1,1
  333. acho2 CHOWNSoprano iamp,kfreq2,1
  334. elseif kselect = 8 then
  335. acho1 CHOWNString iamp,kfreq1+klfo,1
  336. acho2 CHOWNString iamp,kfreq2+klfo,1
  337. elseif kselect = 9 then
  338. acho1 CHOWNTrumpet iamp,kfreq1+klfo,1
  339. acho2 CHOWNTrumpet iamp,kfreq2+klfo,1
  340. elseif kselect = 10 then
  341. acho1 CHOWNVibr iamp,kfreq1,1
  342. acho2 CHOWNVibr iamp,kfreq2,1
  343. endif
  344. ktrig changed kselect
  345. if ktrig = 1 then
  346. reinit play
  347. endif
  348. play:
  349. ;master
  350. aL clip acho1,0,0dbfs
  351. aR clip acho2,0,0dbfs
  352. aoutL = ((aL * kspread) + (aR * (1 - kspread))) *.5
  353. aoutR = ((aL * (1-kspread)) + (aR * kspread)) *.5
  354. kadsr mxadsr iatt,idec,isus,irel
  355. outs (aoutL)*kadsr,(aoutR)*kadsr
  356. vincr ga1,aoutL*kadsr
  357. vincr ga2,aoutR*kadsr
  358. endin
  359. instr 10 ;reverb
  360. ktrig chnget "onoff"
  361. klevel chnget "level"
  362. ksize chnget "size"
  363. if ktrig = 1 then
  364. al,ar reverbsc ga1,ga2,ksize,16000,sr,0
  365. asum1 dcblock2 al
  366. asum2 dcblock2 ar
  367. else
  368. asum1 = 0
  369. asum2 = 0
  370. endif
  371. outs asum1*klevel,asum2*klevel
  372. clear ga1,ga2
  373. endin
  374. </CsInstruments>
  375. <CsScore>
  376. f1 0 16384 10 1
  377. ;f0 3600
  378. i1 0 36000
  379. i10 0 36000
  380. </CsScore>
  381. </CsoundSynthesizer>