Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • jwilkes/purr-data
  • aggraef/purr-data
  • samthursfield/purr-data
  • prakhar/purr-data
  • yadu05/purr-data
  • NegiAkash890/purr-data
  • prateekpardeshi/purr-data
  • Shruti3004/purr-data
  • hidimpu/purr-data
  • Atseosi/purr-data
  • piyushjasaiwal/purr-data
  • deveshprasad/purr-data
  • skm_7/purr-data
  • sankt/purr-data
  • ashim_tom/purr-data
  • dineshsoni02/purr-data
  • chaitanya1-coder/purr-data
  • Nitish0007/purr-data
  • nitin/purr-data
  • shuvam09/purr-data
  • gabrielabittencourt/purr-data
  • sivasai/purr-data
  • flachyjoe/purr-data
  • ishankaler/purr-data
  • prateek/purr-data
  • RukshanJS/purr-data
  • rajatshrm648/purr-data
  • Srashti/purr-data
  • Paarth/purr-data
  • AniruddhaGawali/purr-data
  • brittneyjuliet/purr-data
  • prakharagarwal1/purr-data
  • Shreyanshpaliwalcmsmn/purr-data
  • k_amrut/purr-data
  • AyushAnand/purr-data
  • Va16hav07/purr-data
36 results
Show changes
Showing
with 1194 additions and 0 deletions
#N canvas 0 0 257 308 10;
#X obj 65 102 zl len;
#X obj 65 48 inlet;
#X obj 65 74 t a a;
#X obj 65 187 matrix;
#X msg 65 131 matrix \$1 1;
#X obj 65 158 zl join;
#X obj 65 216 outlet;
#X text 132 218 matrix n 1;
#X text 121 48 liste n;
#X connect 0 0 4 0;
#X connect 1 0 2 0;
#X connect 2 0 0 0;
#X connect 2 1 5 1;
#X connect 3 0 6 0;
#X connect 4 0 5 0;
#X connect 5 0 3 0;
#N canvas 64 215 518 470 10;
#X floatatom 85 92 5 -20 127 0 - - -;
#X text 86 74 data;
#X obj 85 171 t f f;
#X msg 92 117 0;
#X msg 120 117 127;
#X obj 85 251 time_roll;
#X floatatom 110 229 5 0 0 0 - - -;
#X msg 153 117 64;
#X text 361 361 la Kitchen;
#X text 361 378 Charles Verron;
#X text 360 345 2004_03_22;
#X text 361 361 la Kitchen;
#X text 361 378 Charles Verron;
#X text 360 345 2004_03_22;
#X text 361 361 la Kitchen;
#X text 361 378 Charles Verron;
#X text 360 345 2004_03_22;
#X floatatom 239 146 5 0 0 0 - - -;
#X text 287 144 size: n (n>=2);
#X text 51 32 max_n return the maximum from the last n (n>1) values
;
#X obj 110 200 max_n 20;
#X connect 0 0 2 0;
#X connect 2 0 5 0;
#X connect 2 1 20 0;
#X connect 3 0 2 0;
#X connect 4 0 2 0;
#X connect 7 0 2 0;
#X connect 17 0 20 1;
#X connect 20 0 6 0;
#N canvas 0 0 462 312 10;
#X obj 64 60 inlet;
#X obj 144 59 inlet;
#X obj 64 179 maximum;
#X obj 64 207 outlet;
#X obj 144 120 max 2;
#X obj 64 149 last_n;
#X obj 160 79 loadbang;
#X obj 160 97 \$1;
#X connect 0 0 5 0;
#X connect 1 0 4 0;
#X connect 2 0 3 0;
#X connect 4 0 5 1;
#X connect 5 0 2 0;
#X connect 6 0 7 0;
#X connect 7 0 4 0;
#N canvas 28 3 711 500 12;
#X obj 88 113 t f b b;
#X obj 74 53 inlet;
#X obj 111 295 outlet;
#X obj 140 174 max;
#X obj 114 174 min;
#X obj 95 201 max;
#X obj 111 228 min;
#X text 177 174 on classe les 2 plus vieux nombres;
#X text 175 191 du plus petit au plus grand;
#X obj 85 141 f;
#X obj 112 141 f;
#X obj 139 141 f;
#X text 197 43 principe du median 3 : classer les 3 dernieres mesures
de la plus petite valeur a la plus grande valeur et renvoyer la 2 ieme
valeur (appelee mediane) de la liste (dans cette liste classee de 3
elements \, 1 est plus petit que la mediane et 1 est plus grand);
#X text 332 300 Francis Bras;
#X text 334 329 interface-z.com;
#X connect 0 0 9 0;
#X connect 0 1 10 0;
#X connect 0 2 11 0;
#X connect 1 0 0 0;
#X connect 3 0 6 1;
#X connect 4 0 5 1;
#X connect 5 0 6 0;
#X connect 6 0 2 0;
#X connect 9 0 5 0;
#X connect 9 0 10 1;
#X connect 10 0 4 0;
#X connect 10 0 3 0;
#X connect 10 0 11 1;
#X connect 11 0 4 1;
#X connect 11 0 3 1;
#N canvas 0 0 711 500 12;
#X obj 47 19 inlet;
#X obj 133 172 max;
#X obj 107 172 min;
#X obj 81 312 min;
#X obj 34 100 t f b b b b;
#X obj 116 208 max;
#X obj 78 236 min;
#X obj 92 279 max;
#X obj 134 236 max;
#X obj 106 236 min;
#X obj 120 279 max;
#X obj 109 312 min;
#X obj 96 379 min;
#X obj 76 345 max;
#X obj 95 422 outlet;
#X text 137 312 max;
#X text 54 312 min;
#X text 175 315 les 2 extremes n ont plus d influence;
#X obj 24 138 f;
#X obj 51 138 f;
#X obj 77 138 f;
#X obj 103 138 f;
#X obj 130 138 f;
#X text 474 315 donc on ne les calcule pas;
#X text 138 300 les 4 plus anciens classes;
#X text 165 236 les 3 plus anciens classes du petit au grand;
#X text 170 172 les deux plus anciens classes;
#X text 145 351 il reste a tester la mesure la plus recente pour garder
au final la valeur du milieu.;
#X text 221 42 principe du median 5 : classer les 5 dernieres mesures
de la plus petite valeur a la plus grande valeur et renvoyer la 3 ieme
valeur (appelee mediane) de la liste (dans cette liste classee de 5
elements \, 2 sont plus petits que la mediane et 2 sont plus grands)
;
#X text 470 426 Francis Bras;
#X text 472 455 interface-z.com;
#X connect 0 0 4 0;
#X connect 1 0 9 1;
#X connect 1 0 8 1;
#X connect 2 0 6 1;
#X connect 2 0 5 1;
#X connect 3 0 13 1;
#X connect 4 0 18 0;
#X connect 4 1 19 0;
#X connect 4 2 20 0;
#X connect 4 3 21 0;
#X connect 4 4 22 0;
#X connect 5 0 9 0;
#X connect 5 0 8 0;
#X connect 6 0 7 1;
#X connect 7 0 3 0;
#X connect 7 0 10 0;
#X connect 8 0 11 1;
#X connect 9 0 3 1;
#X connect 9 0 10 1;
#X connect 10 0 11 0;
#X connect 11 0 12 1;
#X connect 12 0 14 0;
#X connect 13 0 12 0;
#X connect 18 0 13 0;
#X connect 18 0 19 1;
#X connect 19 0 7 0;
#X connect 19 0 20 1;
#X connect 20 0 5 0;
#X connect 20 0 6 0;
#X connect 20 0 21 1;
#X connect 21 0 2 0;
#X connect 21 0 1 0;
#X connect 21 0 22 1;
#X connect 22 0 2 1;
#X connect 22 0 1 1;
#N canvas 0 0 784 546 12;
#X obj 36 18 inlet;
#X obj 166 178 max;
#X obj 139 178 min;
#X obj 113 289 min;
#X obj 125 205 max;
#X obj 113 235 min;
#X obj 97 263 max;
#X obj 168 235 max;
#X obj 140 235 min;
#X obj 152 263 max;
#X obj 141 289 min;
#X obj 74 319 max;
#X obj 103 471 outlet;
#X obj 14 98 t f b b b b b b;
#X obj 85 289 min;
#X obj 169 289 max;
#X obj 86 351 min;
#X obj 128 319 max;
#X obj 114 351 min;
#X obj 157 319 max;
#X obj 142 351 min;
#X text 55 351 min;
#X text 173 351 max;
#X obj 103 381 max;
#X obj 85 410 min;
#X obj 132 381 max;
#X obj 113 410 min;
#X obj 73 446 max;
#X obj 101 446 min;
#X obj 0 132 f;
#X obj 27 132 f;
#X obj 54 132 f;
#X obj 81 132 f;
#X obj 108 132 f;
#X obj 135 132 f;
#X obj 162 132 f;
#X text 197 177 les deux plus anciens classes;
#X text 200 234 les 3 plus anciens classes du petit au grand;
#X text 202 289 les 4 plus anciens classes du petit au grand;
#X text 142 410 max1;
#X text 178 410 max2;
#X text 18 410 min1;
#X text 53 410 min2;
#X text 211 351 les 5 plus anciens classes du petit au grand;
#X text 217 411 les 6 plus anciens classes du petit au grand;
#X text 184 372 les 2 extremes n ont plus d influence donc on ne cherche
pas a les identifier;
#X text 184 426 les 4 extremes n ont plus d influence donc on ne calcule
pas leur position relative et on ne les identifie pas;
#X text 264 33 principe du median 7 : classer les 7 dernieres mesures
de la plus petite valeur a la plus grande valeur et renvoyer la 4 ieme
valeur (appelee mediane) de la liste (dans cette liste classee de 7
elements \, 3 sont plus petits que la mediane et 3 sont plus grands)
;
#X text 535 463 Francis Bras;
#X text 537 492 interface-z.com;
#X connect 0 0 13 0;
#X connect 1 0 8 1;
#X connect 1 0 7 1;
#X connect 2 0 5 1;
#X connect 2 0 4 1;
#X connect 3 0 16 1;
#X connect 3 0 17 1;
#X connect 4 0 8 0;
#X connect 4 0 7 0;
#X connect 5 0 6 1;
#X connect 5 0 14 1;
#X connect 6 0 3 0;
#X connect 6 0 9 0;
#X connect 7 0 10 1;
#X connect 7 0 15 1;
#X connect 8 0 3 1;
#X connect 8 0 9 1;
#X connect 9 0 10 0;
#X connect 9 0 15 0;
#X connect 10 0 18 1;
#X connect 10 0 19 1;
#X connect 11 0 16 0;
#X connect 11 0 17 0;
#X connect 13 0 29 0;
#X connect 13 1 30 0;
#X connect 13 2 31 0;
#X connect 13 3 32 0;
#X connect 13 4 33 0;
#X connect 13 5 34 0;
#X connect 13 6 35 0;
#X connect 14 0 11 1;
#X connect 15 0 20 1;
#X connect 16 0 23 1;
#X connect 17 0 18 0;
#X connect 17 0 19 0;
#X connect 18 0 24 1;
#X connect 18 0 25 1;
#X connect 19 0 20 0;
#X connect 20 0 26 1;
#X connect 23 0 24 0;
#X connect 23 0 25 0;
#X connect 24 0 27 1;
#X connect 25 0 26 0;
#X connect 26 0 28 1;
#X connect 27 0 28 0;
#X connect 28 0 12 0;
#X connect 29 0 27 0;
#X connect 29 0 30 1;
#X connect 30 0 23 0;
#X connect 30 0 31 1;
#X connect 31 0 11 0;
#X connect 31 0 32 1;
#X connect 32 0 6 0;
#X connect 32 0 14 0;
#X connect 32 0 33 1;
#X connect 33 0 4 0;
#X connect 33 0 5 0;
#X connect 33 0 34 1;
#X connect 34 0 2 0;
#X connect 34 0 1 0;
#X connect 34 0 35 1;
#X connect 35 0 2 1;
#X connect 35 0 1 1;
#N canvas 397 193 522 474 10;
#X floatatom 85 92 5 0 127 0 - - -;
#X text 86 74 data;
#X obj 85 171 t f f;
#X msg 92 117 0;
#X msg 120 117 127;
#X obj 85 251 time_roll;
#X floatatom 110 229 5 0 0 0 - - -;
#X msg 153 117 64;
#X text 361 361 la Kitchen;
#X text 361 378 Charles Verron;
#X text 360 345 2004_03_22;
#X text 361 361 la Kitchen;
#X text 361 378 Charles Verron;
#X text 360 345 2004_03_22;
#X text 361 361 la Kitchen;
#X text 361 378 Charles Verron;
#X text 360 345 2004_03_22;
#X floatatom 239 146 5 2 150 0 - - -;
#X text 287 144 size: n (n>=2);
#X text 51 32 min_n return the minimum from the last n (n>1) values
;
#X obj 110 200 min_n 20;
#X connect 0 0 2 0;
#X connect 2 0 5 0;
#X connect 2 1 20 0;
#X connect 3 0 2 0;
#X connect 4 0 2 0;
#X connect 7 0 2 0;
#X connect 17 0 20 1;
#X connect 20 0 6 0;
#N canvas 26 291 365 247 10;
#X obj 64 175 outlet;
#X obj 64 147 minimum;
#X obj 64 29 inlet;
#X obj 144 28 inlet;
#X obj 144 89 max 2;
#X obj 64 118 last_n;
#X obj 160 48 loadbang;
#X obj 160 66 \$1;
#X connect 1 0 0 0;
#X connect 2 0 5 0;
#X connect 3 0 4 0;
#X connect 4 0 5 1;
#X connect 5 0 1 0;
#X connect 6 0 7 0;
#X connect 7 0 4 0;
#N canvas 281 175 684 672 10;
#X obj 26 9 amplitude_n;
#X obj 26 29 catch_extremum;
#X obj 26 49 catch_extremum2;
#X obj 26 69 change_n;
#X obj 26 89 count_n;
#X obj 26 382 debounce_b;
#X obj 26 362 debounce;
#X obj 25 248 fir_filter;
#X obj 25 268 fir_hip_n;
#X obj 25 288 fir_mean_n;
#X obj 25 309 iir_hip;
#X obj 25 329 iir_lop;
#X obj 26 109 last_n;
#X obj 27 412 last_n_matrix;
#X obj 27 433 list2matcol;
#X obj 26 129 max_n;
#X obj 26 149 min_n;
#X obj 26 189 one_n;
#X obj 26 209 seuil_n;
#X obj 26 480 time_roll;
#X obj 26 169 zero_n;
#X text 239 18 This collection of abstractions is dedicated to data
treatment using pure data. It provide basic objects for constant rate
data flow analisys.;
#X text 243 75 Zexy and cyclone are neaded;
#X text 239 100 this abstractions was made by charles Verron for La
kitchen (march 2004).;
#X text 241 144 Questions / comments / sugestions / ... -> cyrille.henry@la-kitchen.fr
;
#N canvas 398 394 499 292 10;
#X floatatom 129 140 5 0 0 0 - - -;
#X floatatom 86 192 5 0 0 0 - - -;
#X msg 86 108 0;
#X msg 117 108 1;
#X obj 86 166 one_n 5;
#X text 175 137 size: n;
#X text 54 238 see:;
#X text 85 85 input : boolean (0 or 1);
#X text 350 235 la Kitchen;
#X text 349 252 Charles Verron;
#X obj 170 238 change_n;
#X text 39 41 non-zeros \, else 0;
#X text 39 23 This abstraction returns 1 if the last n datas were;
#X obj 101 238 zero_n;
#X text 350 219 2004_03_18;
#X connect 0 0 4 1;
#X connect 2 0 4 0;
#X connect 3 0 4 0;
#X connect 4 0 1 0;
#N canvas 249 28 310 287 10;
#X obj 63 130 mtx_mean;
#X obj 154 47 inlet;
#X obj 63 46 inlet;
#X obj 63 189 outlet;
#X obj 63 74 != 0;
#X obj 63 100 last_n_matrix \$1;
#X obj 63 158 == 1;
#X connect 0 0 6 0;
#X connect 1 0 5 1;
#X connect 2 0 4 0;
#X connect 4 0 5 0;
#X connect 5 0 0 0;
#X connect 6 0 3 0;
This collection of abstraction is dedicated for data treatment using pure data.
It provide basic object for constant rate data flow treatement.
They are designed to be used with La kitchen sensors interfaces (Kroonde or Toaster).
but can feet other needs.
a help file is available for each object.
You nead zexy and cyclone to be able to load this abstractions.
This collection of object were made by Charles Verron for La kitchen (march 2004)
question about it : cyrille.henry@la-kitchen.fr
#N canvas 129 149 461 350 10;
#X floatatom 91 133 5 0 0 0 - - -;
#X floatatom 124 164 5 0 0 0 - - -;
#X floatatom 158 190 5 0 0 0 - - -;
#X floatatom 91 251 5 0 0 0 - - -;
#X text 82 108 input data;
#X text 178 173 threshold;
#X text 134 144 gap between samples: n;
#X text 36 64 threshold value;
#X text 35 43 the current sample and the sample n before is up to the
;
#X text 313 285 la Kitchen;
#X text 313 302 Charles Verron;
#X text 312 270 2004_03_18;
#X text 34 24 This abstraction returns 1 if the difference between
;
#X obj 91 217 seuil_n 5 10;
#X connect 0 0 13 0;
#X connect 1 0 13 1;
#X connect 2 0 13 2;
#X connect 13 0 3 0;
#X coords 0 0 0.00220264 0.00328947 200 140 1;
#N canvas 514 2 301 387 10;
#X obj 76 39 inlet;
#X obj 27 39 inlet;
#X text 19 16 flux donnees;
#X obj 107 61 inlet;
#X obj 82 202 -;
#X text 149 62 valeur seuil;
#X obj 82 233 abs;
#X obj 82 288 outlet;
#X obj 27 160 zl ecils 1;
#X text 118 34 ecart des point a comparer;
#X obj 27 131 last_n \$1;
#X obj 82 261 >= \$2;
#X obj 27 100 f;
#X obj 27 70 t f b f;
#X connect 0 0 10 1;
#X connect 1 0 13 0;
#X connect 3 0 11 1;
#X connect 4 0 6 0;
#X connect 6 0 11 0;
#X connect 8 1 4 0;
#X connect 10 0 8 0;
#X connect 11 0 7 0;
#X connect 12 0 10 0;
#X connect 13 0 12 1;
#X connect 13 1 12 0;
#X connect 13 2 4 1;
#N canvas 0 0 243 167 10;
#X obj 21 73 f;
#X obj 20 52 t f b;
#X obj 42 114 f;
#X obj 41 93 t f b;
#X obj 20 3 inlet;
#X obj 6 23 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
-1 -1 0 1;
#X obj 23 23 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
-1 -1 0 1;
#X obj 40 23 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
-1 -1 0 1;
#X obj 79 74 f;
#X obj 78 53 t f b;
#X obj 100 115 f;
#X obj 99 94 t f b;
#X obj 57 23 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
-1 -1 0 1;
#X obj 74 23 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
-1 -1 0 1;
#X obj 137 75 f;
#X obj 136 54 t f b;
#X obj 158 116 f;
#X obj 157 95 t f b;
#X obj 91 23 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
-1 -1 0 1;
#X obj 108 23 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
-1 -1 0 1;
#X obj 195 76 f;
#X obj 194 55 t f b;
#X obj 216 117 f;
#X obj 215 96 t f b;
#X obj 125 23 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
-1 -1 0 1;
#X obj 142 23 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
-1 -1 0 1;
#X obj 251 76 f;
#X obj 250 55 t f b;
#X obj 272 117 f;
#X obj 271 96 t f b;
#X obj 159 23 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
-1 -1 0 1;
#X obj 176 23 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
-1 -1 0 1;
#X obj 309 77 f;
#X obj 308 56 t f b;
#X obj 330 118 f;
#X obj 329 97 t f b;
#X obj 193 23 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
-1 -1 0 1;
#X obj 210 23 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
-1 -1 0 1;
#X obj 70 3 inlet;
#X obj 20 28 + \$1;
#X text 110 3 <-- offset;
#X connect 0 0 3 0;
#X connect 0 0 6 0;
#X connect 1 0 0 1;
#X connect 1 0 5 0;
#X connect 1 1 0 0;
#X connect 2 0 7 0;
#X connect 2 0 9 0;
#X connect 3 0 2 1;
#X connect 3 1 2 0;
#X connect 4 0 39 0;
#X connect 8 0 11 0;
#X connect 8 0 12 0;
#X connect 9 0 8 1;
#X connect 9 1 8 0;
#X connect 10 0 13 0;
#X connect 10 0 15 0;
#X connect 11 0 10 1;
#X connect 11 1 10 0;
#X connect 14 0 17 0;
#X connect 14 0 18 0;
#X connect 15 0 14 1;
#X connect 15 1 14 0;
#X connect 16 0 19 0;
#X connect 16 0 21 0;
#X connect 17 0 16 1;
#X connect 17 1 16 0;
#X connect 20 0 23 0;
#X connect 20 0 24 0;
#X connect 21 0 20 1;
#X connect 21 1 20 0;
#X connect 22 0 25 0;
#X connect 22 0 27 0;
#X connect 23 0 22 1;
#X connect 23 1 22 0;
#X connect 26 0 29 0;
#X connect 26 0 30 0;
#X connect 27 0 26 1;
#X connect 27 1 26 0;
#X connect 28 0 31 0;
#X connect 28 0 33 0;
#X connect 29 0 28 1;
#X connect 29 1 28 0;
#X connect 32 0 35 0;
#X connect 32 0 36 0;
#X connect 33 0 32 1;
#X connect 33 1 32 0;
#X connect 34 0 37 0;
#X connect 35 0 34 1;
#X connect 35 1 34 0;
#X connect 38 0 39 1;
#X connect 39 0 1 0;
#X coords 0 0 1 1 204 140 1;
#N canvas 576 391 468 303 10;
#X floatatom 138 140 5 0 0 0 - - -;
#X floatatom 95 192 5 0 0 0 - - -;
#X obj 95 166 zero_n 5;
#X msg 95 108 0;
#X msg 126 108 1;
#X text 184 137 size: n;
#X text 54 238 see:;
#X obj 170 237 change_n;
#X obj 101 237 one_n;
#X text 46 19 This abstraction returns 1 if the last n datas were 0
\,;
#X text 46 41 else 0;
#X text 100 85 input : boolean (0 or 1);
#X text 338 235 la Kitchen;
#X text 338 252 Charles Verron;
#X text 337 220 2004_03_18;
#X connect 0 0 2 1;
#X connect 2 0 1 0;
#X connect 3 0 2 0;
#X connect 4 0 2 0;
#N canvas 212 8 302 279 10;
#X obj 63 130 mtx_mean;
#X obj 154 47 inlet;
#X obj 63 46 inlet;
#X obj 63 189 outlet;
#X obj 63 158 == 0;
#X obj 63 74 != 0;
#X obj 63 100 last_n_matrix \$1;
#X connect 0 0 4 0;
#X connect 1 0 6 1;
#X connect 2 0 5 0;
#X connect 4 0 3 0;
#X connect 5 0 6 0;
#X connect 6 0 0 0;
#==============================================================================#
#
# Centralized build system for "abstractions".
#
# see for instructions: http://puredata.org/docs/developer/build
# <hans@at.or.at>
#
#==============================================================================#
CWD := $(shell pwd)
# these are designed to be overridden by the packages/Makefile
cvs_root_dir := $(shell cd $(CWD)/.. && pwd)
DESTDIR = $(CWD)/build/
BUILDLAYOUT_DIR = $(cvs_root_dir)/packages
include $(BUILDLAYOUT_DIR)/Makefile.buildlayout
#==============================================================================#
#
# OVERARCHING BUILD TARGETS
#
#==============================================================================#
# if your library isn't included in LIB_TARGETS, it won't be built with
# Pd-extended.
#
# WARNING! this MUST be all on one line because the automatic package
# building scripts rely on it being that way.
LIB_TARGETS = controctopus jmmmp la-kitchen list-abs memento nsend parazit pixeltango purepd rradical rtc-lib timestretch memento-p sfruit pd-wavelet
# in case anything needs to be compiled or processed somehow before installing
all:
# clean up after everything is installed
final_setup:
chmod -R ugo-w $(pddocdir)
install: all $(objectsdir) $(helpdir) $(manualsdir) $(examplesdir) \
$(patsubst %, %_install,$(LIB_TARGETS))
@echo " "
@echo "abstractions install succeeded!"
#==============================================================================#
#
# PROJECT TARGETS
#
#==============================================================================#
#-------------------------------------------------------------------------------
# controctopus
CONTROCTOPUS_NAME = controctopus
controctopus_install:
install -d $(DESTDIR)$(objectsdir)/$(CONTROCTOPUS_NAME)
install -p $(abstractions_src)/sfruit/controctopus/*.pd \
$(DESTDIR)$(objectsdir)/$(CONTROCTOPUS_NAME)
$(scripts_src)/generate-libdir-metafile.sh $(DESTDIR)$(objectsdir) $(CONTROCTOPUS_NAME) \
--author "Luke Iannini" \
--license "GNU GPL" \
--description "objects for learning and mapping midi and OSC controllers to pdpatches with scaling and parameter discovery - requires memento-p"
#-------------------------------------------------------------------------------
# ds-abs
ds-abs_NAME = ds-abs
ds-abs_install:
install -d $(DESTDIR)$(objectsdir)/$(ds-abs_NAME)
install -p $(abstractions_src)/sfruit/ds-abs/*.pd $(DESTDIR)$(objectsdir)/$(ds-abs_NAME)
install -p $(abstractions_src)/sfruit/ds-abs/help/*-help.pd \
$(DESTDIR)$(objectsdir)/$(ds-abs_NAME)
$(scripts_src)/generate-libdir-metafile.sh $(DESTDIR)$(objectsdir) $(ds-abs_NAME) \
--author "Luke Iannini" \
--description "" \
--license "GNU GPL" \
--version "a comprehensive collection of objects for working with data structures"
#------------------------------------------------------------------------------#
# JMMMP
JMMMP_NAME = jmmmp
jmmmp_install:
install -d $(DESTDIR)$(objectsdir)/$(JMMMP_NAME)
install -d $(DESTDIR)$(objectsdir)/$(JMMMP_NAME)/examples
install -p $(abstractions_src)/$(JMMMP_NAME)/*.* $(DESTDIR)$(objectsdir)/$(JMMMP_NAME)
install -p $(abstractions_src)/$(JMMMP_NAME)/examples/*.* \
$(DESTDIR)$(objectsdir)/$(JMMMP_NAME)/examples
#------------------------------------------------------------------------------#
# LIST-ABS
list-abs:
make -C $(abstractions_src)/footils/list-abs
list-abs_install:
make -C $(abstractions_src)/footils/list-abs DESTDIR="$(DESTDIR)" objectsdir="$(objectsdir)" install
list-abs_clean:
make -C $(abstractions_src)/footils/list-abs clean
#-------------------------------------------------------------------------------
# la-kitchen
LA-KITCHEN_NAME = la-kitchen
la-kitchen_install:
install -d $(DESTDIR)$(objectsdir)/$(LA-KITCHEN_NAME)
install -p $(abstractions_src)/La-kitchen/*.pd \
$(DESTDIR)$(objectsdir)/$(LA-KITCHEN_NAME)
$(scripts_src)/generate-libdir-metafile.sh $(DESTDIR)$(objectsdir) $(LA-KITCHEN_NAME) \
--author "Charles Verron" \
--description "a collection of objects working with sensors"
install -p $(abstractions_src)/La-kitchen/*-help.pd \
$(DESTDIR)$(objectsdir)/$(LA-KITCHEN_NAME)
# install -d $(DESTDIR)$(manualsdir)/$(LA-KITCHEN_NAME)
# install -p $(abstractions_src)/La-kitchen/doc/*.* \
# $(DESTDIR)$(manualsdir)/$(LA-KITCHEN_NAME)
install -p $(abstractions_src)/La-kitchen/readme.txt \
$(DESTDIR)$(objectsdir)/$(LA_KITCHEN_NAME)/README.txt
#-------------------------------------------------------------------------------
# memento
MEMENTO_NAME = memento
memento_install:
install -d $(DESTDIR)$(objectsdir)/$(MEMENTO_NAME)
install -p $(abstractions_src)/rradical/memento/*.pd \
$(DESTDIR)$(objectsdir)/$(MEMENTO_NAME)
$(scripts_src)/generate-libdir-metafile.sh $(DESTDIR)$(objectsdir) $(MEMENTO_NAME) \
--author "Frank Barknecht" \
--license "GNU GPL" \
--description "a collection of objects for managing state saving"
install -d $(DESTDIR)$(objectsdir)/$(MEMENTO_NAME)/manual
install -p $(abstractions_src)/rradical/memento/tutorial/*.* \
$(DESTDIR)$(objectsdir)/$(MEMENTO_NAME)/manual
install -d $(DESTDIR)$(examplesdir)/$(MEMENTO_NAME)
install -p $(abstractions_src)/rradical/memento/examples/*.* \
$(DESTDIR)$(examplesdir)/$(MEMENTO_NAME)
install -d $(DESTDIR)$(objectsdir)/$(MEMENTO_NAME)/examples
install -p $(abstractions_src)/rradical/memento/examples/*.* \
$(DESTDIR)$(objectsdir)/$(MEMENTO_NAME)/examples
#-------------------------------------------------------------------------------
# memento-p
MEMENTO-P_NAME = memento-p
memento-p_install:
install -d $(DESTDIR)$(objectsdir)/$(MEMENTO-P_NAME)
install -p $(abstractions_src)/sfruit/memento-p/*.pd \
$(DESTDIR)$(objectsdir)/$(MEMENTO-P_NAME)
$(scripts_src)/generate-libdir-metafile.sh $(DESTDIR)$(objectsdir) $(MEMENTO-P_NAME) \
--author "Luke Iannini" \
--license "GNU GPL" \
--description "an addon for Frank Barknecht's Memento adding local-state saving and support for Controctopus (a controller lib)"
#-------------------------------------------------------------------------------
# nsend
NSEND_NAME = nsend
nsend_install:
install -d $(DESTDIR)$(objectsdir)/$(NSEND_NAME)
install -p $(shell ls -1 $(abstractions_src)/sfruit/nsend/*.pd | \
grep -v '\-help.pd') $(DESTDIR)$(objectsdir)/$(NSEND_NAME)
$(scripts_src)/generate-libdir-metafile.sh $(DESTDIR)$(objectsdir) $(NSEND_NAME) \
--author "Luke Iannini" \
--license "GNU GPL" \
--description "multiple-inlet/outlet send and receive"
#-------------------------------------------------------------------------------
# parazit
parazit_install:
install -d $(DESTDIR)$(objectsdir)
install -p $(abstractions_src)/parazit/parazit.pd $(DESTDIR)$(objectsdir)
install -p $(abstractions_src)/parazit/parazit-help.pd $(DESTDIR)$(objectsdir)
#-------------------------------------------------------------------------------
# mtl
MTL_NAME = mtl
mtl_install:
install -d $(DESTDIR)$(objectsdir)/$(MTL_NAME)
$(scripts_src)/generate-libdir-metafile.sh $(DESTDIR)$(objectsdir) $(MTL_NAME) \
--author "Thomas O Fredericks and 11h11" \
--license "If you use and die, it's not our fault" \
--description "(Pure Data) Montreal Abstractions"
install -p $(shell ls -1 $(abstractions_src)/$(MTL_NAME)/*.pd | \
grep -v '\-help.pd') $(DESTDIR)$(objectsdir)/$(MTL_NAME)
install -d $(DESTDIR)$(helpdir)/$(MTL_NAME)
install -p $(abstractions_src)/$(MTL_NAME)/*-help.pd \
$(DESTDIR)$(helpdir)/$(MTL_NAME)
install -p $(abstractions_src)/$(MTL_NAME)/*-help.pd \
$(DESTDIR)$(objectsdir)/$(MTL_NAME)
install -p $(abstractions_src)/$(MTL_NAME)/browser.pd \
$(DESTDIR)$(helpdir)/$(MTL_NAME)
# install -p $(abstractions_src)/$(MTL_NAME)/1.mtlBrowser.pd \
# $(DESTDIR)$(helpdir)/$(MTL_NAME)
install -p $(abstractions_src)/$(MTL_NAME)/*.txt \
$(DESTDIR)$(objectsdir)/$(MTL_NAME)
install -p $(abstractions_src)/$(MTL_NAME)/*.txt \
$(DESTDIR)$(helpdir)/$(MTL_NAME)
install -d $(DESTDIR)$(examplesdir)/$(MTL_NAME)
install -p $(abstractions_src)/$(MTL_NAME)/examples/*.pd \
$(DESTDIR)$(examplesdir)/$(MTL_NAME)
#-------------------------------------------------------------------------------
# pdsvn
PDSVN_NAME = pdsvn
pdsvn_install:
install -d $(DESTDIR)$(objectsdir)/$(PDSVN_NAME)
install -p $(shell ls -1 $(abstractions_src)/sfruit/pdsvn/*.pd | \
grep -v '\-help.pd') $(DESTDIR)$(objectsdir)/$(PDSVN_NAME)
$(scripts_src)/generate-libdir-metafile.sh $(DESTDIR)$(objectsdir) $(PDSVN_NAME) \
--author "Luke Iannini" \
--license "GNU GPL" \
--description "objects for interacting with Subversion from within Pd patches (experimental, but usable)"
install -d $(DESTDIR)$(helpdir)/$(PDSVN_NAME)
install -p $(abstractions_src)/sfruit/pdsvn/*-help.pd \
$(DESTDIR)$(helpdir)/$(PDSVN_NAME)
#-------------------------------------------------------------------------------
# pixeltango
PIXELTANGO_NAME = pixeltango
pixeltango_install:
install -d $(DESTDIR)$(objectsdir)/$(PIXELTANGO_NAME)
install -p $(abstractions_src)/pixelTANGO/abstractions/*.pd \
$(DESTDIR)$(objectsdir)/$(PIXELTANGO_NAME)
install -d $(DESTDIR)$(objectsdir)/$(PIXELTANGO_NAME)/fx
install -p $(abstractions_src)/pixelTANGO/abstractions/fx/*.pd \
$(DESTDIR)$(objectsdir)/$(PIXELTANGO_NAME)/fx
$(scripts_src)/generate-libdir-metafile.sh $(DESTDIR)$(objectsdir) $(PIXELTANGO_NAME) \
--author "Ben Bogart" \
--license "GNU GPL" \
--version "0.3.4" \
--description "objects for creating visuals in a live performance setting"
install -p $(abstractions_src)/pixelTANGO/help/*.* \
$(DESTDIR)$(objectsdir)/$(PIXELTANGO_NAME)
install -d $(DESTDIR)$(examplesdir)/$(PIXELTANGO_NAME)
install -p $(abstractions_src)/pixelTANGO/Example-Patches/*.* \
$(DESTDIR)$(examplesdir)/$(PIXELTANGO_NAME)
install -d $(DESTDIR)$(objectsdir)/$(PIXELTANGO_NAME)/manual
install -p $(abstractions_src)/pixelTANGO/*.txt \
$(DESTDIR)$(objectsdir)/$(PIXELTANGO_NAME)/manual
install -p $(abstractions_src)/pixelTANGO/dev-notes/*.txt \
$(DESTDIR)$(objectsdir)/$(PIXELTANGO_NAME)/manual
install -d $(DESTDIR)$(objectsdir)/$(PIXELTANGO_NAME)/examples
install -p $(abstractions_src)/pixelTANGO/Example-Patches/*.* \
$(DESTDIR)$(objectsdir)/$(PIXELTANGO_NAME)/examples
pixeltango_clean:
-rm -f -- $(DESTDIR)$(objectsdir)/$(PIXELTANGO_NAME)/fx/*.*
-rmdir -- $(DESTDIR)$(objectsdir)/$(PIXELTANGO_NAME)/fx
-rm -f -- $(DESTDIR)$(objectsdir)/$(PIXELTANGO_NAME)/*.*
-rmdir -- $(DESTDIR)$(objectsdir)/$(PIXELTANGO_NAME)
-rm -f -- $(DESTDIR)$(examplesdir)/$(PIXELTANGO_NAME)/*.*
-rmdir -- $(DESTDIR)$(examplesdir)/$(PIXELTANGO_NAME)
-rm -f -- $(DESTDIR)$(manualsdir)/$(PIXELTANGO_NAME)/*.*
-rmdir -- $(DESTDIR)$(manualsdir)/$(PIXELTANGO_NAME)
#------------------------------------------------------------------------------#
# PUREPD
purepd:
make -C $(abstractions_src)/purepd
purepd_install:
make -C $(abstractions_src)/purepd DESTDIR="$(DESTDIR)" objectsdir="$(objectsdir)" install
purepd_clean:
make -C $(abstractions_src)/purepd clean
#-------------------------------------------------------------------------------
# RRADical
RRADICAL_NAME = rradical
rradical_install:
install -d $(DESTDIR)$(objectsdir)/$(RRADICAL_NAME)
$(scripts_src)/generate-libdir-metafile.sh $(DESTDIR)$(objectsdir) $(RRADICAL_NAME) \
--author "Frank Barknecht" \
--license "GNU GPL"
install -d $(DESTDIR)$(objectsdir)/$(RRADICAL_NAME)
install -p $(shell ls -1 $(abstractions_src)/rradical/control/*.* | \
grep -v '\-help.pd') $(DESTDIR)$(objectsdir)/$(RRADICAL_NAME)
install -p $(shell ls -1 $(abstractions_src)/rradical/effects/*.* | \
grep -v '\-help.pd') $(DESTDIR)$(objectsdir)/$(RRADICAL_NAME)
install -p $(shell ls -1 $(abstractions_src)/rradical/instruments/*.* | \
grep -v '\-help.pd') $(DESTDIR)$(objectsdir)/$(RRADICAL_NAME)
install -p $(shell ls -1 $(abstractions_src)/rradical/stuff/*.* | \
grep -v '\-help.pd') $(DESTDIR)$(objectsdir)/$(RRADICAL_NAME)
install -p $(abstractions_src)/rradical/*/*-help.pd \
$(DESTDIR)$(objectsdir)/$(RRADICAL_NAME)
install -d $(DESTDIR)$(examplesdir)/$(RRADICAL_NAME)
install -p $(abstractions_src)/rradical/usecases/*.* \
$(DESTDIR)$(examplesdir)/$(RRADICAL_NAME)
install -d $(DESTDIR)$(examplesdir)/$(RRADICAL_NAME)/showcase
install -p $(abstractions_src)/rradical/usecases/showcase/*.* \
$(DESTDIR)$(examplesdir)/$(RRADICAL_NAME)/showcase
install -d $(DESTDIR)$(examplesdir)/$(RRADICAL_NAME)/showcase/impl
install -p $(abstractions_src)/rradical/usecases/showcase/impl/*.* \
$(DESTDIR)$(examplesdir)/$(RRADICAL_NAME)/showcase/impl
install -d $(DESTDIR)$(examplesdir)/$(RRADICAL_NAME)/showcase/songs
install -p $(abstractions_src)/rradical/usecases/showcase/songs/*.* \
$(DESTDIR)$(examplesdir)/$(RRADICAL_NAME)/showcase/songs
#-------------------------------------------------------------------------------
# rtc-lib
RTC-LIB_NAME = rtc
rtc-lib_install:
install -d $(DESTDIR)$(objectsdir)/$(RTC-LIB_NAME)
install -p $(abstractions_src)/footils/rtc-lib/rtc/*.pd \
$(DESTDIR)$(objectsdir)/$(RTC-LIB_NAME)
$(scripts_src)/generate-libdir-metafile.sh $(DESTDIR)$(objectsdir) $(RTC-LIB_NAME) \
--author "Karlheinz Essl and Frank Barknecht" \
--license "Pd license" \
--description "Realtime Composition Library for Max ported to Pd"
install -p $(abstractions_src)/footils/rtc-lib/rtc/*-help.pd \
$(abstractions_src)/footils/rtc-lib/rtc/RTC-Overview.pd \
$(DESTDIR)$(objectsdir)/$(RTC-LIB_NAME)
install -d $(DESTDIR)$(objectsdir)/$(RTC-LIB_NAME)/rtc-help
install -p $(abstractions_src)/footils/rtc-lib/rtc/rtc-help/*.pd \
$(DESTDIR)$(objectsdir)/$(RTC-LIB_NAME)/rtc-help
install -d $(DESTDIR)$(objectsdir)/$(RTC-LIB_NAME)/examples
install -p $(abstractions_src)/footils/rtc-lib/rtc/rtc-help/*.pd \
$(DESTDIR)$(objectsdir)/$(RTC-LIB_NAME)/examples
#-------------------------------------------------------------------------------
# sfruit
SFRUIT_NAME = sfruit
sfruit_install:
install -d $(DESTDIR)$(objectsdir)/$(SFRUIT_NAME)
install -p $(abstractions_src)/sfruit/sfruit/*.pd \
$(DESTDIR)$(objectsdir)/$(SFRUIT_NAME)
$(scripts_src)/generate-libdir-metafile.sh $(DESTDIR)$(objectsdir) $(SFRUIT_NAME) \
--author "Luke Iannini" \
--license "GNU GPL" \
--description "a large collection of assorted handy utilites"
#-------------------------------------------------------------------------------
# TIMESTRETCH
TIMESTRETCH_NAME = timestretch
timestretch_install:
install -d $(DESTDIR)$(objectsdir)/$(TIMESTRETCH_NAME)
install -p $(abstractions_src)/timestretch/*.pd $(DESTDIR)$(objectsdir)/$(TIMESTRETCH_NAME)
$(scripts_src)/generate-libdir-metafile.sh $(DESTDIR)$(objectsdir) $(TIMESTRETCH_NAME) \
--author "" \
--description "" \
--license "" \
--version ""
# install -d $(DESTDIR)$(manualsdir)/$(TIMESTRETCH_NAME)
# install -p $(abstractions_src)/timestretch/doc/*.txt \
# $(DESTDIR)$(manualsdir)/$(TIMESTRETCH_NAME)
#-------------------------------------------------------------------------------
# PDWAVELET
PDWAVELET_NAME = pd-wavelet
pd-wavelet_install:
install -d $(DESTDIR)$(objectsdir)/$(PDWAVELET_NAME)
install -p $(abstractions_src)/pd-wavelet/*.pd \
$(DESTDIR)$(objectsdir)/$(PDWAVELET_NAME)
install -p $(abstractions_src)/pd-wavelet/abs/*.pd \
$(DESTDIR)$(objectsdir)/$(PDWAVELET_NAME)
install -p $(abstractions_src)/pd-wavelet/main.pd \
$(DESTDIR)$(objectsdir)/$(PDWAVELET_NAME)
install -p $(abstractions_src)/pd-wavelet/README.txt \
$(DESTDIR)$(objectsdir)/$(PDWAVELET_NAME)
$(scripts_src)/generate-libdir-metafile.sh $(DESTDIR)$(objectsdir) $(PDWAVELET_NAME) \
--author "Raul Diaz Poblete" \
--description "manipulation of audio in the wavelet domain" \
--license "GNU GPL v2" \
--version ""
#==============================================================================#
#
# CLEAN TARGETS
#
#==============================================================================#
# the destination-specific clean targets are in Makefile.buildlayout
clean: install_clean
distclean: clean cruft_clean
test_locations:
@echo "PD_VERSION: $(PD_VERSION)"
@echo "PACKAGE_VERSION: $(PACKAGE_VERSION)"
@echo "CWD $(CWD)"
@echo "DESTDIR $(DESTDIR)"
@echo "PREFIX $(prefix)"
@echo "BINDIR $(bindir)"
@echo "LIBDIR $(libdir)"
@echo "OBJECTSDIR $(objectsdir)"
@echo "PDDOCDIR $(pddocdir)"
@echo "LIBPDDIR $(libpddir)"
@echo "LIBPDBINDIR $(libpdbindir)"
@echo "HELPDIR $(helpdir)"
@echo "MANUALSDIR $(manualsdir)"
@echo "EXAMPLESDIR $(examplesdir)"
Collection of abstractions for Pd
=================================
This is a collection of abstractions for Pd. Pd is a language that is very
low-level. There are several concepts that need a certain amount of work in
order to be implemented. Instead of reimplementing these higher level concepts
again and again, this collection of abstractions try to establish a layer of
Pd abstractions that are reusable libraries that can be shared by Pd users.
What kind of abstractions?
==========================
One of the problems with organizing all this is the vague definition of
"abstraction" and "external". "application" and "object" are much more useful
distinctions. Therefore, there are two sections to the build system, one for
Pd patches which are objects, and another for Pd patches that are
"applications" (also examples, demos, etc.).
Criteria for Adding Patches
===========================
Patches that are added to this section ideally should be written using only
core Pd objects, without using externals whenever possible. If that if not
possible, then it should work with the externals included with the Pd-extended
builds.
You can either send your abstraction with the request for adding it to the
pd-dev list, or if you are a member of the SourceForge project already, you
can add them by yourself.
If you have questions, please post them to the pd-dev list. You can find all
of the mailing lists here: http://puredata.org/community/lists
We are working on a style guide, you can see the current rendition in CVS in
doc/pddp/pddp_style_guide.pd
How to add your library of patches
==================================
For the most up-to-date version of these instructions, see:
http://puredata.org/docs/developer/build
The best way to start is to copy the complete section of an existing library,
like memento. Then do a case-preserving search-and-replace, replacing
"memento" with the name of your library. Editors such as emacs will make the
replacements will preversing the case of the text it is replacing. For
example, replacing "memento" with "mylibrary" will make these changes:
MEMENTO_NAME = memento
objects_memento:
to this:
MYLIBRARY_NAME = mylibrary
objects_mylibrary:
If your editor does not do this, you will need to do two separate
search-and-replace actions, one for all lowercase, and another for all
uppercase.
Once you have your section setup after the search-and-replace, you need to
edit the paths of the files that you want to include. The paths will be the
only text written out. All of the installation paths will be Makefile
variables. Check the below example:
install -d $(helpdir)/$(MEMENTO_NAME)
install -p $(abstractions_src)/rradical/memento/*-help.pd \
$(helpdir)/$(MEMENTO_NAME)
becomes:
install -d $(helpdir)/$(MYLIBRARY_NAME)
install -p $(abstractions_src)/mylibrary/*-help.pd \
$(helpdir)/$(MYLIBRARY_NAME)
Also, since it is common to store the help patches in the same directory as
the object patchs, you can use this pattern to exclude the help patches from
being copied to $(objectsdir):
install -p $(shell ls -1 $(abstractions_src)/mylibrary/*.pd | \
grep -v '\-help.pd') $(objectsdir)/$(MYLIBRARY_NAME)
Explanations of Terms
=====================
MYLIBRARY_NAME = mylibrary
At the top of each library's section in the Makefile, you will see a
variable MYLIBRARY_NAME. This variable is the name used to install the
abstractions. This should be all lowercase since its used in the loading
of objects within Pd (e.g. [mylibrary/myobject]).
$(examplesdir):
If your project is an application or patch that is meant to be run
directly, then it should go into this directory in its own subdirectory.
This directory is a browsable collection of applications. If your
application has a lot of files associated with it, put a main patch and
have the extra files in a subdirectory. rradical/usecases/showcase is a
good example of this. This is the only place were mixed or upper case is
appropriate in directory names.
$(pddocdir):
All help patches should go into this directory in a subdirectory with the
same nameas the subdirectory for your objects. For example, for
[mylibrary/myobject] above, the helpfile would be "mylibrary/myobject-help.pd".
The subdirectory name (e.g. mylibrary) should always be all lowercase.
$(manualsdir):
If you have any other kinds of documentation, like a text or HTML manual,
or a Pd-based tutorial, then it should go into this directory, again in a
subdirectory with the same name as the library or application. Using the
previous example again, the "mylibrary" manual would be
"mylibrary/mylibrary.html".
The subdirectory name (e.g. mylibrary) should always be all lowercase.
$(objectsdir):
If your project consists of objects that are meant to be reused in other
patches rather than used as a application, then they should go into this
directory.
They should be in a directory with a distinct name. This will be the name
of your library of objects, which can be added to the path, or called
directly (e.g. [mylibrary/myobject]).
The subdirectory name (e.g. mylibrary) should always be all lowercase.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> gyre / audionerd </title>
<style type="text/css">
html
{
height: 100%;
}
body
{
font-family: verdana;
font-size: 11px;
font-size: 0.75em;
height: 80%;
}
#content
{
height: 100%;
margin-left: 10%;
margin-top: 8%;
padding-left: 2%;
border-left: 1px #aaaaaa dashed;
}
</style>
</head>
<body>
<div id="content">
<h1>GYRE</h1>
<h2>audio loop framework</h2>
<p>requires: cyclone</p>
<p>
<a href="http://www.audionerd.com">audionerd.com</a>
</p>
</div>
</body>
</html>
\ No newline at end of file