1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
|
<CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
; Audio out Audio in No messages
-odac -iadc -d ;;;RT audio I/O
; For Non-realtime ouput leave only the line below:
; -o oscbnk.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>
/* Written by Istvan Varga */
sr = 48000
kr = 750
ksmps = 64
nchnls = 2
ga01 init 0
ga02 init 0
/* sawtooth wave */
i_ ftgen 1, 0, 16384, 7, 1, 16384, -1
/* FM waveform */
i_ ftgen 3, 0, 4096, 7, 0, 512, 0.25, 512, 1, 512, 0.25, 512, \
0, 512, -0.25, 512, -1, 512, -0.25, 512, 0
/* AM waveform */
i_ ftgen 4, 0, 4096, 5, 1, 4096, 0.01
/* FM to EQ */
i_ ftgen 5, 0, 1024, 5, 1, 512, 32, 512, 1
/* sine wave */
i_ ftgen 6, 0, 1024, 10, 1
/* room parameters */
i_ ftgen 7, 0, 64, -2, 4, 50, -1, -1, -1, 11, \
1, 26.833, 0.05, 0.85, 10000, 0.8, 0.5, 2, \
1, 1.753, 0.05, 0.85, 5000, 0.8, 0.5, 2, \
1, 39.451, 0.05, 0.85, 7000, 0.8, 0.5, 2, \
1, 33.503, 0.05, 0.85, 7000, 0.8, 0.5, 2, \
1, 36.151, 0.05, 0.85, 7000, 0.8, 0.5, 2, \
1, 29.633, 0.05, 0.85, 7000, 0.8, 0.5, 2
/* generate bandlimited sawtooth waves */
i0 = 0
loop1:
imaxh = sr / (2 * 440.0 * exp(log(2.0) * (i0 - 69) / 12))
i_ ftgen i0 + 256, 0, 4096, -30, 1, 1, imaxh
i0 = i0 + 1
if (i0 < 127.5) igoto loop1
instr 1
p3 = p3 + 0.4
; note frequency
kcps = 440.0 * exp(log(2.0) * (p4 - 69) / 12)
; lowpass max. frequency
klpmaxf limit 64 * kcps, 1000.0, 12000.0
; FM depth in Hz
kfmd1 = 0.02 * kcps
; AM frequency
kamfr = kcps * 0.02
kamfr2 = kcps * 0.1
; table number
kfnum = (256 + 69 + 0.5 + 12 * log(kcps / 440.0) / log(2.0))
; amp. envelope
aenv linseg 0, 0.1, 1.0, p3 - 0.5, 1.0, 0.1, 0.5, 0.2, 0, 1.0, 0
/* oscillator / left */
a1 oscbnk kcps, 0.0, kfmd1, 0.0, 40, 200, 0.1, 0.2, 0, 0, 144, \
0.0, klpmaxf, 0.0, 0.0, 1.5, 1.5, 2, \
kfnum, 3, 0, 5, 5, 5
a2 oscbnk kcps, 1.0, kfmd1, 0.0, 40, 201, 0.1, 0.2, kamfr, kamfr2, 148, \
0, 0, 0, 0, 0, 0, -1, \
kfnum, 3, 4
a2 pareq a2, kcps * 8, 0.0, 0.7071, 2
a0 = a1 + a2 * 0.12
/* delay */
adel = 0.001
a01 vdelayx a0, adel, 0.01, 16
a_ oscili 1.0, 0.25, 6, 0.0
adel = adel + 1.0 / (exp(log(2.0) * a_) * 8000)
a02 vdelayx a0, adel, 0.01, 16
a0 = a01 + a02
ga01 = ga01 + a0 * aenv * 2500
/* oscillator / right */
; lowpass max. frequency
a1 oscbnk kcps, 0.0, kfmd1, 0.0, 40, 202, 0.1, 0.2, 0, 0, 144, \
0.0, klpmaxf, 0.0, 0.0, 1.0, 1.0, 2, \
kfnum, 3, 0, 5, 5, 5
a2 oscbnk kcps, 1.0, kfmd1, 0.0, 40, 203, 0.1, 0.2, kamfr, kamfr2, 148, \
0, 0, 0, 0, 0, 0, -1, \
kfnum, 3, 4
a2 pareq a2, kcps * 8, 0.0, 0.7071, 2
a0 = a1 + a2 * 0.12
/* delay */
adel = 0.001
a01 vdelayx a0, adel, 0.01, 16
a_ oscili 1.0, 0.25, 6, 0.25
adel = adel + 1.0 / (exp(log(2.0) * a_) * 8000)
a02 vdelayx a0, adel, 0.01, 16
a0 = a01 + a02
ga02 = ga02 + a0 * aenv * 2500
endin
/* output / left */
instr 81
i1 = 0.000001
aLl, aLh, aRl, aRh spat3di ga01 + i1*i1*i1*i1, -8.0, 4.0, 0.0, 0.3, 7, 4
ga01 = 0
aLl butterlp aLl, 800.0
aRl butterlp aRl, 800.0
outs aLl + aLh, aRl + aRh
endin
/* output / right */
instr 82
i1 = 0.000001
aLl, aLh, aRl, aRh spat3di ga02 + i1*i1*i1*i1, 8.0, 4.0, 0.0, 0.3, 7, 4
ga02 = 0
aLl butterlp aLl, 800.0
aRl butterlp aRl, 800.0
outs aLl + aLh, aRl + aRh
endin
</CsInstruments>
<CsScore>
/* Written by Istvan Varga */
t 0 60
i 1 0 4 41
i 1 0 4 60
i 1 0 4 65
i 1 0 4 69
i 81 0 5.5
i 82 0 5.5
e
</CsScore>
</CsoundSynthesizer>
|