Now we will add the ability to do a linear crossfade between any two of our four basic waveforms. We will employ our delayed vibrato scheme to regulate the speed of the crossfade.
instr 7
; toot7.orc
ifunc1
=
p11
; initial waveform
ifunc2
=
p12
; crossfade waveform
ifad1
=
p3 * p13
; calculate initial fade
ifad2
=
p3 - ifad1
; calculate remaining dur
irel
=
.01
; set vibrato release
idel1
=
p3 * p10
; calculate initial delay
isus
=
p3 - (idel1 + irel)
; calculate remaining dur
iamp
=
ampdb(p4)
iscale
=
iamp * .166
; p4=amp
inote
=
cpspch(p5)
; p5=freq
k3
linseg
0, idel1, p9, isus, p9, irel, 0
; p6=attack time
k2
oscil
k3, p8, 1
; p7=release time
k1
linen
iscale, p6, p3, p7
; p8=vib rate
a6
oscil
k1, inote*.998+k2, ifunc2
; p9=vib depth
a5
oscil
k1, inote*1.002+k2, ifunc2
; p10=vib delay (0-1)
a4
oscil
k1, inote+k2, ifunc2
; p11=initial wave
a3
oscil
k1, inote*.997+k2, ifunc1
; p12=cross wave
a2
oscil
k1, inote*1.003+k2, ifunc1
; p13=fade time
a1
oscil
k1, inote+k2, ifunc1
kfade
linseg
1, ifad1, 0, ifad2, 1
afunc1
=
kfade * (a1+a2+a3)
afunc2
=
(1 - kfade) * (a4+a5+a6)
out
afunc1 + afunc2
endin
; toot7
f1
0
2048
10
1
; Sine
f2
0
2048
10
1
.5
.3
.25
.2
.167
.14
.125
.111
; Sawtooth
f3
0
2048
10
1
0
.3
0
.2
0
.14
0
.111
; Square
f4
0
2048
10
1
1
1
1
.7
.5
.3
.1
; Pulse
;ins
strt
dur
amp
frq
atk
rel
vibrt
vbdpt
vibdel
strtwav
endwav
crosstime
i7
0
5
96
8.07
.03
.1
5
6
.99
1
2
.1
i7
6
5
96
8.09
.03
.1
5
6
.99
1
3
.1
i7
12
8
96
8.07
.03
.1
5
6
.99
1
4
.1
e
Toot 7: Crossfade