aboutsummaryrefslogtreecommitdiff
path: root/pd/doc/3.audio.examples/D12.sampler.bis.pd
blob: cad81484e39e6c2460c8f29bd28bcaa9f2798a66 (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
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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
#N canvas 104 78 1119 674 12;
#N canvas 0 0 600 392 samples 0;
#N canvas 0 0 450 300 graph1 0;
#X array sample1 176403 float 0;
#X coords 0 1.02 176403 -1.02 200 130 1;
#X restore 262 41 graph;
#X text 282 385 ------ 4 seconds ------;
#N canvas 0 0 450 300 graph1 0;
#X array sample2 176403 float 0;
#X coords 0 1.02 176403 -1.02 200 130 1;
#X restore 262 226 graph;
#X restore 785 563 pd samples;
#N canvas 52 219 971 512 recorder 0;
#X obj 174 304 adc~ 1;
#X obj 174 332 hip~ 5;
#X obj 243 362 line~;
#X obj 174 361 *~;
#X msg 243 334 1;
#X obj 302 299 del 3990;
#X msg 279 334 0 10;
#X obj 174 412 tabwrite~ sample1;
#X obj 26 218 makefilename sample%1;
#X msg 26 247 set \$1 \, bang;
#X msg 348 270 stop;
#X msg 302 270 bang;
#X obj 220 180 route record stop reload browse;
#X obj 411 288 loadbang;
#X obj 514 243 openpanel;
#X msg 514 215 bang;
#X text 556 214 <-- browse for samples;
#X text 482 339 v-- re-read original samples;
#X obj 411 425 soundfiler;
#X msg 411 367 read ../sound/bell.aiff sample1 \, read ../sound/voice2.wav
sample2;
#X msg 514 270 read \$1 sample1;
#X obj 514 297 soundfiler;
#X msg 220 41 record 1;
#X msg 220 97 stop;
#X msg 220 69 record 2;
#X msg 220 124 reload;
#X msg 220 152 browse;
#X text 218 19 record \, etc.;
#X connect 0 0 1 0;
#X connect 1 0 3 0;
#X connect 2 0 3 1;
#X connect 3 0 7 0;
#X connect 4 0 2 0;
#X connect 5 0 6 0;
#X connect 6 0 2 0;
#X connect 8 0 9 0;
#X connect 9 0 7 0;
#X connect 10 0 5 0;
#X connect 11 0 5 0;
#X connect 12 0 8 0;
#X connect 12 0 11 0;
#X connect 12 0 4 0;
#X connect 12 1 6 0;
#X connect 12 1 10 0;
#X connect 12 2 19 0;
#X connect 12 3 15 0;
#X connect 13 0 19 0;
#X connect 14 0 20 0;
#X connect 15 0 14 0;
#X connect 19 0 18 0;
#X connect 20 0 21 0;
#X connect 22 0 12 0;
#X connect 23 0 12 0;
#X connect 24 0 12 0;
#X connect 25 0 12 0;
#X connect 26 0 12 0;
#X restore 785 586 pd recorder;
#X text 782 458 sample number;
#X obj 619 96 unpack 0 0 0 0 0 0 0;
#X obj 563 124 poly 8 1;
#X obj 654 270 route 1 2 3 4 5 6 7 8;
#X obj 558 487 output~;
#X obj 563 149 swap;
#X obj 563 196 route 0;
#X obj 563 173 pack;
#X obj 605 221 unpack;
#X obj 557 289 sampvoice2;
#X obj 563 221 pack;
#X text 933 411 amplitude;
#X text 932 435 pitch;
#X text 851 344 ARGUMENTS FOR:;
#X text 784 386 pitch;
#X text 784 410 amplitude;
#X text 784 434 duration;
#X text 13 4 POLY SAMPLER \, VERSION 2 FOR SEPARATE NOTE-ON/OFF MESSAGES
;
#X obj 619 71 r onoff;
#X text 932 368 ON/OFF TRANSITIONS:;
#X text 785 367 ENTIRE NOTES:;
#X text 932 390 tag;
#X text 782 485 sample onset;
#X text 782 511 rise time;
#X text 783 535 decay time;
#X text 929 460 (same other 4);
#X obj 836 159 f;
#X obj 872 159 + 1;
#X obj 836 185 mod 1e+06;
#X obj 654 245 pack 0 0 0 0 0 0 0;
#X obj 918 74 r note;
#X obj 918 100 unpack 0 0 0 0 0 0 0;
#X text 860 641 updated for Pd version 0.37;
#X obj 895 127 t b f;
#X obj 936 237 pack 0 0 0 0 0 0 0;
#X obj 889 285 s onoff;
#X obj 870 230 pipe;
#X obj 870 253 pack;
#X msg 103 528 \; onoff 1 90 60 1 0 0 100;
#X msg 323 528 \; onoff 1 0;
#X msg 104 570 \; onoff 2 90 48 1 0 0 100;
#X msg 324 570 \; onoff 2 0;
#X msg 104 627 \; note 51 90 1000 1 0 0 100;
#X obj 557 312 sampvoice2;
#X obj 557 336 sampvoice2;
#X obj 557 360 sampvoice2;
#X obj 557 383 sampvoice2;
#X obj 557 407 sampvoice2;
#X obj 557 430 sampvoice2;
#X obj 557 454 sampvoice2;
#X text 14 35 Here is a variation on the polyphonic sampler \, which
can take separate messages to start and stop notes (so that you can
attach it to a MIDI keyboard \, for example.) "Note" messages act as
before \, but in an intermediate step they are split onto note-on and
note-off messages \, sent to "onoff". You can alternatively send messages
straight to onoff if you don't know the duration in advance.;
#X text 12 150 Messages to "onoff" require a tag \, which is a number
shared between the note-on and note-off message so that we can track
down the voice to turn it off. If you're using MIDI input \, you can
just re-use the pitch as a tag.;
#X text 102 508 separate messages for not on and off:;
#X text 101 608 single messages to do both as before:;
#X text 10 221 Messages to "onoff" whose amplitude is zero are note-off
messages (the other parameters of note-off messages are ignored). The
"sampvoice2" abstraction is a modification of "sampvoice" which looks
at the amplitude field to decide whether to begin or end a note.;
#X text 10 301 To convert "note" messages to pairs of "onoff" messages
\, first a counter generates a tag. The the "pipe" object delays a
copy of the tag \, which the following "pack" object converts into
a note-off message (a pair of numbers \, the tag and a zero.);
#X text 9 382 Under "r onoff" \, the poly object allocates a voice
number \, putting it out paired with velocity. After swapping the two
and packing them into a single message \, the amplitude is checked
against zero by the "route 0" object \; if zero \, the "pack" confects
a 2-argument message (voice number and zero). Otherwise \, the "unpack"
retrieves the nonzero amplitude for a note-on message \, to which we
add all the other parameters and route to the appropriate voice.;
#X connect 3 0 4 0;
#X connect 3 1 31 1;
#X connect 3 1 4 1;
#X connect 3 2 31 2;
#X connect 3 3 31 3;
#X connect 3 4 31 4;
#X connect 3 5 31 5;
#X connect 3 6 31 6;
#X connect 4 0 7 0;
#X connect 4 2 7 1;
#X connect 5 0 11 1;
#X connect 5 1 45 1;
#X connect 5 2 46 1;
#X connect 5 3 47 1;
#X connect 5 4 48 1;
#X connect 5 5 49 1;
#X connect 5 6 50 1;
#X connect 5 7 51 1;
#X connect 7 0 9 0;
#X connect 7 1 9 1;
#X connect 8 0 12 0;
#X connect 8 1 10 0;
#X connect 9 0 8 0;
#X connect 10 1 31 0;
#X connect 11 0 45 0;
#X connect 12 0 5 0;
#X connect 20 0 3 0;
#X connect 28 0 29 0;
#X connect 29 0 30 0;
#X connect 30 0 28 1;
#X connect 30 0 38 0;
#X connect 30 0 36 0;
#X connect 31 0 5 0;
#X connect 32 0 33 0;
#X connect 33 0 35 0;
#X connect 33 1 36 1;
#X connect 33 2 38 1;
#X connect 33 3 36 3;
#X connect 33 4 36 4;
#X connect 33 5 36 5;
#X connect 33 6 36 6;
#X connect 35 0 28 0;
#X connect 35 1 36 2;
#X connect 36 0 37 0;
#X connect 38 0 39 0;
#X connect 39 0 37 0;
#X connect 45 0 46 0;
#X connect 46 0 47 0;
#X connect 47 0 48 0;
#X connect 48 0 49 0;
#X connect 49 0 50 0;
#X connect 50 0 51 0;
#X connect 51 0 6 0;
#X connect 51 0 6 1;