aboutsummaryrefslogtreecommitdiff
path: root/examples/3-controlchanges.csd
blob: 93749b1855aba12dbeaa63e2121eb906de8fcae3 (plain)
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
<CsoundSynthesizer>
<CsOptions>
-odac -m0
</CsOptions>
<CsInstruments>

sr = 44100
kr = 4410
nchnls	= 2
0dbfs = 1
seed 0 


instr main	
    giopl, aL, aR opl
    outs aL, aR
    gSbanks[] oplbanknames giopl
    
    index = 0
    itime = 0
    inote = 0
    inotes[] fillarray 50, 52, 64, 56, 53, 59, 62 
    while (index < lenarray(gSbanks)) do
        event_i "i", "play", itime, 2, index, inotes[inote], 0
        if (inote < lenarray(inotes)-1) then
            inote += 1
        else
            inote = 0
        endif
        if (random(0, 1) > 0.5) then
            event_i "i", "play", itime+0.5, 0.5, index, inotes[inote], 1
        endif
        itime += 1
        index += 1
    od
    p3 = itime
endin


instr play
    ibank = p4
    inote = p5
    ichannel = p6
    ipatch random 0, 127
    prints sprintf("%d-%d (%s)\n", ibank, ipatch, gSbanks[ibank])    
    if (ichannel == 0) then
        oplsetbank giopl, ibank
    endif
    oplpatchchange giopl, ichannel, ipatch
    oplnote giopl, ichannel, inote, 100
    event_i "i", "cc", p3*0.5, p3*0.5, ichannel
endin


instr cc
    ichannel = p4
    if (random(0, 1) > 0.6) then
        ibend = (random(0, 1) > 0.5) ? 1 : -1
        kbend linseg 0, p3*0.7, 0, p3*0.29, ibend, p3*0.01, 0
        oplpitchbend giopl, ichannel, kbend
    endif


    if (random(0, 1) > 0.6) then
        kmod linseg 0, p3*0.7, 255, p3*0.3, 0
        oplcontrolchange giopl, ichannel, 1, kmod
    endif
endin


</CsInstruments>
; ==============================================
<CsScore>
i"main" 0 3600
</CsScore>
</CsoundSynthesizer>