-+rtaudio=alsa -idevaudio -odevaudio -m0 -W -s -d -b256 -B1024
sr=44100
ksmps=100
nchnls=2
gaudp1 init 0
gaudp2 init 0
gainrev init 0
gaoutL init 0
gaoutR init 0
/*****************************************************************
Reverb + master out
*****************************************************************/
instr 200
koutGain chnget "masterVolume"
koutGain = koutGain * 0.01
ia ftgen 89, 0, 64, -2, -1009, -1103, -1123, -1281, -1289, -1307, -1361, -1409, -1429, -1543, -1583, -1601, -1613, -1709, -1801, -1949, -2003, -2111, -2203, -2341, -2411, -2591, -2609, -2749, -2801, -2903, -3001, -3109, -3203, -3301, -3407, -3539, 0.82, 0.81, 0.8, 0.79, 0.78, 0.77, 0.76, 0.75, 0.74, 0.73, 0.72, 0.71, 0.7, 0.69, 0.68, 0.67, 0.66, 0.65, 0.64, 0.63, 0.62, 0.61, 0.6, 0.59, 0.58, 0.57, 0.56, 0.55, 0.54, 0.53, 0.52, 0.51
ib ftgen 90, 0, 16, -2, -179, -223, -233, -311, -347, -409, -433, -509, 0.76, 0.74, 0.72, 0.7, 0.68, 0.64, 0.62, 0.6
ain dcblock gainrev*0.05
arev nreverb ain, 2.8, 0.7, 0, 32, 89, 8, 90
arev butterlp arev, 5000
arev butterlp arev, 5000
outs (arev + gaoutL)*koutGain, (arev + gaoutR) * koutGain
gaoutL = 0
gaoutR = 0
gainrev = 0
endin
/****************************************************************
Audio input recording
****************************************************************/
instr 201
ain inch 1
itable = 300 + p4
aindex line 0, p3, 1
kenv adsr 0.005, 0.05, .9, 0.01
tabw ain*kenv, aindex, itable, 1
endin
/****************************************************************
Soundfile player with tied notes
****************************************************************/
instr 101
ipit = p4
irg = p5
iamp = p6
ipan = p7
itab = p8
iatt = p9
idecay = p10
ifiltType = p11 - 1
icutoff = p12
idurfadein init 0.002
idurfadeout init 0.098
iampe0 init 1 ; FADE IN
iampe1 = iamp ; SUSTAIN
iampe2 init 1 ; FADE OUT
itie tival ; VERIFIE SI LA NOTE EST LIEE
if itie == 1 igoto nofadein ; SI NON "FADE IN"
idurfadein init iatt
iampe0 init 0 ; FADE IN
iskip = 1
kpitch init ipit ; INIT FREQUENCE POUR LES NOTES NON-LIEES
kamp init iamp
kpan init ipan
krg init irg
nofadein:
iskip = 0
igliss = 0.005
if p3 < 0 igoto nofadeout ; VERIFIE SI LA NOTE EST TENUE, SI NON "FADE OUT"
idurfadeout init idecay
iampe2 init 0 ; FADE OUT
nofadeout:
idelta = idurfadein+idurfadeout
if idelta > abs(p3) then
idelta = abs(p3)
endif
iampe0 = iampe0 * iamp
iampe2 = iampe2 * iamp
kenv linseg iampe0, idurfadein, iampe1, abs(p3)-idelta, iampe1, idurfadeout, iampe2 ; AMPLITUDE GLOBALE
; SI LA NOTE EST LIEE, ON SAUTE LE RESTE DE L'INITIALISATION
tigoto tieskip
kpitch portk ipit, igliss, ipit ; GLISSANDO
kpan portk ipan, igliss, ipan
krg portk irg, igliss, irg
kcutoff portk icutoff, igliss, icutoff
a1 flooper2 1, kpitch, .25, .5, .1, itab, 0, 0, 0, iskip
if ifiltType != -1 then
acomp = a1
a1 bqrez a1, kcutoff, 6, ifiltType
a1 balance a1, acomp
endif
a1 = a1*kenv
gaoutL = a1*(1-kpan)+gaoutL
gaoutR = a1*kpan+gaoutR
gainrev = a1*krg+gainrev
tieskip:
endin
/********************************************************************
soundfile player for percussion - resonance notes
********************************************************************/
instr 102
p3 = p3
ipit = p4
irg = p5
iamp = p6
ipan = p7
itab = p8
iatt = p9
idecay = p10
ifiltType = p11 - 1
icutoff = p12
a1 flooper2 1, ipit, .25, .750, .2, itab
if ifiltType != -1 then
acomp = a1
a1 bqrez a1, icutoff, 6, ifiltType
a1 balance a1, acomp
endif
kenv expseg 0.001, .003, .6, p3 - .003, 0.001
klocalenv adsr iatt, 0.05, .8, idecay
a1 = a1*kenv*klocalenv
gaoutL = a1*(1-ipan)+gaoutL
gaoutR = a1*ipan+gaoutR
gainrev = a1*irg+gainrev
endin
/***********************************************************************
Simple soundfile player
***********************************************************************/
instr 103
ipit = p4
irg = p5
iamp = p6
ipan = p7
itab = p8
p3 = nsamp(itab) * 0.00002268
iatt = p9
idecay = p10
ifiltType = p11-1
icutoff = p12
a1 loscil iamp, ipit, itab, 1
if ifiltType != -1 then
acomp = a1
a1 bqrez a1, icutoff, 6, ifiltType
a1 balance a1, acomp
endif
kenv adsr iatt, 0.05, .8, idecay
a1 = a1*kenv
gaoutL = a1*(1-ipan)+gaoutL
gaoutR = a1*ipan+gaoutR
gainrev = a1*irg+gainrev
endin
/********************************************************************
soundfile simple crossfade player
********************************************************************/
instr 104
ipit = p4
irg = p5
iamp = p6
ipan = p7
itab = p8
iatt = p9
idecay = p10
a1 flooper2 1, ipit, .25, .750, .2, itab
a2 = a1
kenv adsr iatt, 0.05, .8, idecay
gaoutL = a1*kenv*iamp*(1-ipan)+gaoutL
gaoutR = a2*kenv*iamp*ipan+gaoutR
gainrev = (a1+a2)*irg*kenv*.5*iamp+gainrev
endin
/*********************************************************************
simple karplus-strong plucked string
*********************************************************************/
instr 105
p3 = p3+1
ipit = p4
irg = p5
iamp = p6
ipan = p7
itab = p8
iatt = p9
idecay = p10
icps = 261.626 * ipit
a1 pluck 20000, icps, icps, 0, 5, .495, .495
a1 butterlp a1, 4000
a2 = a1
kenv adsr iatt, 0.05, .8, idecay
gaoutL = a1*kenv*iamp*(1-ipan)+gaoutL
gaoutR = a2*kenv*iamp*ipan+gaoutR
gainrev = (a1+a2)*irg*kenv*.5*iamp+gainrev
endin
/**********************************************************************
FM synth instrument
**********************************************************************/
instr 106
ipit = p4
irg = p5
iamp = p6
ipan = p7
itab = p8
iatt = p9
idecay = p10
kModDev randomi 0.995, 1.005, .45
kFondDev randomi 0.9962, 1.0029, .93
kvibrato vibrato .5, 5, 0.08, 0.5, 3, 5, 3, 5, 1
iImin = 2
iImax = 4
iamp = 3000
kfond = 261.626 * ipit * kFondDev + kvibrato
kformant = 800
kPortFreq = kfond * 3
kModFreq = kfond * 2 * kModDev
kModFreq2 = kfond * 2.001 * kModDev
kPortFreq2 = int((kformant/kPortFreq) + 0.5) * kfond
kenv1 expseg 0.001, .05, iamp, p3 - .15, iamp, .1, 0.001
kenv2 oscil1i 0, kModFreq*(iImax-iImin), p3, 44
amod oscili iImin*kModFreq+kenv2, kModFreq, 1
amod2 oscili iImin*kModFreq2+kenv2, kModFreq2, 1
aport1 oscili kenv1, kPortFreq+amod+amod2, 1
aport2 oscili kenv1*0.5, kPortFreq2+(amod*0.33), 1
a1 = aport1+aport2
a2 = a1
kenv adsr iatt, 0.05, .8, idecay
gaoutL = a1*kenv*iamp*(1-ipan)+gaoutL
gaoutR = a2*kenv*iamp*ipan+gaoutR
gainrev = (a1+a2)*irg*kenv*iamp+gainrev
endin
/**********************************************************************
Waveshaping instrument
**********************************************************************/
instr 107
ipit = p4 * 261.626
irg = p5
iamp = p6
ipan = p7
itab = p8
iatt = p9
idecay = p10
kvib vibr 2, 5, 53
kamp line .42, p3, .1
kampdev randi .07, .5, .666
asig oscili kamp+kampdev, ipit+kvib, 50
a1 table asig, 51, 1, .5
a1 balance a1, asig
a1 = a1*10000
a2 delay a1, .041
kenv adsr iatt, 0.05, .8, idecay
gaoutL = a1*kenv*iamp*(1-ipan)+gaoutL
gaoutR = a2*kenv*iamp*ipan+gaoutR
gainrev = (a1+a2)*irg*kenv*iamp+gainrev
endin
/**************************************************************************
General Soundfile Player - Used by Memosono
**************************************************************************/
instr 108
/* soundfile play control
p4 : filename
p5 : unique instance ID
p6 : output gain (0-1)
p7 : udp send gain (0-1)
p8 : offset in seconds
channels:
sfplay..on - instance control channel (1:on 0: off)
sfplay..gain - soundfile play gain (0-1)
sfplay..udpgain - udp send gain (0-1)
sfplay..flen - holds the channel length
*/
S1 strget p4
inst = p5
ich filenchnls S1
iln filelen S1
ioffset = p8
Slen sprintf "sfplay.%d.flen", p5 ; file length channel
chnset iln, Slen
if ioffset >= iln then
turnoff
else
iln = iln - ioffset
endif
Splay sprintf "sfplay.%d.on", inst ; instance control channel
Sname sprintf "sfplay.%d.fname", inst ; filename channel
Sgain sprintf "sfplay.%d.gain", inst ; gain channel
Sudp sprintf "sfplay.%d.udpgain", inst ; udp gain channel
chnset S1, Sname
chnset 1, Splay
chnset p6, Sgain
chnset p7, Sudp
event_i "i",109,0,iln,inst,ich,ioffset
turnoff
endin
instr 109
/* soundfile player
This is the actual soundfile player.
It never gets called directly
*/
ich = p5
inst= p4
ioffset = p6
Splay sprintf "sfplay.%d.on", inst ; instance control channel
Sname sprintf "sfplay.%d.fname", inst ; filename channel
Sgain sprintf "sfplay.%d.gain", inst ; gain channel
Sudp sprintf "sfplay.%d.udpgain", inst ; udp gain channel
kon chnget Splay
kg1 chnget Sgain
kg2 chnget Sudp
S1 chnget Sname
if kon == 0 then
printf "sfplay:%d OFF\n", 1, inst
turnoff
endif
if ich = 1 then
a1 diskin2 S1,1,ioffset,1
a2 = a1
else
a1,a2 diskin2 S1,1,ioffset,1
endif
outs a1*kg1, a2*kg1
gaudp1 = a1*kg2 + gaudp1
gaudp2 = a2*kg2 + gaudp2
printf_i "sfplay:%d\n", 1, inst
endin
/**************************************************************************
UDP receiver
**************************************************************************/
instr 256
gaudp1 = 0
gaudp2 = 0
a1 = 0
outs a1, a1
endin
f1 0 8192 10 1
f40 0 1024 10 1 0 .5 0 0 .3 0 0 .2 0 .1 0 0 0 0 .2 0 0 0 .05 0 0 0 0 .03 ; ADDITIVE SYNTHESIS WAVE
f41 0 8193 19 .5 .5 270 .5 ; SIGMOID FUNCTION
f44 0 8192 5 1 8192 0.001 ; EXPONENTIAL FUNCTION
f50 0 8192 10 1 .1 .005 ; forme d'onde de l'index
f51 0 8192 13 1 1 0 1 .7 .8 .3 .1 .3 .4 .3 .2 0 0 .2 .1 0 .6 0 0 .5 .4 .3 0 0 .6 .7 ; premiere fonction de Chebichev
f52 0 4096 4 51 1 ; table de correction d'amplitude
f53 0 512 10 1 ; VIBRATO WAVE
i256 0 600000
i200 0 600000