From 9fbf91db06a6d4f4b5cd8bb45389a731bb86bf22 Mon Sep 17 00:00:00 2001 From: Richard Date: Sun, 13 Apr 2025 18:48:02 +0100 Subject: initial --- site/udo/fnml/instrument_vocal.udo | 73 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100755 site/udo/fnml/instrument_vocal.udo (limited to 'site/udo/fnml/instrument_vocal.udo') 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 -- cgit v1.2.3