1<CsoundSynthesizer>
2<CsOptions>
3; Select audio/midi flags here according to platform
4; Audio out   Audio in
5-odac           -iadc    ;;;RT audio I/O
6; For Non-realtime ouput leave only the line below:
7; -o biquad-2.wav -W ;;; for file output any platform
8</CsOptions>
9<CsInstruments>
10sr = 44100
11kr = 4410
12ksmps = 10
13nchnls = 2
14
15/*  modal synthesis using biquad filters as oscillators
16    Example by Scott Lindroth 2007 */
17
18
19instr 1
20
21    ipi = 3.1415926
22    idenom = sr*0.5
23
24    ipulseSpd = p4
25    icps     = p5
26    ipan = p6
27    iamp    = p7
28    iModes = p8
29
30    apulse    mpulse iamp, 0
31
32    icps    = cpspch( icps )
33
34    ; filter gain
35
36    iamp1 = 600
37    iamp2 = 1000
38    iamp3 = 1000
39    iamp4 = 1000
40    iamp5 = 1000
41    iamp6 = 1000
42
43    ; resonance
44
45    irpole1 = 0.99999
46    irpole2 = irpole1
47    irpole3 = irpole1
48    irpole4 = irpole1
49    irpole5 = irpole1
50    irpole6 = irpole1
51
52    ; modal frequencies
53
54    if (iModes == 1) goto modes1
55    if (iModes == 2) goto modes2
56
57    modes1:
58    if1    = icps * 1            ;pot lid
59    if2    = icps * 6.27
60    if3    = icps * 3.2
61    if4    = icps * 9.92
62    if5    = icps * 14.15
63    if6    = icps * 6.23
64    goto nextPart
65
66    modes2:
67    if1     = icps * 1            ;uniform wood bar
68    if2     = icps * 2.572
69    if3     = icps * 4.644
70    if4     = icps * 6.984
71    if5     = icps * 9.723
72    if6     = icps * 12.0
73    goto nextPart
74
75    nextPart:
76
77    ; convert frequency to radian frequency
78
79    itheta1 = (if1/idenom) * ipi
80    itheta2 = (if2/idenom) * ipi
81    itheta3 = (if3/idenom) * ipi
82    itheta4 = (if4/idenom) * ipi
83    itheta5 = (if5/idenom) * ipi
84    itheta6 = (if6/idenom) * ipi
85
86    ; calculate coefficients
87
88    ib11 = -2 * irpole1 * cos(itheta1)
89    ib21 = irpole1 * irpole1
90    ib12 = -2 * irpole2 * cos(itheta2)
91    ib22 = irpole2 * irpole2
92    ib13 = -2 * irpole3 * cos(itheta3)
93    ib23 = irpole3 * irpole3
94    ib14 = -2 * irpole4 * cos(itheta4)
95    ib24 = irpole4 * irpole4
96    ib15 = -2 * irpole5 * cos(itheta5)
97    ib25 = irpole5 * irpole5
98    ib16 = -2 * irpole6 * cos(itheta6)
99    ib26 = irpole6 * irpole6
100
101    ;printk 1, ib 11
102    ;printk 1, ib 21
103
104    ;  also try setting the -1 coeff. to 0, but be sure to scale down the amplitude!
105
106    asin1     biquad  apulse * iamp1, 1, 0, -1, 1, ib11, ib21
107         asin2       biquad  apulse * iamp2, 1, 0, -1, 1, ib12, ib22
108         asin3       biquad  apulse * iamp3, 1, 0, -1, 1, ib13, ib23
109         asin4       biquad  apulse * iamp4, 1, 0, -1, 1, ib14, ib24
110         asin5       biquad  apulse * iamp5, 1, 0, -1, 1, ib15, ib25
111         asin6       biquad  apulse * iamp6, 1, 0, -1, 1, ib16, ib26
112
113
114    afin    =    (asin1 + asin2 + asin3 + asin4 + asin5 + asin6)
115
116    outs        afin * sqrt(p6), afin*sqrt(1-p6)
117
118endin
119</CsInstruments>
120<CsScore>
121;ins     st    dur  pulseSpd   pch    pan    amp     Modes
122i1        0    12    0       7.089    0      0.7    2
123i1        .    .    .        7.09     1      .      .
124i1        .    .    .        7.091    0.5    .      .
125
126i1        0    12    0       8.039    0      0.7    2
127i1        0    12    0       8.04     1      0.7    2
128i1        0    12    0       8.041    0.5    0.7    2
129
130i1        9    .    .        7.089    0      .      2
131i1        .    .    .        7.09     1      .      .
132i1        .    .    .        7.091    0.5    .      .
133
134i1        9    12    0       8.019    0      0.7    2
135i1        9    12    0       8.02     1      0.7    2
136i1        9    12    0       8.021    0.5    0.7    2
137e
138</CsScore>
139</CsoundSynthesizer>
140