-n -d
; Initialize the global variables.
ksmps = 32
nchnls = 2
0dbfs = 1
gSBussKeys[] fillarray "dry_left", "dry_right", "revin_left", "revin_right", "revout_left", "revout_right"
chn_a gSBussKeys[0], 3
chn_a gSBussKeys[1], 3
chn_a gSBussKeys[2], 3
chn_a gSBussKeys[3], 3
chn_a gSBussKeys[4], 3
chn_a gSBussKeys[5], 3
giTableSize = 8193
giSine ftgen 0, 0, giTableSize, 10, 1
gSBasicTables[] fillarray "sine", "cosine", "tri", "tri2", "saw", "squ"
giBasicTables[] init (lenarray(gSBasicTables) + 1)
giBasicTables[0] ftgen 0, 0, giTableSize, 10, 1
giBasicTables[1] ftgen 0, 0, giTableSize, 10, 1
giBasicTables[2] ftgen 0, 0, giTableSize, 11, 1
giBasicTables[3] ftgen 0, 0, giTableSize, 7, 0, (giTableSize / 4), 1, (giTableSize / 2), -1, (giTableSize / 4) , 0
giBasicTables[4] ftgen 0, 0, giTableSize, 7, -1, (giTableSize / 2), 1, (giTableSize / 2), -1
giBasicTables[5] ftgen 0, 0, giTableSize, 7, -1, giTableSize, 1
giBasicTables[6] ftgen 0, 0, giTableSize, 7, 1, (giTableSize / 2), 1, 0, -1, (giTableSize / 2), -1
gSWindowTables[] fillarray "hanning", "kaiser", "attack1", "attack2", "attack3", "attack4", "attack5", "attack6", "attack7", "attack8", "attack9", "attack10", "attack11", "attack12", "attack13", "attack14", "attack15", "attack16"
giWindowTables[] init lenarray(gSWindowTables)
giWindowTables[0] ftgen 0, 0, giTableSize, 20, 2, 1
giWindowTables[1] ftgen 0, 0, giTableSize, 20, 7, 1
giWindowTables[2] ftgen 0, 0, giTableSize, 5, 0.0001, 81, 64, 2838, 0.0001, 5273
giWindowTables[3] ftgen 0, 0, giTableSize, 5, 0.0001, 144, 32, 3165, 0.0001, 4883
giWindowTables[4] ftgen 0, 0, giTableSize, 5, 0.0001, 207, 16, 3486, 0.0001, 4499
giWindowTables[5] ftgen 0, 0, giTableSize, 5, 0.0001, 270, 8, 3802, 0.0001, 4120
giWindowTables[6] ftgen 0, 0, giTableSize, 5, 0.0001, 333, 4, 4112, 0.0001, 3747
giWindowTables[7] ftgen 0, 0, giTableSize, 5, 0.0001, 395, 2, 4418, 0.0001, 3379
giWindowTables[8] ftgen 0, 0, giTableSize, 5, 0.0001, 458, 1, 4717, 0.0001, 3017
giWindowTables[9] ftgen 0, 0, giTableSize, 5, 0.0001, 521, 0.5, 5011, 0.0001, 2660
giWindowTables[10] ftgen 0, 0, giTableSize, 5, 0.0001, 584, 0.25, 5300, 0.0001, 2308
giWindowTables[11] ftgen 0, 0, giTableSize, 5, 0.0001, 647, 0.125, 5583, 0.0001, 1962
giWindowTables[12] ftgen 0, 0, giTableSize, 5, 0.0001, 709, 0.0625, 5861, 0.0001, 1622
giWindowTables[13] ftgen 0, 0, giTableSize, 5, 0.0001, 772, 0.03125, 6133, 0.0001, 1287
giWindowTables[14] ftgen 0, 0, giTableSize, 5, 0.0001, 835, 0.015625, 6400, 0.0001, 957
giWindowTables[15] ftgen 0, 0, giTableSize, 5, 0.0001, 898, 0.0078125, 6661, 0.0001, 633
giWindowTables[16] ftgen 0, 0, giTableSize, 5, 0.0001, 961, 0.00390625, 6917, 0.0001, 314
giWindowTables[17] ftgen 0, 0, giTableSize, 5, 0.0001, 1024, 0.00195312, 7168, 0.0001, 0
opcode FMOperator2, a, aaii
aCPS, aMod, iPhase, iWaveform xin
xout table3:a(phasor:a(aCPS, iPhase) + aMod, iWaveform, 1, 0, 1)
endop
instr FM_Duo
iInstr = p1
iOnset = p2
iDur = p3
iPitch = p4
iAmp = p5
iShape = p6
iWave1 = p7
iPhase1 = p8
iRatio1a = p9
iRatio1b = p10
iIndex1a = p11
iIndex1b = p12
iWave2 = p13
iPhase2 = p14
iRatio2a = p15
iRatio2b = p16
iIndex2a = p17
iIndex2b = p18
iFBAmt = p19
iDryA = p20
iDryB = p21
iWetA = p22
iWetB = p23
iPanA = p24
iPanB = p25
iPanMode = p26
aNull init 0
aFB init 0
aEnv2 = line:a(iIndex2a, iDur, iIndex2b)
aEnv1 = line:a(iIndex1a, iDur, iIndex1b)
aGrainShape = table3:a(phasor:a(1 / iDur), giWindowTables[iShape], 1) * aEnv1 * iAmp
aPitch2 = line:a(iPitch * iRatio2a, iDur, iPitch * iRatio2b)
aPitch1 = line:a(iPitch * iRatio1a, iDur, iPitch * iRatio1b)
aSig2 = FMOperator2:a(aPitch2, aFB, iPhase2, giBasicTables[iWave2]) * aEnv2
aFB = aSig2 * iFBAmt
aSig1 = FMOperator2:a(aPitch1, aSig2, iPhase1, giBasicTables[iWave1]) * aGrainShape
aPanLine = line:a(iPanA, iDur, iPanB)
aDryLine = line:a(iDryA, iDur, iDryB)
aWetLine = line:a(iWetA, iDur, iWetB)
aLeft, aRight pan2 aSig1, aPanLine, iPanMode
chnmix aLeft * aDryLine, gSBussKeys[0]
chnmix aRight * aDryLine, gSBussKeys[1]
chnmix aLeft * aWetLine, gSBussKeys[2]
chnmix aRight * aWetLine, gSBussKeys[3]
endin
;; input - Signal
;; output - reverb buss left and right
instr fv_reverb
kRoomSize init p4
kHFDamp init p5
aLeft = chnget:a(gSBussKeys[2])
aRight = chnget:a(gSBussKeys[3])
aRevLeft, aRevRight freeverb aLeft, aRight, kRoomSize, kHFDamp
chnset(aRevLeft, gSBussKeys[4])
chnset(aRevRight, gSBussKeys[5])
endin
instr sc_reverb
kfblvl init p4
kfco init p5
aLeft = chnget:a(gSBussKeys[2])
aRight = chnget:a(gSBussKeys[3])
aRevLeft, aRevRight reverbsc aLeft, aRight, kfblvl, kfco, sr, 0.5, 1
chnset(aRevLeft, gSBussKeys[4])
chnset(aRevRight, gSBussKeys[5])
endin
instr final_out
aLeft = chnget:a(gSBussKeys[0])
aRight = chnget:a(gSBussKeys[1])
aRevLeft = chnget:a(gSBussKeys[4])
aRevRight = chnget:a(gSBussKeys[5])
outs aLeft + aRevLeft, aRight + aRevRight
chnclear(gSBussKeys[0], gSBussKeys[1], gSBussKeys[2], gSBussKeys[3], gSBussKeys[4], gSBussKeys[5])
endin
i "sc_reverb" 0 -1 0.85 12000
i "final_out" 0 -1
i "FM_Duo" 0 2 110 .8 2 1 0 1 1 1 1 1 0 .5 .5 1 0 0 1 1 0 0 .5 .5 2
i "FM_Duo" + 2 110 .8 3 1 0 1 1 1 1 1 0 .5 .5 1 0 0.01 1 1 0 0 .5 .5 2
i "FM_Duo" + 2 110 .8 4 1 0 1 1 1 1 1 0 .5 .5 1 0 0.03 1 1 0 0 .5 .5 2
i "FM_Duo" + 2 110 .8 5 1 0 1 1 1 1 1 0 .5 .5 1 0 0.05 1 1 0 0 .5 .5 2
i "FM_Duo" + 2 110 .8 6 1 0 1 1 1 1 1 0 .5 .5 1 0 0.07 1 1 0 0 .5 .5 2
i "FM_Duo" + 2 110 .8 7 1 0 1 1 1 1 1 0 .5 .5 1 0 0.11 1 1 0 0 .5 .5 2
i "FM_Duo" + 2 110 .8 8 1 0 1 1 1 1 1 0 .5 .5 1 0 0.18 1 1 0 0 .5 .5 2
i "FM_Duo" + 2 110 .8 9 1 0 1 1 1 1 1 0 .5 .5 1 0 0.18 1 1 0 0 .5 .5 2
i "FM_Duo" + 2 110 .8 10 1 0 1 1 1 1 1 0 .5 .5 1 0 0.18 1 1 0 0 .5 .5 2
i "FM_Duo" + 2 110 .8 11 1 0 1 1 1 1 1 0 .5 .5 1 0 0.18 1 1 0 0 .5 .5 2
i "FM_Duo" + 2 110 .8 12 1 0 1 1 1 1 1 0 .5 .5 1 0 0.18 1 1 0 0 .5 .5 2
i "FM_Duo" + 2 110 .8 13 1 0 1 1 1 1 1 0 .5 .5 1 0 0.18 1 1 0 0 .5 .5 2
i "FM_Duo" + 2 110 .8 14 1 0 1 1 1 1 1 0 .5 .5 1 0 0.18 1 1 0 0 .5 .5 2
i "FM_Duo" + 2 110 .8 15 1 0 1 1 1 1 1 0 .5 .5 1 0 0.18 1 1 0 0 .5 .5 2
i "FM_Duo" + 2 110 .8 16 1 0 1 1 1 1 1 0 .5 .5 1 0 0.18 1 1 0 0 .5 .5 2
i "FM_Duo" + 2 110 .8 17 1 0 1 1 1 1 1 0 .5 .5 1 0 0.18 1 1 0 0 .5 .5 2
f0 36