aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Christoph Steiner <eighthave@users.sourceforge.net>2005-11-16 05:57:05 +0000
committerHans-Christoph Steiner <eighthave@users.sourceforge.net>2005-11-16 05:57:05 +0000
commit301cafdcc30455e8567c82e99ec6c778644047f5 (patch)
treed71640a9deaca88f1144aa072b2e10576d482335
This commit was generated by cvs2svn to compensate for changes in r3933,svn2git-root
which included commits to RCS files with non-trunk default branches. svn path=/trunk/abstractions/nqpoly/; revision=3934
-rw-r--r--nqpoly~/grain~.pd38
-rw-r--r--nqpoly~/mstohz.pd22
-rw-r--r--nqpoly~/nqpoly~-test.pd49
-rw-r--r--nqpoly~/nqpoly~.pd70
-rw-r--r--nqpoly~/nqpwrap~.pd33
-rw-r--r--nqpoly~/readme.txt35
-rw-r--r--nqpoly~/simplenote~.pd25
-rw-r--r--nqpoly~/tgrain~-test.pd96
-rw-r--r--nqpoly~/tgrain~.pd47
9 files changed, 415 insertions, 0 deletions
diff --git a/nqpoly~/grain~.pd b/nqpoly~/grain~.pd
new file mode 100644
index 0000000..658bbe7
--- /dev/null
+++ b/nqpoly~/grain~.pd
@@ -0,0 +1,38 @@
+#N canvas 73 114 477 461 10;
+#X obj 20 11 inlet;
+#X obj 43 437 outlet~;
+#X obj 209 337 outlet;
+#X obj 233 179 delay;
+#X obj 81 336 osc~;
+#X obj 48 363 *~;
+#X obj 60 65 unpack f f;
+#X obj 224 17 inlet;
+#X obj 284 96 mstohz;
+#X obj 289 147 osc~ 0;
+#X msg 315 120 0;
+#X obj 44 95 t b f;
+#X obj 97 399 *~ 0;
+#X msg 107 369 0;
+#X msg 136 372 1;
+#X obj 289 186 -~ 1;
+#X obj 285 231 /~ -2;
+#X connect 0 0 6 0;
+#X connect 3 0 2 0;
+#X connect 3 0 13 0;
+#X connect 4 0 5 1;
+#X connect 5 0 12 0;
+#X connect 6 0 11 0;
+#X connect 6 1 3 1;
+#X connect 6 1 8 0;
+#X connect 8 0 9 0;
+#X connect 9 0 15 0;
+#X connect 10 0 9 1;
+#X connect 11 0 10 0;
+#X connect 11 0 14 0;
+#X connect 11 0 3 0;
+#X connect 11 1 4 0;
+#X connect 12 0 1 0;
+#X connect 13 0 12 1;
+#X connect 14 0 12 1;
+#X connect 15 0 16 0;
+#X connect 16 0 5 0;
diff --git a/nqpoly~/mstohz.pd b/nqpoly~/mstohz.pd
new file mode 100644
index 0000000..4db36c3
--- /dev/null
+++ b/nqpoly~/mstohz.pd
@@ -0,0 +1,22 @@
+#N canvas 159 297 450 300 10;
+#X obj 147 6 inlet;
+#X obj 141 246 outlet;
+#X obj 134 167 /;
+#X obj 148 46 select 0;
+#X obj 127 104 t b f b;
+#X obj 244 244 outlet;
+#X obj 244 209 change;
+#X obj 279 135 0;
+#X obj 205 152 1;
+#X obj 104 138 1000;
+#X connect 0 0 3 0;
+#X connect 2 0 1 0;
+#X connect 3 0 7 0;
+#X connect 3 1 4 0;
+#X connect 4 0 9 0;
+#X connect 4 1 2 1;
+#X connect 4 2 8 0;
+#X connect 6 0 5 0;
+#X connect 7 0 6 0;
+#X connect 8 0 6 0;
+#X connect 9 0 2 0;
diff --git a/nqpoly~/nqpoly~-test.pd b/nqpoly~/nqpoly~-test.pd
new file mode 100644
index 0000000..388eff9
--- /dev/null
+++ b/nqpoly~/nqpoly~-test.pd
@@ -0,0 +1,49 @@
+#N canvas 150 336 500 300 10;
+#X obj 103 144 pack f f;
+#X obj 85 262 dac~;
+#X floatatom 137 87 4 0 0;
+#X obj 88 110 mtof;
+#X floatatom 138 206 4 0 0;
+#X obj 27 55 metro 100;
+#X obj 31 17 toggle 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1
+1 1;
+#X floatatom 78 19 4 0 0;
+#X floatatom 320 262 0 0 0;
+#X obj 45 80 random 130;
+#X obj 100 233 *~ 0.1;
+#X obj 321 210 unpack f f;
+#X floatatom 374 260 4 0 0;
+#X text 149 66 duration;
+#X text 121 21 frequency of note creation;
+#X text 152 164 change the number of voices here;
+#X text 315 23 pix.test.at;
+#X text 238 190 dropped lists come out here;
+#X graph graph2 0 -1 1999 1 259 176 459 36;
+#X array array100 2000 float 0;
+#X pop;
+#X obj 163 275 tabwrite~ array100;
+#X obj 214 248 metro 100;
+#X obj 222 222 toggle 15 0 empty empty empty 20 8 0 8 -262144 -1 -1
+1 1;
+#X floatatom 263 217 5 0 0;
+#X msg 163 236 bang;
+#X obj 97 185 nqpoly~ 10 grain~;
+#X connect 0 0 24 0;
+#X connect 2 0 0 1;
+#X connect 3 0 0 0;
+#X connect 4 0 10 1;
+#X connect 5 0 9 0;
+#X connect 6 0 5 0;
+#X connect 7 0 5 1;
+#X connect 9 0 3 0;
+#X connect 10 0 1 0;
+#X connect 10 0 1 1;
+#X connect 10 0 19 0;
+#X connect 11 0 8 0;
+#X connect 11 1 12 0;
+#X connect 20 0 19 0;
+#X connect 21 0 20 0;
+#X connect 22 0 20 1;
+#X connect 23 0 19 0;
+#X connect 24 0 10 0;
+#X connect 24 1 11 0;
diff --git a/nqpoly~/nqpoly~.pd b/nqpoly~/nqpoly~.pd
new file mode 100644
index 0000000..3101ea9
--- /dev/null
+++ b/nqpoly~/nqpoly~.pd
@@ -0,0 +1,70 @@
+#N canvas 118 208 717 437 10;
+#X obj 16 20 inlet;
+#X obj 26 316 outlet~;
+#X obj 114 321 outlet;
+#X obj 355 195 symbol \$0-poly;
+#X obj 93 13 namecanvas \$0-poly;
+#X obj 255 167 t b b;
+#X obj 297 196 + 1;
+#X obj 290 235 t f f;
+#X obj 321 259 + 1;
+#X obj 256 143 until;
+#X obj 147 234 symbol \$0-poly;
+#X obj 172 293 pack s f;
+#X msg 169 336 \; \$1 connect \$2 1 2 0;
+#X obj 452 193 symbol \$2;
+#X obj 517 194 symbol \$3;
+#X obj 577 195 symbol \$4;
+#X obj 294 295 pack f f s s s s s s s;
+#X obj 474 262 symbol \$5;
+#X obj 539 263 symbol \$6;
+#X obj 599 264 symbol \$7;
+#X obj 260 101 - 1;
+#X obj 255 123 moses 1;
+#X msg 302 327 \; \$3 obj 5 100 nqpwrap~ \$4 \$5 \$6 \$7 \$8 \$9 \;
+\$3 connect \$1 1 \$2 0 \; \$3 connect \$2 0 1 0 \; \$3 connect 28
+0 \$2 1;
+#X text 287 17 pix.test.at;
+#X obj 214 20 loadbang;
+#X obj 255 77 \$1;
+#X obj 262 196 29;
+#X obj 248 236 29;
+#X obj 216 48 t b b b b;
+#X obj 19 117 nqpwrap~ \$2 \$3 \$4 \$5 \$6 \$7;
+#X connect 0 0 29 0;
+#X connect 3 0 16 2;
+#X connect 5 0 26 0;
+#X connect 5 1 13 0;
+#X connect 5 1 14 0;
+#X connect 5 1 15 0;
+#X connect 5 1 17 0;
+#X connect 5 1 3 0;
+#X connect 5 1 18 0;
+#X connect 5 1 19 0;
+#X connect 6 0 26 1;
+#X connect 7 0 16 0;
+#X connect 7 1 8 0;
+#X connect 8 0 16 1;
+#X connect 8 0 11 1;
+#X connect 9 0 5 0;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 13 0 16 3;
+#X connect 14 0 16 4;
+#X connect 15 0 16 5;
+#X connect 16 0 22 0;
+#X connect 17 0 16 6;
+#X connect 18 0 16 7;
+#X connect 19 0 16 8;
+#X connect 20 0 21 0;
+#X connect 21 1 9 0;
+#X connect 24 0 28 0;
+#X connect 25 0 20 0;
+#X connect 26 0 6 0;
+#X connect 26 0 7 0;
+#X connect 27 0 11 1;
+#X connect 28 0 29 1;
+#X connect 28 1 10 0;
+#X connect 28 2 25 0;
+#X connect 28 3 27 0;
+#X connect 29 0 1 0;
diff --git a/nqpoly~/nqpwrap~.pd b/nqpoly~/nqpwrap~.pd
new file mode 100644
index 0000000..d875706
--- /dev/null
+++ b/nqpoly~/nqpwrap~.pd
@@ -0,0 +1,33 @@
+#N canvas 71 272 450 300 10;
+#X obj 45 26 inlet;
+#X obj 49 123 spigot;
+#X obj 135 129 spigot;
+#X obj 42 204 \$1 \$2 \$3 \$4 \$5 \$6 \$7 \$8 \$9;
+#X obj 47 157 t l b;
+#X obj 33 257 outlet~;
+#X obj 181 253 outlet;
+#X obj 42 67 t l l;
+#X obj 288 15 inlet;
+#X text 24 6 pix.test.at;
+#X obj 99 63 0;
+#X obj 128 63 1;
+#X obj 201 58 1;
+#X obj 234 58 0;
+#X connect 0 0 7 0;
+#X connect 1 0 4 0;
+#X connect 2 0 6 0;
+#X connect 3 0 5 0;
+#X connect 3 1 12 0;
+#X connect 3 1 13 0;
+#X connect 4 0 3 0;
+#X connect 4 1 10 0;
+#X connect 4 1 11 0;
+#X connect 7 0 1 0;
+#X connect 7 1 2 0;
+#X connect 8 0 3 1;
+#X connect 8 0 12 0;
+#X connect 8 0 13 0;
+#X connect 10 0 1 1;
+#X connect 11 0 2 1;
+#X connect 12 0 1 1;
+#X connect 13 0 2 1;
diff --git a/nqpoly~/readme.txt b/nqpoly~/readme.txt
new file mode 100644
index 0000000..011baf0
--- /dev/null
+++ b/nqpoly~/readme.txt
@@ -0,0 +1,35 @@
+not-quite-poly
+
+polyphonic synthesis for pd.
+
+how do i use it?
+
+first you need to make an instrument. you do this by making an abstraction (or an external, if you are so inclined) that follows these rules:
+
+it has two inlets, and two outlets.
+
+the first inlet, takes a list. these are the parameters that are used to trigger an instance of your "instrument". the parameters can be anything at all, but you would normally specify some things like duration of note, and frequency etc.
+
+the second inlet is optional. it receives a bang when the instument has finished loading. yes that's right, just like loadbang. the reason for having this inlet is because there is a 'bug', that will stop loadbangs from working inside your polyphonic instrument. when i say optional, i mean you will get some errors at creation time of the nqpoly~ object if you don't have it, but everything else should work.
+
+the first outlet is the signal output from your instrument. your instrument should only start generating a signal on this outlet (other than 0) in response to a trigger on it's first input.
+
+the second outlet should send out a bang when your instrument has finished playing it's current note, and is ready to receive another trigger.
+
+your instrument can also accept up to 5 creation arguments. they must all be symbols (not floats, unfortunately). the intended use of the creation arguments is as the prefix for receives, so that you can control all of your instantiated instruments as a group.
+
+once you have an instrument, you can build a polyphonic version of it with the nqpoly object. for example
+
+[nqpoly~ 5 myinst param]
+
+this will make a version of myinst that has a maximum of 5 voices, with the creation parameter "param".
+
+sending a list to the first input of nqpoly~ will start one of the voices, and the signal will appear on the first output. sending another list while the first voice is still playing will start the next voice, and it's output will be summed with the first voice and both signals will be heard on the first output. if all of the voices are exausted, the list you supplied will appear on the second output.
+
+there is an example instrument called grain~ which takes a two element list specifying the frequency (in hertz) and the duration (in milliseconds) of the note. on my machine i can just manage to use about 100 voices of this instrument before i start getting pops and clicks. i think that's pretty damned impressive :) it also means that this can be used for granular synthesis as well as simple polyphonic synthesis.
+
+the nqpoly~-test.pd patch shows an example using grain~. for the brave, you can look at the other test patches, and the innards of nqpoly~ and nqwrap~ to see how it works. it's mostly white magic tho :)
+
+oh one last thing... some of the test patches use some the "tgl" object from iemlib... it's just to toggle the metro so it should be easy to change if you don't have/use iemlib. also some of the layout might be strange, i use hacked fonts in my pd.tk...
+
+pix.test.at
diff --git a/nqpoly~/simplenote~.pd b/nqpoly~/simplenote~.pd
new file mode 100644
index 0000000..f64d30d
--- /dev/null
+++ b/nqpoly~/simplenote~.pd
@@ -0,0 +1,25 @@
+#N canvas 67 237 450 357 10;
+#X obj 35 35 inlet;
+#X obj 47 84 unpack f f;
+#X obj 91 143 osc~ 0;
+#X obj 21 139 t b b f;
+#X obj 41 177 delay;
+#X obj 62 253 *~ 0;
+#X msg 40 204 0;
+#X msg 10 206 1;
+#X obj 61 287 outlet~;
+#X obj 182 279 outlet;
+#X text 97 24 takes a list that is a frequency and a duration;
+#X obj 203 53 inlet;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 1 1 3 0;
+#X connect 2 0 5 0;
+#X connect 3 0 7 0;
+#X connect 3 1 4 0;
+#X connect 3 2 4 1;
+#X connect 4 0 6 0;
+#X connect 4 0 9 0;
+#X connect 5 0 8 0;
+#X connect 6 0 5 1;
+#X connect 7 0 5 1;
diff --git a/nqpoly~/tgrain~-test.pd b/nqpoly~/tgrain~-test.pd
new file mode 100644
index 0000000..d93f8e9
--- /dev/null
+++ b/nqpoly~/tgrain~-test.pd
@@ -0,0 +1,96 @@
+#N canvas 22 67 700 625 10;
+#X obj 83 578 dac~;
+#X floatatom 107 388 4 0 0;
+#X floatatom 136 522 4 0 0;
+#X obj 27 308 metro 100;
+#X obj 31 270 tgl 15 0 empty empty empty 8 -8 0 10 -262144 -1 -1 0
+1;
+#X floatatom 78 272 4 0 0;
+#X floatatom 320 515 0 0 0;
+#X obj 98 549 *~ 0.1;
+#X floatatom 354 516 0 0 0;
+#X text 100 369 duration;
+#X text 121 274 frequency of note creation;
+#X text 150 480 change the number of voices here;
+#X text 315 276 pix.test.at;
+#X text 238 443 dropped lists come out here;
+#X obj 89 420 f;
+#X obj 101 460 pack f f f;
+#X obj 276 365 +;
+#X msg 400 269 bang;
+#X obj 402 294 openpanel;
+#N canvas 0 0 450 300 graph2 0;
+#X coords 0 1 88199 -1 200 140 1;
+#X array array100 88200 float 0;
+#X restore 467 438 graph;
+#X obj 321 463 unpack f f f;
+#X floatatom 406 515 0 0 0;
+#X obj 119 335 random;
+#X obj 158 378 +;
+#X floatatom 125 303 5 0 0;
+#N canvas 0 0 450 300 graph4 0;
+#X coords 0 88200 99 0 200 140 1;
+#X array array102 100 float 0;
+#X restore 237 16 graph;
+#N canvas 0 0 450 300 graph5 0;
+#X coords 0 88200 99 0 200 140 1;
+#X array array103 100 float 0;
+#X restore 489 14 graph;
+#X obj 34 78 phasor~ 0;
+#X floatatom 36 40 5 0 0;
+#X obj 104 207 snapshot~;
+#X obj 75 122 *~ 100;
+#X obj 222 218 snapshot~;
+#X obj 51 363 t b b b;
+#X obj 95 500 nqpoly~ 60 tgrain~ array100;
+#X obj 221 182 tabread~ array103;
+#X obj 58 169 tabread~ array102;
+#X floatatom 428 179 5 0 0;
+#X msg 562 233 \; array103 const \$1;
+#X floatatom 475 184 5 0 0;
+#X msg 428 235 \; array102 const \$1;
+#X obj 429 213 * 1;
+#X floatatom 560 172 5 0 0;
+#X floatatom 607 177 5 0 0;
+#X obj 561 206 * 1;
+#X obj 400 363 soundfiler;
+#X msg 402 316 read -resize \$1 array100;
+#X connect 1 0 14 1;
+#X connect 2 0 7 1;
+#X connect 3 0 32 0;
+#X connect 4 0 3 0;
+#X connect 5 0 3 1;
+#X connect 7 0 0 0;
+#X connect 7 0 0 1;
+#X connect 14 0 15 0;
+#X connect 15 0 33 0;
+#X connect 16 0 15 2;
+#X connect 17 0 18 0;
+#X connect 18 0 45 0;
+#X connect 20 0 6 0;
+#X connect 20 1 8 0;
+#X connect 20 2 21 0;
+#X connect 22 0 23 0;
+#X connect 23 0 15 1;
+#X connect 24 0 22 1;
+#X connect 27 0 30 0;
+#X connect 28 0 27 0;
+#X connect 29 0 16 0;
+#X connect 29 0 23 1;
+#X connect 30 0 34 0;
+#X connect 30 0 35 0;
+#X connect 31 0 16 1;
+#X connect 32 0 14 0;
+#X connect 32 1 22 0;
+#X connect 32 1 29 0;
+#X connect 32 2 31 0;
+#X connect 33 0 7 0;
+#X connect 34 0 31 0;
+#X connect 35 0 29 0;
+#X connect 36 0 40 0;
+#X connect 38 0 40 1;
+#X connect 40 0 39 0;
+#X connect 41 0 43 0;
+#X connect 42 0 43 1;
+#X connect 43 0 37 0;
+#X connect 45 0 44 0;
diff --git a/nqpoly~/tgrain~.pd b/nqpoly~/tgrain~.pd
new file mode 100644
index 0000000..581a394
--- /dev/null
+++ b/nqpoly~/tgrain~.pd
@@ -0,0 +1,47 @@
+#N canvas 140 31 477 461 10;
+#X obj 16 8 inlet;
+#X obj 22 413 outlet~;
+#X obj 207 398 outlet;
+#X obj 67 179 delay;
+#X obj 71 324 *~;
+#X obj 220 14 inlet;
+#X obj 172 240 tabread4~ \$1;
+#X obj 205 186 line~;
+#X obj 207 117 f;
+#X obj 208 150 pack f f;
+#X obj 112 46 unpack f f f;
+#X obj 107 75 t b f;
+#X obj 272 102 mstohz;
+#X obj 277 153 osc~ 0;
+#X obj 277 192 -~ 1;
+#X obj 273 237 /~ -2;
+#X obj 97 378 *~ 0;
+#X obj 363 106 0;
+#X obj 116 333 0;
+#X obj 144 337 1;
+#X connect 0 0 10 0;
+#X connect 3 0 2 0;
+#X connect 3 0 18 0;
+#X connect 4 0 16 0;
+#X connect 6 0 4 1;
+#X connect 7 0 6 0;
+#X connect 8 0 9 0;
+#X connect 9 0 7 0;
+#X connect 10 0 11 0;
+#X connect 10 1 7 0;
+#X connect 10 2 8 1;
+#X connect 11 0 3 0;
+#X connect 11 0 8 0;
+#X connect 11 0 17 0;
+#X connect 11 0 19 0;
+#X connect 11 1 3 1;
+#X connect 11 1 9 1;
+#X connect 11 1 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 4 0;
+#X connect 16 0 1 0;
+#X connect 17 0 13 1;
+#X connect 18 0 16 1;
+#X connect 19 0 16 1;