diff options
Diffstat (limited to 'site/udo/fnml/instrument_vocal.udo')
-rwxr-xr-x | site/udo/fnml/instrument_vocal.udo | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/site/udo/fnml/instrument_vocal.udo b/site/udo/fnml/instrument_vocal.udo new file mode 100755 index 0000000..f5ac011 --- /dev/null +++ b/site/udo/fnml/instrument_vocal.udo @@ -0,0 +1,73 @@ +#ifndef UDO_FNMI_VOCAL
+#define UDO_FNMI_VOCAL ##
+
+#include "wavetables.udo"
+#include "sequencing_melodic.udo"
+#include "sounddb.udo"
+#include "bussing.udo"
+
+
+i_[], gifnmi_vocal_collectionid sounddb_getcollection "VocalAhh1"
+
+
+opcode fnmi_vocal_chord, aa, kpj
+ ktrig, iaddoctave, ireadattackratio xin
+ icollectionid = gifnmi_vocal_collectionid
+ ireadattackratio = (ireadattackratio == -1) ? 0.1 : ireadattackratio
+ if (ktrig == 1) then
+ klen = mel_length:k()
+ knotenum = table:k(0, gimel_current_notes)
+ kpanstep = 1 / knotenum
+ kindex = 0
+ while (kindex < knotenum) do
+ kpan = kpanstep * kindex
+ schedulek "fnmi_vocal", 0, klen, icollectionid, table:k(kindex+1, gimel_current_notes), kpan, ireadattackratio
+ if (iaddoctave == 1) then
+ schedulek "fnmi_vocal", 0, klen, icollectionid, table:k(kindex+1, gimel_current_notes) + 12, 1-kpan, ireadattackratio
+ endif
+ kindex += 1
+ od
+ endif
+ aL, aR bus_read "fnmi_vocal_chord"
+ xout aL, aR
+endop
+
+/*
+instr tester
+ ktrig = 0
+ if (gkmel_section_change == 1) then
+ ktrig = 1
+ endif
+ aL, aR fnmi_vocal_chord ktrig
+ outs aL, aR
+endin
+*/
+
+instr fnmi_vocal
+ icollectionid = p4
+ inote = p5
+ ipan = p6
+ ireadattackratio = p7
+ ifileid, ipitchratio sounddb_mel_nearestnote icollectionid, inote
+ ifn = gisounddb[ifileid][0]
+ ilen = gisounddb[ifileid][2]
+ idur = p3
+ kamp linseg 1, idur*0.1, 1, idur*0.5, 1, idur*0.4, 0
+ ireadrate random 0.01, 1
+
+ ivibrate = random(0.25, 4)
+ klfo oscil 0.006, ivibrate, gifnSine
+ kpitchratio = ipitchratio + klfo
+
+ atime = abs:a(oscil:a(0.68, ireadrate))
+ if (ireadattackratio != 0) then
+ atime = (delay:a(atime, idur*ireadattackratio) + linseg:a(0, idur*ireadattackratio, 0.1)) * ilen
+ endif
+
+ aL, aR mincer atime, kamp*0.2, kpitchratio, ifn, 1, 2048
+ aL butterhp aL, 340
+ aR butterhp aR, 340
+ bus_mix("fnmi_vocal_chord", aL*ipan, aR*(1-ipan))
+endin
+
+#end
|