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
|
<CsoundSynthesizer>
<CsOptions>
-+rtaudio=alsa -odac -m0 -d -b2048 -B4096
</CsOptions>
<CsInstruments>
sr=16000
ksmps=100
nchnls=2
/**************************************************************************
General ogg-vorbis Soundfile Player
**************************************************************************/
instr 100
/* soundfile play control
p4 : filename
p5 : unique instance ID
p6 : output gain (0-1)
p7 : offset in seconds
channels:
sfplay.<ID>.on - instance control channel (1:on 0: off)
sfplay.<ID>.gain - soundfile play gain (0-1)
sfplay.<ID>.flen - holds the channel length
*/
S1 strget p4
inst = p5
ich = 1
iln = 10
ioffset = p7
Slen sprintf "sfplay.%d.flen", p5 ; file length channel
chnset iln, Slen
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
chnset S1, Sname
chnset 1, Splay
chnset p6, Sgain
event_i "i",101,0,iln,inst,ich,ioffset
turnoff
endin
instr 101
/* 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
kon chnget Splay
kg1 chnget Sgain
S1 chnget Sname
if kon == 0 then
printf "sfplay:%d OFF\n", 1, inst
turnoff
endif
if ich = 1 then
a1 oggplay S1, ioffset
a2 = a1
else
a1,a2 oggplay S1, ioffset
endif
outs a1*kg1, a2*kg1
printf_i "sfplay:%d\n", 1, inst
endin
/**************************************************************************
General wav, aiff Soundfile Player
**************************************************************************/
instr 102
/* soundfile play control
p4 : filename
p5 : unique instance ID
p6 : output gain (0-1)
p7 : offset in seconds
channels:
sfplay.<ID>.on - instance control channel (1:on 0: off)
sfplay.<ID>.gain - soundfile play gain (0-1)
sfplay.<ID>.flen - holds the channel length
*/
S1 strget p4
inst = p5
ich filenchnls S1
iln filelen S1
ioffset = p7
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
chnset S1, Sname
chnset 1, Splay
chnset p6, Sgain
event_i "i",103,0,iln,inst,ich,ioffset
turnoff
endin
instr 103
/* 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
kon chnget Splay
kg1 chnget Sgain
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
endin
</CsInstruments>
<CsScore>
f0 600000
</CsScore>
</CsoundSynthesizer>
|