- Moved DMX reading and file selection from Pure Data to the GUI.

- Added udserver external. All the communication between pure data
process and GUI now is done through Unix Domain Sockets.
- Only video files are working at the moment.
- Creating thumbnails now is done in the start routine.
- CITP/MSEx and DMX reading is started automatically in the start
routine.
- The dmx settings are reading from an xml file. Support for edit
through the GUI and save and open files in next commits. Also it should
integrates the window configuration.
- Audio has been cutted. It will be supported in a separate application.
This commit is contained in:
Santi Noreña 2013-07-02 18:36:25 +02:00
parent 333c40f188
commit bbe8a169f2
840 changed files with 1743 additions and 415349 deletions

View file

@ -42,9 +42,10 @@ If you have troubles, or you are in another distro, you can try compiling from t
$./configure
$make
2. Building ola
$./configure
$make
2. Install ola and ola-dev
Add the repository apt.openlighting.org
apt-get install ola ola-dev
3. Building pd externals
@ -109,9 +110,6 @@ echo "export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/include" >> ~/.bashrc
- the pd executable
- Make a folder named externals and copy all the externals to it. All the externals compiled must be in ~HOME/pd-external.
There are externals from third party we do not track the sources files and are a must in order to run libremediaserver. That externals can be retrieved compiled in the libremediaserver release packet in the downloads page ot the web project. All are binaries from the packets of Debian distribution (counter, gate, split, prepend,...) from pd-zexy, pd-cyclone, pd-ogg. I'am actively developing and i am adding the sources of these externals to repository when they are necessary (Gem) or making my own fork to adapt when i need (fileselector, pix2image) or trying using alternatives in PD Vanilla. I want to keep only the minimun necessary in this chapter. Alternativaly i want to make a compilation script that would do the complete compilation process, including these externals, but it's not a prioriy at this moment.
There are externals from third party that we do not track the sources files and are a must in order to run libremediaserver. That externals can be retrieved compiled in the libremediaserver release packet in the downloads page in the web project. All are binaries from the packets of Debian distribution (counter, gate, split, prepend,...) from pd-zexy, pd-cyclone, pd-ogg. I'am actively developing and i am adding the sources of these externals to repository when they are necessary (Gem) or making my own fork to adapt when i need (fileselector, pix2image) or trying using alternatives in PD Vanilla. I want to keep only the minimun necessary in this chapter. Alternativaly i want to make a compilation script that would do the complete compilation process, including these externals, but it's not a prioriy at this moment.
..........

File diff suppressed because it is too large Load diff

View file

@ -1,125 +1,4 @@
#N canvas 738 162 611 318 10;
#N canvas 313 140 952 599 dmx 0;
#X obj -7 437 list split;
#X obj 99 444 list split;
#X obj 50 385 - 1;
#X obj 156 386 - 1;
#X msg 432 206 close;
#X obj 202 447 list split;
#X obj 259 390 - 1;
#X obj 308 446 list split;
#X obj 365 367 - 1;
#X msg 330 206 universe \$1;
#X msg 486 209 open;
#X obj 434 457 list split;
#X obj 491 378 - 1;
#X obj 558 448 list split;
#X obj 615 369 - 1;
#X obj 675 449 list split;
#X obj 732 370 - 1;
#X obj 800 445 list split;
#X obj 857 366 - 1;
#X obj -7 379 spigot;
#X obj 95 402 spigot;
#X obj 204 397 spigot;
#X obj 314 393 spigot;
#X obj 421 395 spigot;
#X obj 556 405 spigot;
#X obj 672 407 spigot;
#X obj 798 394 spigot;
#X obj 21 479 list split 49;
#X obj 127 482 list split 49;
#X obj 230 482 list split 49;
#X obj 336 483 list split 49;
#X obj 462 494 list split 49;
#X obj 586 485 list split 49;
#X obj 703 486 list split 49;
#X obj 828 482 list split 49;
#X obj 27 208 r layer1;
#X obj 100 204 r layer2;
#X obj 167 209 r layer3;
#X obj 233 202 r layer4;
#X obj 521 256 r layer5;
#X obj 606 281 r layer6;
#X obj 722 280 r layer7;
#X obj 858 278 r layer8;
#X obj 435 94 r ola;
#X obj 434 154 select 0;
#X obj 331 93 r universe;
#X obj 21 520 s dmx1;
#X obj 127 523 s dmx2;
#X obj 230 523 s dmx3;
#X obj 330 522 s dmx4;
#X obj 462 535 s dmx5;
#X obj 586 526 s dmx6;
#X obj 703 527 s dmx7;
#X obj 828 523 s dmx8;
#X obj 410 243 ola2pd;
#X connect 0 1 27 0;
#X connect 1 1 28 0;
#X connect 2 0 0 1;
#X connect 3 0 1 1;
#X connect 4 0 54 0;
#X connect 5 1 29 0;
#X connect 6 0 5 1;
#X connect 7 1 30 0;
#X connect 8 0 7 1;
#X connect 9 0 54 0;
#X connect 10 0 54 0;
#X connect 11 1 31 0;
#X connect 12 0 11 1;
#X connect 13 1 32 0;
#X connect 14 0 13 1;
#X connect 15 1 33 0;
#X connect 16 0 15 1;
#X connect 17 1 34 0;
#X connect 18 0 17 1;
#X connect 19 0 0 0;
#X connect 20 0 1 0;
#X connect 21 0 5 0;
#X connect 22 0 7 0;
#X connect 23 0 11 0;
#X connect 24 0 13 0;
#X connect 25 0 15 0;
#X connect 26 0 17 0;
#X connect 27 0 46 0;
#X connect 28 0 47 0;
#X connect 29 0 48 0;
#X connect 30 0 49 0;
#X connect 31 0 50 0;
#X connect 32 0 51 0;
#X connect 33 0 52 0;
#X connect 34 0 53 0;
#X connect 35 0 2 0;
#X connect 35 0 19 1;
#X connect 36 0 20 1;
#X connect 36 0 3 0;
#X connect 37 0 21 1;
#X connect 37 0 6 0;
#X connect 38 0 8 0;
#X connect 38 0 22 1;
#X connect 39 0 12 0;
#X connect 39 0 23 1;
#X connect 40 0 14 0;
#X connect 40 0 24 1;
#X connect 41 0 16 0;
#X connect 41 0 25 1;
#X connect 42 0 18 0;
#X connect 42 0 26 1;
#X connect 43 0 44 0;
#X connect 44 0 4 0;
#X connect 44 1 10 0;
#X connect 45 0 9 0;
#X connect 54 0 19 0;
#X connect 54 0 20 0;
#X connect 54 0 21 0;
#X connect 54 0 22 0;
#X connect 54 0 23 0;
#X connect 54 0 24 0;
#X connect 54 0 25 0;
#X connect 54 0 26 0;
#X coords 0 -1 1 1 10 10 1 10 10;
#X restore -354 -438 pd dmx;
#N canvas 734 140 611 350 10;
#N canvas 59 348 240 272 fondo 0;
#X obj -452 -118 color 0 0 0;
#X obj -452 -150 alpha;
@ -136,100 +15,62 @@
#X connect 5 0 7 0;
#X connect 7 0 4 3;
#X restore -309 -438 pd fondo;
#N canvas 59 381 1134 358 receive 0;
#X obj 22 -242 s winposx;
#X obj 90 -242 s winposy;
#X obj 158 -242 s winsizex;
#X obj 233 -242 s winsizey;
#X obj 22 -266 float;
#X obj 90 -266 float;
#X obj 158 -266 float;
#X obj 233 -266 float;
#X obj 323 -241 s layer1;
#X obj 382 -241 s layer2;
#X obj 442 -241 s layer3;
#X obj 503 -241 s layer4;
#X obj 563 -241 s layer5;
#X obj 624 -241 s layer6;
#X obj 685 -241 s layer7;
#X obj 746 -241 s layer8;
#X obj 323 -265 float;
#X obj 382 -265 float;
#X obj 442 -265 float;
#X obj 503 -265 float;
#X obj 746 -265 float;
#X obj 563 -265 float;
#X obj 624 -265 float;
#X obj 685 -265 float;
#X obj 807 -266 float;
#X obj 807 -241 s ola;
#X obj 847 -265 float;
#X obj 847 -241 s universe;
#X obj 902 -406 s path;
#X obj -39 -265 float;
#X obj 787 -449 unpack f f s;
#X obj 787 -477 netreceive 9195;
#X obj -39 -242 s window;
#X obj 922 -264 float;
#X obj 922 -242 s previewswitch;
#X obj -39 -408 select 1 2 3 4 5 11 12 13 14 15 16 17 18 20 21 22 23
;
#X obj 1040 -263 float;
#X obj 1040 -241 s fps;
#X connect 4 0 0 0;
#X connect 5 0 1 0;
#X connect 6 0 2 0;
#X connect 7 0 3 0;
#X connect 16 0 8 0;
#X connect 17 0 9 0;
#X connect 18 0 10 0;
#X connect 19 0 11 0;
#X connect 20 0 15 0;
#X connect 21 0 12 0;
#X connect 22 0 13 0;
#X connect 23 0 14 0;
#X connect 24 0 25 0;
#X connect 26 0 27 0;
#X connect 29 0 32 0;
#X connect 30 0 35 0;
#X connect 30 1 4 1;
#X connect 30 1 5 1;
#X connect 30 1 6 1;
#X connect 30 1 7 1;
#X connect 30 1 16 1;
#X connect 30 1 17 1;
#X connect 30 1 18 1;
#X connect 30 1 19 1;
#X connect 30 1 21 1;
#X connect 30 1 22 1;
#X connect 30 1 23 1;
#X connect 30 1 20 1;
#X connect 30 1 24 1;
#X connect 30 1 26 1;
#X connect 30 1 29 1;
#X connect 30 1 33 1;
#X connect 30 1 36 1;
#X connect 30 2 28 0;
#X connect 31 0 30 0;
#X connect 33 0 34 0;
#X connect 35 0 29 0;
#X connect 35 1 4 0;
#X connect 35 2 5 0;
#X connect 35 3 6 0;
#X connect 35 4 7 0;
#X connect 35 5 16 0;
#X connect 35 6 17 0;
#X connect 35 7 18 0;
#X connect 35 8 19 0;
#X connect 35 9 21 0;
#X connect 35 10 22 0;
#X connect 35 11 23 0;
#X connect 35 12 20 0;
#X connect 35 13 24 0;
#X connect 35 14 26 0;
#X connect 35 15 33 0;
#X connect 35 16 36 0;
#X connect 36 0 37 0;
#N canvas 6 214 1351 525 receive 0;
#X obj 656 -238 s winposx;
#X obj 724 -238 s winposy;
#X obj 792 -238 s winsizex;
#X obj 867 -238 s winsizey;
#X obj 595 -238 s window;
#X obj 943 -236 s previewswitch;
#X obj 1061 -236 s fps;
#X obj 207 -486 udserver;
#X floatatom 260 -466 5 0 0 0 - - -;
#X obj 781 -339 route 101 102 103 104 105 122 123;
#X obj 207 -451 route 1 2 3 4 5 6 7 8;
#X obj 412 -371 route 201 202 203 204 205 206 207 208;
#X obj -197 -369 send dmx1;
#X obj 332 -369 send dmx8;
#X obj 259 -369 send dmx7;
#X obj 183 -369 send dmx6;
#X obj 110 -369 send dmx5;
#X obj 25 -369 send dmx4;
#X obj -48 -369 send dmx3;
#X obj -124 -369 send dmx2;
#X obj 118 -280 s file1;
#X obj 178 -280 s file2;
#X obj 240 -280 s file3;
#X obj 300 -280 s file4;
#X obj 358 -281 s file5;
#X obj 418 -281 s file6;
#X obj 480 -281 s file7;
#X obj 540 -281 s file8;
#X connect 7 0 10 0;
#X connect 7 1 8 0;
#X connect 9 0 4 0;
#X connect 9 1 0 0;
#X connect 9 2 1 0;
#X connect 9 3 2 0;
#X connect 9 4 3 0;
#X connect 9 5 5 0;
#X connect 9 6 6 0;
#X connect 10 0 12 0;
#X connect 10 1 19 0;
#X connect 10 2 18 0;
#X connect 10 3 17 0;
#X connect 10 4 16 0;
#X connect 10 5 15 0;
#X connect 10 6 14 0;
#X connect 10 7 13 0;
#X connect 10 8 11 0;
#X connect 11 0 20 0;
#X connect 11 1 21 0;
#X connect 11 2 22 0;
#X connect 11 3 23 0;
#X connect 11 4 24 0;
#X connect 11 5 25 0;
#X connect 11 6 26 0;
#X connect 11 7 27 0;
#X connect 11 8 9 0;
#X restore -249 -438 pd receive;
#N canvas 816 198 450 333 window 0;
#X msg 809 -348 color 0 0 0;
@ -297,7 +138,7 @@
#X connect 27 0 24 0;
#X connect 28 0 27 0;
#X restore -175 -438 pd window;
#N canvas 820 209 450 300 layer_5 0;
#N canvas 818 219 450 300 layer_5 0;
#X msg -209 -32 1;
#X msg -262 -33 0;
#X obj -262 -55 select 0;
@ -306,14 +147,12 @@
#X msg -196 34 0;
#X msg -192 3 1;
#X obj -254 56 t b;
#X obj -338 32 s textgui;
#X obj -114 148 s preview;
#X obj -338 -81 r dmx5;
#X obj -262 -80 r layer5;
#X msg -338 10 5 \$1;
#X msg -320 112 layerimage 15;
#X obj -191 -107 delay 500;
#X obj -191 -128 r metro;
#X obj -262 -97 r file5;
#X obj -338 -28 layer;
#X connect 0 0 3 1;
#X connect 1 0 3 1;
@ -321,25 +160,22 @@
#X connect 2 1 0 0;
#X connect 3 0 4 0;
#X connect 4 0 7 0;
#X connect 4 0 9 0;
#X connect 4 0 8 0;
#X connect 5 0 4 1;
#X connect 6 0 4 1;
#X connect 7 0 5 0;
#X connect 7 0 9 0;
#X connect 7 0 13 0;
#X connect 10 0 16 0;
#X connect 11 0 2 0;
#X connect 11 0 16 1;
#X connect 12 0 8 0;
#X connect 13 0 9 0;
#X connect 14 0 6 0;
#X connect 15 0 14 0;
#X connect 16 0 12 0;
#X connect 16 1 3 0;
#X connect 7 0 8 0;
#X connect 7 0 10 0;
#X connect 9 0 14 0;
#X connect 10 0 8 0;
#X connect 11 0 6 0;
#X connect 12 0 11 0;
#X connect 13 0 14 1;
#X connect 14 0 3 0;
#X restore -176 -379 pd layer_5;
#X obj -298 -336 loadbang;
#X obj -127 -269 print togui;
#N canvas 803 211 450 300 layer_6 0;
#X obj -48 -231 print togui;
#N canvas 801 221 450 300 layer_6 0;
#X msg -124 -32 1;
#X msg -177 -33 0;
#X obj -177 -55 select 0;
@ -348,14 +184,12 @@
#X msg -111 34 0;
#X msg -107 3 1;
#X obj -169 56 t b;
#X obj -253 32 s textgui;
#X obj -29 148 s preview;
#X obj -253 -81 r dmx6;
#X obj -177 -80 r layer6;
#X msg -253 10 6 \$1;
#X msg -242 116 layerimage 16;
#X obj -106 -120 r metro;
#X obj -106 -97 delay 600;
#X obj -175 -103 r file6;
#X obj -253 -28 layer;
#X connect 0 0 3 1;
#X connect 1 0 3 1;
@ -363,23 +197,20 @@
#X connect 2 1 0 0;
#X connect 3 0 4 0;
#X connect 4 0 7 0;
#X connect 4 0 9 0;
#X connect 4 0 8 0;
#X connect 5 0 4 1;
#X connect 6 0 4 1;
#X connect 7 0 5 0;
#X connect 7 0 13 0;
#X connect 7 0 9 0;
#X connect 10 0 16 0;
#X connect 11 0 2 0;
#X connect 11 0 16 1;
#X connect 12 0 8 0;
#X connect 13 0 9 0;
#X connect 14 0 15 0;
#X connect 15 0 6 0;
#X connect 16 0 12 0;
#X connect 16 1 3 0;
#X connect 7 0 10 0;
#X connect 7 0 8 0;
#X connect 9 0 14 0;
#X connect 10 0 8 0;
#X connect 11 0 12 0;
#X connect 12 0 6 0;
#X connect 13 0 14 1;
#X connect 14 0 3 0;
#X restore -102 -379 pd layer_6;
#N canvas 430 292 450 300 layer_7 0;
#N canvas 428 302 450 300 layer_7 0;
#X msg -124 -32 1;
#X msg -177 -33 0;
#X obj -177 -55 select 0;
@ -388,14 +219,12 @@
#X msg -111 34 0;
#X msg -107 3 1;
#X obj -169 56 t b;
#X obj -253 32 s textgui;
#X obj -29 148 s preview;
#X obj -253 -81 r dmx7;
#X obj -177 -80 r layer7;
#X msg -253 10 7 \$1;
#X msg -244 117 layerimage 17;
#X obj -106 -97 delay 700;
#X obj -106 -120 r metro;
#X obj -177 -101 r file7;
#X obj -253 -28 layer;
#X connect 0 0 3 1;
#X connect 1 0 3 1;
@ -403,23 +232,20 @@
#X connect 2 1 0 0;
#X connect 3 0 4 0;
#X connect 4 0 7 0;
#X connect 4 0 9 0;
#X connect 4 0 8 0;
#X connect 5 0 4 1;
#X connect 6 0 4 1;
#X connect 7 0 5 0;
#X connect 7 0 13 0;
#X connect 7 0 9 0;
#X connect 10 0 16 0;
#X connect 11 0 2 0;
#X connect 11 0 16 1;
#X connect 12 0 8 0;
#X connect 13 0 9 0;
#X connect 14 0 6 0;
#X connect 15 0 14 0;
#X connect 16 0 12 0;
#X connect 16 1 3 0;
#X connect 7 0 10 0;
#X connect 7 0 8 0;
#X connect 9 0 14 0;
#X connect 10 0 8 0;
#X connect 11 0 6 0;
#X connect 12 0 11 0;
#X connect 13 0 14 1;
#X connect 14 0 3 0;
#X restore -28 -379 pd layer_7;
#N canvas 893 299 450 300 layer_8 0;
#N canvas 891 309 450 300 layer_8 0;
#X msg -124 -41 1;
#X msg -177 -42 0;
#X obj -177 -64 select 0;
@ -428,14 +254,12 @@
#X msg -84 11 0;
#X msg -84 -12 1;
#X obj -169 47 t b;
#X obj -253 23 s textgui;
#X obj -29 148 s preview;
#X obj -253 -90 r dmx8;
#X msg -261 103 layerimage 18;
#X msg -253 1 8 \$1;
#X obj -84 -81 delay 800;
#X obj -84 -112 r metro;
#X obj -177 -89 r layer8;
#X obj -203 -92 r file8;
#X obj -253 -37 layer;
#X connect 0 0 3 1;
#X connect 1 0 3 1;
@ -443,23 +267,20 @@
#X connect 2 1 0 0;
#X connect 3 0 4 0;
#X connect 4 0 7 0;
#X connect 4 0 9 0;
#X connect 4 0 8 0;
#X connect 5 0 4 1;
#X connect 6 0 4 1;
#X connect 7 0 5 0;
#X connect 7 0 11 0;
#X connect 7 0 9 0;
#X connect 10 0 16 0;
#X connect 11 0 9 0;
#X connect 12 0 8 0;
#X connect 13 0 6 0;
#X connect 14 0 13 0;
#X connect 15 0 2 0;
#X connect 15 0 16 1;
#X connect 16 0 12 0;
#X connect 16 1 3 0;
#X connect 7 0 10 0;
#X connect 7 0 8 0;
#X connect 9 0 14 0;
#X connect 10 0 8 0;
#X connect 11 0 6 0;
#X connect 12 0 11 0;
#X connect 13 0 14 1;
#X connect 14 0 3 0;
#X restore 46 -379 pd layer_8;
#N canvas 901 332 450 300 layer_4 0;
#N canvas 899 342 450 300 layer_4 0;
#X msg -124 -32 1;
#X msg -177 -33 0;
#X obj -177 -55 select 0;
@ -468,14 +289,12 @@
#X msg -104 30 0;
#X msg -107 3 1;
#X obj -169 56 t b;
#X obj -253 32 s textgui;
#X obj -29 148 s preview;
#X obj -253 -81 r dmx4;
#X obj -177 -80 r layer4;
#X msg -253 10 4 \$1;
#X msg -231 104 layerimage 14;
#X obj -106 -88 delay 400;
#X obj -106 -116 r metro;
#X obj -179 -92 r file4;
#X obj -253 -28 layer;
#X connect 0 0 3 1;
#X connect 1 0 3 1;
@ -483,23 +302,20 @@
#X connect 2 1 0 0;
#X connect 3 0 4 0;
#X connect 4 0 7 0;
#X connect 4 0 9 0;
#X connect 4 0 8 0;
#X connect 5 0 4 1;
#X connect 6 0 4 1;
#X connect 7 0 5 0;
#X connect 7 0 13 0;
#X connect 7 0 9 0;
#X connect 10 0 16 0;
#X connect 11 0 2 0;
#X connect 11 0 16 1;
#X connect 12 0 8 0;
#X connect 13 0 9 0;
#X connect 14 0 6 0;
#X connect 15 0 14 0;
#X connect 16 0 12 0;
#X connect 16 1 3 0;
#X connect 7 0 10 0;
#X connect 7 0 8 0;
#X connect 9 0 14 0;
#X connect 10 0 8 0;
#X connect 11 0 6 0;
#X connect 12 0 11 0;
#X connect 13 0 14 1;
#X connect 14 0 3 0;
#X restore -250 -379 pd layer_4;
#N canvas 820 167 450 300 layer_3 0;
#N canvas 818 177 450 300 layer_3 0;
#X msg -124 -32 1;
#X msg -177 -33 0;
#X obj -177 -55 select 0;
@ -509,121 +325,106 @@
#X msg -61 31 0;
#X msg -107 3 1;
#X obj -223 69 t b;
#X obj -253 32 s textgui;
#X obj -29 148 s preview;
#X obj -177 -80 r layer3;
#X obj -253 -81 r dmx3;
#X msg -327 95 layerimage 13;
#X obj -106 -81 delay 300;
#X msg -253 10 3 \$1;
#X obj -177 -100 r file3;
#X obj -253 -28 layer;
#X connect 0 0 3 1;
#X connect 1 0 3 1;
#X connect 2 0 1 0;
#X connect 2 1 0 0;
#X connect 3 0 5 0;
#X connect 4 0 14 0;
#X connect 4 0 12 0;
#X connect 5 0 8 0;
#X connect 5 0 10 0;
#X connect 5 0 9 0;
#X connect 6 0 5 1;
#X connect 7 0 5 1;
#X connect 8 0 6 0;
#X connect 8 0 13 0;
#X connect 8 0 10 0;
#X connect 11 0 2 0;
#X connect 11 0 16 1;
#X connect 12 0 16 0;
#X connect 13 0 10 0;
#X connect 14 0 7 0;
#X connect 15 0 9 0;
#X connect 16 0 15 0;
#X connect 16 1 3 0;
#X connect 8 0 11 0;
#X connect 8 0 9 0;
#X connect 10 0 14 0;
#X connect 11 0 9 0;
#X connect 12 0 7 0;
#X connect 13 0 14 1;
#X connect 14 0 3 0;
#X restore -323 -379 pd layer_3;
#N canvas 38 329 450 300 layer_2 0;
#X msg -124 -32 1;
#X msg -177 -33 0;
#X obj -177 -55 select 0;
#X obj -169 4 spigot;
#N canvas 883 217 450 300 layer_2 0;
#X msg -86 -22 1;
#X msg -139 -23 0;
#X obj -139 -45 select 0;
#X obj -131 14 spigot;
#X obj -65 -111 r metro;
#X obj -169 34 spigot;
#X msg -26 39 0;
#X msg -107 3 1;
#X obj -169 56 t b;
#X obj -253 32 s textgui;
#X obj -29 148 s preview;
#X obj -131 44 spigot;
#X msg 12 49 0;
#X msg -69 13 1;
#X obj -131 66 t b;
#X obj 9 158 s preview;
#X obj -253 -81 r dmx2;
#X obj -177 -80 r layer2;
#X msg -253 10 2 \$1;
#X msg -235 112 layerimage 12;
#X msg -197 122 layerimage 12;
#X msg -65 -86 delay 100;
#X obj -177 -80 r file2;
#X obj -253 -28 layer;
#X connect 0 0 3 1;
#X connect 1 0 3 1;
#X connect 2 0 1 0;
#X connect 2 1 0 0;
#X connect 3 0 5 0;
#X connect 4 0 15 0;
#X connect 4 0 12 0;
#X connect 5 0 8 0;
#X connect 5 0 10 0;
#X connect 5 0 9 0;
#X connect 6 0 5 1;
#X connect 7 0 5 1;
#X connect 8 0 6 0;
#X connect 8 0 14 0;
#X connect 8 0 10 0;
#X connect 11 0 16 0;
#X connect 12 0 2 0;
#X connect 12 0 16 1;
#X connect 13 0 9 0;
#X connect 14 0 10 0;
#X connect 15 0 7 0;
#X connect 16 0 13 0;
#X connect 16 1 3 0;
#X connect 8 0 11 0;
#X connect 8 0 9 0;
#X connect 10 0 14 0;
#X connect 11 0 9 0;
#X connect 12 0 7 0;
#X connect 13 0 14 1;
#X connect 14 0 3 0;
#X restore -396 -379 pd layer_2;
#N canvas 501 324 450 300 layer_1 0;
#N canvas 911 249 450 300 layer_1 0;
#X obj -253 -28 layer;
#X msg -124 -32 1;
#X msg -177 -33 0;
#X obj -177 -55 select 0;
#X obj -169 4 spigot;
#X obj -106 -124 r metro;
#X obj -169 34 spigot;
#X msg -18 33 0;
#X msg -107 3 1;
#X obj -169 56 t b;
#X msg -61 -33 1;
#X msg -114 -34 0;
#X obj -106 3 spigot;
#X obj 29 -93 r metro;
#X obj -106 33 spigot;
#X msg 45 32 0;
#X msg -44 2 1;
#X obj -106 55 t b;
#X obj -253 -81 r dmx1;
#X obj -177 -80 r layer1;
#X msg -253 10 1 \$1;
#X msg -235 92 layerimage 11;
#X obj -253 32 s textgui;
#X msg -193 109 layerimage 11;
#X obj -29 148 s preview;
#X connect 0 0 12 0;
#X connect 0 1 4 0;
#X connect 1 0 4 1;
#X connect 2 0 4 1;
#X connect 3 0 2 0;
#X connect 3 1 1 0;
#X connect 4 0 6 0;
#X obj -197 -81 r file1;
#X obj -114 -56 select 0;
#X connect 0 0 3 0;
#X connect 1 0 3 1;
#X connect 2 0 3 1;
#X connect 3 0 5 0;
#X connect 4 0 7 0;
#X connect 5 0 8 0;
#X connect 6 0 9 0;
#X connect 6 0 15 0;
#X connect 7 0 6 1;
#X connect 8 0 6 1;
#X connect 9 0 7 0;
#X connect 9 0 13 0;
#X connect 9 0 15 0;
#X connect 10 0 0 0;
#X connect 11 0 3 0;
#X connect 11 0 0 1;
#X connect 12 0 14 0;
#X connect 13 0 15 0;
#X connect 5 0 11 0;
#X connect 6 0 5 1;
#X connect 7 0 5 1;
#X connect 8 0 6 0;
#X connect 8 0 10 0;
#X connect 8 0 11 0;
#X connect 9 0 0 0;
#X connect 10 0 11 0;
#X connect 12 0 0 1;
#X connect 13 0 2 0;
#X connect 13 1 1 0;
#X restore -469 -379 pd layer_1;
#X obj -298 -271 metro 1000;
#X obj -298 -237 s metro;
#X msg -298 -305 1;
#X obj -85 -304 r textgui;
#X obj -124 -263 r textgui;
#X obj -476 -294 r preview;
#X msg -127 -301 0;
#X obj -476 -236 pix2jpg;
#X msg -48 -263 0;
#X obj -476 -272 pix2jpg;
#X text -384 -470 (c) 2012-2013 Santi Noreña libremediaserver@gmail.com
GPL License;
#X obj -418 -336 r previewswitch;
@ -662,14 +463,14 @@ GPL License;
#X connect 13 0 9 0;
#X connect 15 0 11 1;
#X restore -107 -438 pd fps;
#X text -472 -194 This patch can not be run alone \, needs the libremediaserver
#X text -474 -219 This patch can not be run alone \, needs the libremediaserver
GUI http://libremediaserver.googlecode.com;
#X connect 5 0 16 0;
#X connect 5 0 19 0;
#X connect 14 0 15 0;
#X connect 16 0 14 0;
#X connect 17 0 6 0;
#X connect 18 0 20 0;
#X connect 19 0 6 0;
#X connect 22 0 14 0;
#X connect 4 0 15 0;
#X connect 4 0 18 0;
#X connect 13 0 14 0;
#X connect 15 0 13 0;
#X connect 16 0 5 0;
#X connect 17 0 19 0;
#X connect 18 0 5 0;
#X connect 21 0 13 0;
#X coords 0 0 1 1 85 60 0;

View file

@ -1,9 +0,0 @@
xrandr -q
xrandr --output LVDS --pos 1024x0
xrandr --output VGA-0 --mode 1024x768
xrandr --output HDMI1 --mode 720x576
xrandr --output VGA-0 --right-of LVDS
768x576 píxeles
1280x720
1920x1080

View file

@ -1,21 +0,0 @@
#!/bin/bash
# make_thumbs v0.0.2
# Script que genera thumbnails de todas las películas en el directorio Media
# Copyright Santi Noreña 2012-2013
# GPL License
cd $1 ||{
echo "Can not change to directory." $1
exit $E_XCD;
}
cd video
for folder in $(find -maxdepth 1 -type d); do
rm $folder/thumbs/*
mkdir $folder/thumbs
done
for file in $(find . -maxdepth 2 -mindepth 2 -type f ); do
avconv -i $file -f image2 -frames:v 1 -s 64x46 -vcodec mjpeg $file.jpg
done
for folder in $(find -maxdepth 1 -type d); do
mv $folder/*.jpg $folder/thumbs
done
exit 0

View file

@ -1,2 +0,0 @@
xrandr --output VGA-0 --off

View file

@ -64,6 +64,7 @@ AC_CONFIG_FILES([plugins/videoVLC/Makefile])
#AC_CONFIG_FILES([extra/pix_fiducialtrack/Makefile])
#AC_CONFIG_FILES([extra/pix_hit/Makefile])
AC_CONFIG_FILES([extra/pix2jpg/Makefile])
AC_CONFIG_FILES([extra/udserver/Makefile])
# other stuff
AC_CONFIG_FILES([build/Makefile Gem.pc Gem-meta.pd])

View file

@ -9,5 +9,6 @@ SUBDIRS =
#SUBDIRS += pix_fiducialtrack
#SUBDIRS += pix_hit
SUBDIRS += pix2jpg
SUBDIRS += udserver
EXTRA_DIST = \
README-EXTRA.txt

View file

@ -1,5 +1,5 @@
////////////////////////////////////////////////////////
// pix2jpg v0.02
// pix2jpg v0.03
// External for Gem and Pure Data to convert an image to jpg and send it
// via Unix Domain Sockets.
//
@ -29,7 +29,7 @@ pix2jpg :: pix2jpg(t_symbol *s)
m_layer(0)
{
// post("pix2jpg 2012-2013 Santi Noreña libremediaserver@gmail.com");
outlet1 = outlet_new(this->x_obj, 0); // Saca todos los canales mediante una lista
// outlet1 = outlet_new(this->x_obj, 0);
// Init the Unix Socket
socket_fd = socket(PF_UNIX, SOCK_STREAM, 0);
if(socket_fd < 0)
@ -53,7 +53,7 @@ pix2jpg :: pix2jpg(t_symbol *s)
/////////////////////////////////////////////////////////
pix2jpg :: ~pix2jpg()
{
outlet_free(outlet1);
// outlet_free(outlet1);
}
/////////////////////////////////////////////////////////
@ -68,7 +68,7 @@ void pix2jpg :: processImage(imageStruct &image)
int counter = 0;
Image imagem(image.xsize, image.ysize, "RGBA", CharPixel, image.data);
imagem.resize("64x46");
// Write to BLOB in png format
// Write to BLOB in jpg format
Blob blob;
imagem.magick( "jpg" ); // Set JPEG output format
imagem.write( &blob );

View file

@ -82,12 +82,11 @@ class GEM_EXPORT pix2jpg : public GemPixObj
int m_layer;
t_outlet *outlet1; // outlet pointer
// t_outlet *outlet1; // outlet pointer
struct sockaddr_un address;
int socket_fd, nbytes;
private:
//////////
@ -96,6 +95,5 @@ class GEM_EXPORT pix2jpg : public GemPixObj
static void stopMessCallback(void *data);
static void bangMessCallback(void *data);
static void layerimageMessCallback(void *data, t_float f);
};
#endif // for header file

View file

@ -18,15 +18,12 @@
*/
#include "PacketCreator.h"
//#include "PureMediaServer.h"
//#include "MediaServer.h"
#include "CITPDefines.h"
#include "MSEXDefines.h"
#include <QtDebug>
#include <QFileInfo>
#include <QFile>
#include <QDir>
PacketCreator::PacketCreator(QObject *parent)
: QObject(parent)
@ -42,7 +39,7 @@ unsigned char * PacketCreator::createPLocPacket(
const QString &state,
int &bufferLen)
{
qDebug() << "createPLOC" << name << state;
qDebug() << "Packet|Creator" << "createPLOC" << name << state;
QString plocType = "MediaServer";
// figure out the packet size, all strings need to be NULL terminated
bufferLen = sizeof(struct CITP_PINF_PLoc) + plocType.size() + 1 + name.size() + 1 + state.size() + 1;
@ -188,18 +185,20 @@ unsigned char * PacketCreator::createLSTAPacket(layerList layerp,int &bufferLen)
return buffer;
}
unsigned char * PacketCreator::createELINPacket(QList <MediaLibrary> medialib, int&bufferLen)
unsigned char * PacketCreator::createELINPacket(const QList<MediaLibrary> *medialib, int&bufferLen)
{
// Vemos el tamaño total de la estructurta
QByteArray data;
QDataStream stream(&data, QIODevice::WriteOnly);
MediaLibrary mediai;
int medialen = 0;
int size = 0;
int i;
for (i=0; i<medialib.size(); i++)
for (i=0; i<medialib->size(); i++)
{
mediai = medialib.at(i);
mediai = medialib->at(i);
size = sizeof(mediai) + 2*mediai.m_Name.size() +2 -sizeof(mediai.m_Name) -sizeof(mediai.m_MediaInformation);
medialen = medialen + size;
medialen += size;
}
int offset = sizeof(struct CITP_MSEX_ELIn);
bufferLen = offset + medialen;
@ -225,14 +224,14 @@ unsigned char * PacketCreator::createELINPacket(QList <MediaLibrary> medialib, i
// ELin Content
packet->LibraryType = 0x01;
packet->LibraryCount = medialib.size();
packet->LibraryCount = medialib->size();
// Element Library Information
unsigned char *buffer2 = new unsigned char[medialen];
for (i=0; i<medialib.size(); i++)
for (i=0; i<medialib->size(); i++)
{
memset(buffer2, 0, medialen);
int offset2 = 0;
mediai = medialib.at(i);
mediai = medialib->at(i);
memcpy (buffer2, &mediai.m_Id, 1);
offset2++;
memcpy ((buffer2+offset2), &mediai.m_DMXRangeMin,1);
@ -322,34 +321,18 @@ unsigned char * PacketCreator::createMEINPacket(MediaLibrary medialib, int &buff
return buffer;
}
unsigned char * PacketCreator::createETHNPacket(QString path,MediaLibrary medialib, int elementnumber, int &bufferLen)
unsigned char * PacketCreator::createETHNPacket(MediaLibrary medialib, int elementnumber, int &bufferLen)
{
QDir dir(path);
QFileInfo fileInfo;
QFileInfoList filelist;
if (medialib.m_Name == "image"){
dir.setFilter(QDir::Files);
dir.cd("image");
}
else {
dir.cd("video");
dir.setFilter(QDir::Dirs | QDir::NoSymLinks | QDir::NoDotAndDotDot);
filelist = dir.entryInfoList();
fileInfo = filelist.at(medialib.m_Id);
dir.cd(fileInfo.baseName());
dir.setFilter(QDir::Files);
}
dir.cd("thumbs");
filelist = dir.entryInfoList();
if (filelist.size() > elementnumber){
fileInfo = filelist.at(elementnumber);
}
else {
return NULL;
}
QFile file(fileInfo.filePath());
QString thumbname = medialib.m_Name;
thumbname.append("/thumbs/");
QString filename;
filename = medialib.m_MediaInformation.at(elementnumber).MediaName;
int index = filename.count("/");
thumbname.append(filename.section("/", index, index));
thumbname.append(".jpg");
QFile file(thumbname);
if (!file.open(QIODevice::ReadOnly)){
qDebug() << "Cannot open the file"<<fileInfo.filePath();
qDebug() << "PacketCreator|" << "Cannot open the file" << thumbname ;
return NULL;
}
unsigned char * bufferthumb = new unsigned char[file.size()];

View file

@ -48,9 +48,9 @@ public:
static unsigned char * createSINFPacket(int &bufferLen);
static unsigned char * createLSTAPacket(layerList layerp, int &bufferLen);
static unsigned char * createNACKPacket(quint32 cookie, int &bufferLen);
static unsigned char * createELINPacket(QList<MediaLibrary> medialib, int &bufferLen);
static unsigned char * createELINPacket(const QList<MediaLibrary> *medialib, int &bufferLen);
static unsigned char * createMEINPacket(MediaLibrary medialib, int &bufferLen);
static unsigned char * createETHNPacket(QString path, MediaLibrary medialib, int elementnumber, int &bufferLen);
static unsigned char * createETHNPacket(MediaLibrary medialib, int elementnumber, int &bufferLen);
static const char * createVSRCPacket(int &bufferLen);
// static const char * createFrame(uchar *frame, int &bufferLen);

View file

@ -30,10 +30,8 @@ THE SOFTWARE.
#include "CITPDefines.h"
#include "PacketCreator.h"
#include <QTimer>
#include <QtDebug>
#include <QNetworkInterface>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
@ -75,7 +73,7 @@ bool PeerInformationSocket::init(const QString &name, const QString &state, quin
address.setAddress(ipadd);
if (!bind(address, CITP_PINF_MULTICAST_PORT, ShareAddress | ReuseAddressHint))
{
qDebug() << "Multicast bind failed";
qDebug() << tr("PeerInformationSocket|") << "Multicast bind failed";
return false;
}
@ -86,7 +84,7 @@ bool PeerInformationSocket::init(const QString &name, const QString &state, quin
(const char *)&mreq, sizeof(struct ip_mreq));
if (0 != r)
{
qDebug() << "setsockopt failed, r:" << r;
qDebug() << tr("PeerInformationSocket|") << "setsockopt failed, r:" << r;
return false;
}
delete m_packetBuffer;

View file

@ -30,7 +30,7 @@ THE SOFTWARE.
#ifndef _PEERINFORMATIONSOCKET_H_
#define _PEERINFORMATIONSOCKET_H_
#include <QUdpSocket>
#include <QtNetwork/QUdpSocket>
class QTimer;

View file

@ -24,7 +24,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
#include "citp-lib.h"
#include <QtDebug>
#include "CITPDefines.h"

View file

@ -37,14 +37,14 @@ THE SOFTWARE.
#endif
#include <QObject>
#include <QScriptable>
#include <QHostAddress>
#include <QNetworkInterface>
//#include <QScriptable>
#include <QtNetwork/QHostAddress>
#include <QtNetwork/QNetworkInterface>
class PeerInformationSocket;
class MediaServer;
class CITPLIB_EXPORT CITPLib : public QObject, public QScriptable
class CITPLIB_EXPORT CITPLib : public QObject
{
Q_OBJECT
public:

View file

@ -1,21 +0,0 @@
#N canvas 831 156 546 485 10;
#X msg 19 73 bang;
#X obj 48 440 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 67 438 print;
#X obj 67 417 fileselector;
#X msg 65 40 folder 2;
#X msg 78 65 file 1;
#X msg 48 16 set /home/santi/PMS/media;
#X msg 89 97 type 35;
#X msg 116 134 type 55;
#X msg 140 168 type 80;
#X connect 0 0 3 0;
#X connect 3 0 1 0;
#X connect 3 0 2 0;
#X connect 4 0 3 0;
#X connect 5 0 3 0;
#X connect 6 0 3 0;
#X connect 7 0 3 0;
#X connect 8 0 3 0;
#X connect 9 0 3 0;

View file

@ -1,7 +0,0 @@
#N canvas 13 117 200 200 10;
#N canvas 625 218 420 300 META 1;
#X text 10 10 VERSION 0.0.1;
#X text 10 25 AUTHOR Santiago Noreña belfegor@gmail.com;
#X text 9 40 NAME fileselector;
#X text 9 56 LICENSE GPL;
#X restore 10 10 pd META;

View file

@ -1,273 +0,0 @@
/* --------------------------------------------------------------------------*/
/* */
/* object for getting files names in a source tree structure
Copyright (c) 2013 Santi Noreña <belfegor@gmail.com>
/* This program is free software; you can redistribute it and/or */
/* modify it under the terms of the GNU General Public License */
/* as published by the Free Software Foundation; either version 3 */
/* of the License, or (at your option) any later version. */
/* */
/* See file LICENSE for further informations on licensing terms. */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program; if not, write to the Free Software Foundation, */
/* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* */
/* --------------------------------------------------------------------------*/
#include <m_pd.h>
#include <stdlib.h>
#include <glob.h>
#include <stdio.h>
#include <string.h>
/*------------------------------------------------------------------------------
* CLASS DEF
*/
static t_class *fileselector_class;
typedef struct _fileselector {
t_object x_obj;
t_symbol* x_pattern;
int x_folder;
int x_file;
int x_type;
t_outlet *x_out;
} t_fileselector;
/*------------------------------------------------------------------------------
* IMPLEMENTATION
*/
static void fileselector_output(t_fileselector* x)
{
if (strlen(x->x_pattern->s_name) < 6)
{
post("fileselector: Set path first");
return;
}
if(x->x_type < 25) // Don't make anything
{
return;
}
char path[FILENAME_MAX] = "";
glob_t glob_buffer;
unsigned int i;
strncpy(path, x->x_pattern->s_name, FILENAME_MAX);
if(sys_isabsolutepath(path)) {
if((x->x_type > 24) && (x->x_type<50)) // Make the path video
{
strncat(path,"/video/*",8);
switch(glob(path, GLOB_TILDE, NULL, &glob_buffer))
{
case GLOB_NOSPACE:
pd_error(x,"[fileselector] out of memory for \"%s\"",path);
break;
# ifdef GLOB_ABORTED
case GLOB_ABORTED:
pd_error(x,"[fileselector] aborted \"%s\"",path);
break;
# endif
# ifdef GLOB_NOMATCH
case GLOB_NOMATCH:
pd_error(x,"[fileselector] nothing found for %s ",path);
break;
# endif
}
i = x->x_folder;
if (i < glob_buffer.gl_pathc)
{
strncpy(path, glob_buffer.gl_pathv[i],strnlen(glob_buffer.gl_pathv[i],FILENAME_MAX));
strncat(path, "/*", 2);
}
else
{
post("fileselector: folder is greater than the number of folders");
globfree(&glob_buffer);
return;
}
}
if((x->x_type > 49) && (x->x_type<75)) // Make the path image
{
strncat(path,"/image/*",8);
switch(glob(path, GLOB_TILDE, NULL, &glob_buffer))
{
case GLOB_NOSPACE:
pd_error(x,"[fileselector] out of memory for \"%s\"",path);
break;
# ifdef GLOB_ABORTED
case GLOB_ABORTED:
pd_error(x,"[fileselector] aborted \"%s\"",path);
break;
# endif
# ifdef GLOB_NOMATCH
case GLOB_NOMATCH:
pd_error(x,"[fileselector] nothing found for %s ",path);
break;
# endif
}
i = x->x_folder;
if (i < glob_buffer.gl_pathc)
{
strncpy(path, glob_buffer.gl_pathv[i],strnlen(glob_buffer.gl_pathv[i],FILENAME_MAX));
strncat(path, "/*", 2);
}
else
{
post("fileselector: folder is greater than the number of folders");
globfree(&glob_buffer);
return;
}
}
if((x->x_type > 74) && (x->x_type<100)) // Make the fonts path
{
strncat(path,"/fonts/*",8);
switch(glob(path, GLOB_TILDE, NULL, &glob_buffer))
{
case GLOB_NOSPACE:
pd_error(x,"[fileselector] out of memory for \"%s\"",path);
break;
# ifdef GLOB_ABORTED
case GLOB_ABORTED:
pd_error(x,"[fileselector] aborted \"%s\"",path);
break;
# endif
# ifdef GLOB_NOMATCH
case GLOB_NOMATCH:
pd_error(x,"[fileselector] nothing found for %s ",path);
break;
# endif
}
i = x->x_folder;
if (i < glob_buffer.gl_pathc)
{
strncpy(path, glob_buffer.gl_pathv[i],strnlen(glob_buffer.gl_pathv[i],FILENAME_MAX));
strncat(path, "/*", 2);
}
else
{
post("fileselector: folder is greater than the number of folders");
globfree(&glob_buffer);
return;
}
}
if(x->x_type == 256) // Make the path sound
{
strncat(path,"/sound/*",8);
switch(glob(path, GLOB_TILDE, NULL, &glob_buffer))
{
case GLOB_NOSPACE:
pd_error(x,"[fileselector] out of memory for \"%s\"",path);
break;
# ifdef GLOB_ABORTED
case GLOB_ABORTED:
pd_error(x,"[fileselector] aborted \"%s\"",path);
break;
# endif
# ifdef GLOB_NOMATCH
case GLOB_NOMATCH:
pd_error(x,"[fileselector] nothing found for %s ",path);
break;
# endif
}
i = x->x_folder;
if (i < glob_buffer.gl_pathc)
{
strncpy(path, glob_buffer.gl_pathv[i],strnlen(glob_buffer.gl_pathv[i],FILENAME_MAX));
strncat(path, "/*", 2);
}
else
{
post("fileselector: folder is greater than the number of folders");
globfree(&glob_buffer);
return;
}
}
if(x->x_type == 257) // Make the path to texts files
{
strncat(path,"/texts/*",8);
}
// Look for the file
switch(glob(path, GLOB_TILDE, NULL,&glob_buffer))
{
case GLOB_NOSPACE:
pd_error(x,"[fileselector] out of memory for \"%s\"",path);
break;
# ifdef GLOB_ABORTED
case GLOB_ABORTED:
pd_error(x,"[fileselector] aborted \"%s\"",path);
break;
# endif
# ifdef GLOB_NOMATCH
case GLOB_NOMATCH:
pd_error(x,"[fileselector] nothing found for \"%s\"",path);
break;
# endif
}
i = x->x_file;
if (i < glob_buffer.gl_pathc)
{
outlet_symbol(x->x_out, gensym(glob_buffer.gl_pathv[i]));
}
}
globfree( &(glob_buffer) );
}
static void fileselector_set(t_fileselector* x, t_symbol *s)
{
x->x_pattern = s;
}
static void fileselector_folder(t_fileselector* x, t_floatarg f)
{
x->x_folder = f;
return;
}
static void fileselector_file(t_fileselector* x, t_floatarg f)
{
x->x_file = f;
return;
}
static void fileselector_type(t_fileselector* x, t_floatarg f)
{
x->x_type = f;
return;
}
static void *fileselector_new()
{
t_fileselector *x = (t_fileselector *)pd_new(fileselector_class);
x->x_out = outlet_new((t_object *)x, &s_symbol);
x->x_folder = 0;
x->x_file = 0;
x->x_type = 0;
x->x_pattern = gensym("empty");
return (x);
}
void fileselector_setup(void)
{
fileselector_class = class_new(gensym("fileselector"),(t_newmethod)fileselector_new,0,sizeof(t_fileselector),0,A_DEFSYMBOL,A_DEFFLOAT,A_DEFFLOAT,A_DEFFLOAT, 0);
/* add inlet datatype methods */
class_addbang(fileselector_class,(t_method) fileselector_output);
/* add inlet message methods */
class_addmethod(fileselector_class,(t_method)fileselector_set,gensym("set"),A_DEFSYMBOL, 0);
// add inlet folder
class_addmethod(fileselector_class,(t_method)fileselector_folder,gensym("folder"),A_FLOAT, 0);
// add inlet file
class_addmethod(fileselector_class,(t_method)fileselector_file,gensym("file"),A_FLOAT, 0);
// add inlet type
class_addmethod(fileselector_class,(t_method)fileselector_type,gensym("type"),A_FLOAT, 0);
}

File diff suppressed because it is too large Load diff

View file

@ -38,17 +38,21 @@
#include "CITPDefines.h"
#include "MSEXDefines.h"
#include "ui_libremediaserver.h"
#include "olainterface.h"
#define VERSION "LibreMediaServer Version 0.04-5"
#define VERSION "LibreMediaServer Version 0.05-1"
#define COPYRIGHT "(C) 2012-2013 Santi Norena libremediaserver@gmail.com"
#define LICENSE "GPL 3 License. See LICENSE.txt and credits.txt for details"
class msex;
class QMenu;
class QProcess;
class olaInterface;
class libreMediaServer : public QMainWindow
{
friend class olaInterface;
Q_OBJECT
public:
@ -61,33 +65,23 @@ public:
protected:
QString m_pathmedia; // Path to Medias
msex *m_msex; // MSEx
olaInterface *m_olaInterface;
QProcess *m_ola; // OLA daemon process
QProcess *m_pd_video; // Pure Data process for video
QProcess *m_pd_audio; // Pure Data process for audio
// Video Sockets
QTcpSocket *m_pd_write_video;
// Video Unix Local Sockets
QLocalServer *m_server_vid;
QLocalSocket *m_read_vid;
// Audio TCP Sockets
QTcpSocket *m_pd_write_audio;
QTcpServer *m_pd_read_audio;
QTcpSocket *m_tcpsocket_audio;
QTimer *m_preview; // Timer for the preview screen
QLocalSocket *m_write_video;
int m_startvideo; // Counter starts video engine. Debugging purpose
int m_startaudio; // Counter starts audio engine. Debugging purpose
bool m_gui;
private:
bool sendPacket(const char *buffer, int bufferLen);
void pdstart();
void errorsending();
bool sendPacket_audio(const char *buffer, int bufferLen);
void pdstart_audio();
void errorsending_audio();
void pdstart();
void open_start();
void save_finish();
void open(QFile *file);
@ -97,6 +91,9 @@ private:
public slots:
void sendFrame();
bool sendPacket(const char *buffer, int bufferLen);
void sendPacket(int layer, int channel, int value);
bool newFile(QString file);
private slots:
@ -111,7 +108,6 @@ private slots:
void on_winpositiony_valueChanged();
void on_winsizex_valueChanged();
void on_winsizey_valueChanged();
void on_readDMX_stateChanged(int state);
void on_layer1Add_valueChanged();
void on_layer1Check_stateChanged (int state);
void on_layer2Add_valueChanged();
@ -131,44 +127,13 @@ private slots:
void on_fpsRate_valueChanged();
void pdrestart();
void stdout();
void on_video_stateChanged(int state);
void on_previewMaster_stateChanged(int state);
void on_previewLayer_stateChanged(int state);
//Audio
void newPeer_audio();
void newmessage_audio();
void newconexion_audio();
void on_readDMX_audio_stateChanged(int state);
void on_layer1Add_audio_valueChanged();
void on_layer1Check_audio_stateChanged (int state);
void on_layer2Add_audio_valueChanged();
void on_layer2Check_audio_stateChanged (int state);
void on_layer3Add_audio_valueChanged();
void on_layer3Check_audio_stateChanged (int state);
void on_layer4Add_audio_valueChanged();
void on_layer4Check_audio_stateChanged (int state);
void on_layer5Add_audio_valueChanged();
void on_layer5Check_audio_stateChanged (int state);
void on_layer6Add_audio_valueChanged();
void on_layer6Check_audio_stateChanged (int state);
void on_layer7Add_audio_valueChanged();
void on_layer7Check_audio_stateChanged (int state);
void on_layer8Add_audio_valueChanged();
void on_layer8Check_audio_stateChanged (int state);
void pdrestart_audio();
void stdout_audio();
void on_audio_stateChanged(int state);
// Preview
void previewMaster();
// Menu File
void openFile();
void saveFile();
void ChangeMediaPath();// Change the path to medias
// Menu CITP/MSEx
void initMSEX(); // Init the CITP/MSEx protocol
// void setIPAdd();
void makeThumbs();
};
#endif // LIBREMEDIASERVER_H

View file

@ -1,7 +1,7 @@
TEMPLATE = app
TARGET = libremediaserver
QT += network script webkit
CONFIG += release
CONFIG += debug
DESTDIR = ./debug
HEADERS += libremediaserver.h \
@ -10,14 +10,16 @@ HEADERS += libremediaserver.h \
PeerInformationSocket.h \
msex.h \
CITPDefines.h \
MSEXDefines.h
MSEXDefines.h \
olainterface.h
SOURCES += main.cpp \
libremediaserver.cpp \
citp-lib.cpp \
PacketCreator.cpp \
PeerInformationSocket.cpp \
msex.cpp
msex.cpp \
olainterface.cpp
FORMS += \
libremediaserver.ui
@ -25,6 +27,7 @@ FORMS += \
#INCLUDEPATH += ./
LIBS += -L./debug
LIBS += -lola -lolacommon
#win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../debug/release/ -lcitp
#else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../debug/debug/ -lcitp
@ -47,4 +50,5 @@ OTHER_FILES += \
../instalacion.txt \
../credits.txt \
../compiling.txt \
../changelog.txt
../changelog.txt \
dmx.xlm

View file

@ -100,41 +100,6 @@
<number>5000</number>
</property>
</widget>
<widget class="QSpinBox" name="ipAddress2">
<property name="geometry">
<rect>
<x>520</x>
<y>170</y>
<width>31</width>
<height>27</height>
</rect>
</property>
<property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum>
</property>
<property name="maximum">
<number>255</number>
</property>
</widget>
<widget class="QSpinBox" name="ipAddress4">
<property name="geometry">
<rect>
<x>600</x>
<y>170</y>
<width>31</width>
<height>27</height>
</rect>
</property>
<property name="frame">
<bool>true</bool>
</property>
<property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum>
</property>
<property name="maximum">
<number>255</number>
</property>
</widget>
<widget class="QLabel" name="winsizeLabel">
<property name="geometry">
<rect>
@ -252,19 +217,6 @@
<string>Window Position</string>
</property>
</widget>
<widget class="QCheckBox" name="readDMX">
<property name="geometry">
<rect>
<x>20</x>
<y>230</y>
<width>101</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>Read DMX</string>
</property>
</widget>
<widget class="QCheckBox" name="layer1Check">
<property name="geometry">
<rect>
@ -330,29 +282,6 @@
<string>Layer 7</string>
</property>
</widget>
<widget class="QSpinBox" name="universe">
<property name="geometry">
<rect>
<x>20</x>
<y>200</y>
<width>55</width>
<height>27</height>
</rect>
</property>
</widget>
<widget class="QCheckBox" name="video">
<property name="geometry">
<rect>
<x>20</x>
<y>150</y>
<width>93</width>
<height>26</height>
</rect>
</property>
<property name="text">
<string>Video</string>
</property>
</widget>
<widget class="QSpinBox" name="winsizey">
<property name="geometry">
<rect>
@ -366,19 +295,6 @@
<number>5000</number>
</property>
</widget>
<widget class="QLabel" name="universeLabel">
<property name="geometry">
<rect>
<x>20</x>
<y>180</y>
<width>91</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>OLA Universe</string>
</property>
</widget>
<widget class="QCheckBox" name="layer5Check">
<property name="geometry">
<rect>
@ -392,35 +308,6 @@
<string>Layer 5</string>
</property>
</widget>
<widget class="QLabel" name="CITPaddress_label">
<property name="geometry">
<rect>
<x>480</x>
<y>200</y>
<width>241</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>IP address interface for CITP/MSEx</string>
</property>
</widget>
<widget class="QSpinBox" name="ipAddress3">
<property name="geometry">
<rect>
<x>560</x>
<y>170</y>
<width>31</width>
<height>27</height>
</rect>
</property>
<property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum>
</property>
<property name="maximum">
<number>255</number>
</property>
</widget>
<widget class="QCheckBox" name="layer3Check">
<property name="geometry">
<rect>
@ -447,25 +334,6 @@
<number>5000</number>
</property>
</widget>
<widget class="QSpinBox" name="ipAddress1">
<property name="geometry">
<rect>
<x>480</x>
<y>170</y>
<width>31</width>
<height>27</height>
</rect>
</property>
<property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum>
</property>
<property name="keyboardTracking">
<bool>true</bool>
</property>
<property name="maximum">
<number>255</number>
</property>
</widget>
<widget class="QSpinBox" name="layer4Add">
<property name="geometry">
<rect>
@ -754,8 +622,6 @@
<zorder>layer5Add</zorder>
<zorder>layer6Check</zorder>
<zorder>winsizex</zorder>
<zorder>ipAddress2</zorder>
<zorder>ipAddress4</zorder>
<zorder>winsizeLabel</zorder>
<zorder>layer6Add</zorder>
<zorder>window</zorder>
@ -765,19 +631,12 @@
<zorder>layer2Add</zorder>
<zorder>layer4Check</zorder>
<zorder>winposLabel</zorder>
<zorder>readDMX</zorder>
<zorder>layer1Check</zorder>
<zorder>layer1Add</zorder>
<zorder>layer8Add</zorder>
<zorder>winpositiony</zorder>
<zorder>universe</zorder>
<zorder>video</zorder>
<zorder>winsizey</zorder>
<zorder>universeLabel</zorder>
<zorder>CITPaddress_label</zorder>
<zorder>ipAddress3</zorder>
<zorder>winpositionx</zorder>
<zorder>ipAddress1</zorder>
<zorder>layer4Add</zorder>
<zorder>layer1Preview</zorder>
<zorder>layer2Preview</zorder>
@ -794,400 +653,6 @@
<zorder>fpsLabel</zorder>
<zorder>fpsRate</zorder>
</widget>
<widget class="QWidget" name="Audio">
<attribute name="title">
<string>Audio</string>
</attribute>
<widget class="QCheckBox" name="readDMX_audio">
<property name="geometry">
<rect>
<x>10</x>
<y>290</y>
<width>101</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>Read DMX</string>
</property>
</widget>
<widget class="QLabel" name="layer1_audio">
<property name="geometry">
<rect>
<x>80</x>
<y>10</y>
<width>691</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>Layer 1</string>
</property>
</widget>
<widget class="QSpinBox" name="layer1Add_audio">
<property name="geometry">
<rect>
<x>20</x>
<y>10</y>
<width>55</width>
<height>27</height>
</rect>
</property>
<property name="maximum">
<number>512</number>
</property>
</widget>
<widget class="QLabel" name="layer8_audio">
<property name="geometry">
<rect>
<x>80</x>
<y>220</y>
<width>691</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Layer 8</string>
</property>
</widget>
<widget class="QCheckBox" name="layer2Check_audio">
<property name="geometry">
<rect>
<x>0</x>
<y>40</y>
<width>87</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QLabel" name="UniverseAudioLabel">
<property name="geometry">
<rect>
<x>210</x>
<y>290</y>
<width>91</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>OLA Universe</string>
</property>
</widget>
<widget class="QSpinBox" name="layer5Add_audio">
<property name="geometry">
<rect>
<x>20</x>
<y>130</y>
<width>55</width>
<height>27</height>
</rect>
</property>
<property name="maximum">
<number>512</number>
</property>
</widget>
<widget class="QSpinBox" name="layer3Add_audio">
<property name="geometry">
<rect>
<x>20</x>
<y>70</y>
<width>55</width>
<height>27</height>
</rect>
</property>
<property name="maximum">
<number>512</number>
</property>
</widget>
<widget class="QSpinBox" name="layer6Add_audio">
<property name="geometry">
<rect>
<x>20</x>
<y>160</y>
<width>55</width>
<height>27</height>
</rect>
</property>
<property name="maximum">
<number>512</number>
</property>
</widget>
<widget class="QLabel" name="layer2_audio">
<property name="geometry">
<rect>
<x>80</x>
<y>40</y>
<width>701</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Layer 2</string>
</property>
</widget>
<widget class="QCheckBox" name="layer1Check_audio">
<property name="geometry">
<rect>
<x>0</x>
<y>10</y>
<width>87</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QCheckBox" name="layer3Check_audio">
<property name="geometry">
<rect>
<x>0</x>
<y>70</y>
<width>87</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QLabel" name="layer7_audio">
<property name="geometry">
<rect>
<x>80</x>
<y>190</y>
<width>691</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Layer 7</string>
</property>
</widget>
<widget class="QSpinBox" name="layer8Add_audio">
<property name="geometry">
<rect>
<x>20</x>
<y>220</y>
<width>55</width>
<height>27</height>
</rect>
</property>
<property name="maximum">
<number>512</number>
</property>
</widget>
<widget class="QLabel" name="layer5_audio">
<property name="geometry">
<rect>
<x>80</x>
<y>130</y>
<width>691</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Layer 5</string>
</property>
</widget>
<widget class="QCheckBox" name="layer7Check_audio">
<property name="geometry">
<rect>
<x>0</x>
<y>190</y>
<width>87</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QSpinBox" name="layer4Add_audio">
<property name="geometry">
<rect>
<x>20</x>
<y>100</y>
<width>55</width>
<height>27</height>
</rect>
</property>
<property name="maximum">
<number>512</number>
</property>
</widget>
<widget class="QCheckBox" name="layer6Check_audio">
<property name="geometry">
<rect>
<x>0</x>
<y>160</y>
<width>87</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QSpinBox" name="layer2Add_audio">
<property name="geometry">
<rect>
<x>20</x>
<y>40</y>
<width>55</width>
<height>27</height>
</rect>
</property>
<property name="maximum">
<number>512</number>
</property>
</widget>
<widget class="QSpinBox" name="universe_audio">
<property name="geometry">
<rect>
<x>150</x>
<y>290</y>
<width>55</width>
<height>27</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="layer4_audio">
<property name="geometry">
<rect>
<x>80</x>
<y>100</y>
<width>701</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Layer 4</string>
</property>
</widget>
<widget class="QLabel" name="layer6_audio">
<property name="geometry">
<rect>
<x>80</x>
<y>160</y>
<width>691</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Layer 6</string>
</property>
</widget>
<widget class="QCheckBox" name="layer5Check_audio">
<property name="geometry">
<rect>
<x>0</x>
<y>130</y>
<width>87</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QCheckBox" name="audio">
<property name="geometry">
<rect>
<x>10</x>
<y>260</y>
<width>93</width>
<height>26</height>
</rect>
</property>
<property name="text">
<string>Audio</string>
</property>
</widget>
<widget class="QCheckBox" name="layer4Check_audio">
<property name="geometry">
<rect>
<x>0</x>
<y>100</y>
<width>87</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QCheckBox" name="layer8Check_audio">
<property name="geometry">
<rect>
<x>0</x>
<y>220</y>
<width>87</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QLabel" name="layer3_audio">
<property name="geometry">
<rect>
<x>80</x>
<y>70</y>
<width>701</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Layer 3</string>
</property>
</widget>
<widget class="QSpinBox" name="layer7Add_audio">
<property name="geometry">
<rect>
<x>20</x>
<y>190</y>
<width>55</width>
<height>27</height>
</rect>
</property>
<property name="maximum">
<number>512</number>
</property>
</widget>
<zorder>layer8Check_audio</zorder>
<zorder>layer6Check_audio</zorder>
<zorder>layer5Check_audio</zorder>
<zorder>layer4Check_audio</zorder>
<zorder>layer3Check_audio</zorder>
<zorder>layer1Check_audio</zorder>
<zorder>readDMX_audio</zorder>
<zorder>layer1_audio</zorder>
<zorder>layer1Add_audio</zorder>
<zorder>layer8_audio</zorder>
<zorder>layer2Check_audio</zorder>
<zorder>UniverseAudioLabel</zorder>
<zorder>layer5Add_audio</zorder>
<zorder>layer3Add_audio</zorder>
<zorder>layer6Add_audio</zorder>
<zorder>layer2_audio</zorder>
<zorder>layer7_audio</zorder>
<zorder>layer8Add_audio</zorder>
<zorder>layer5_audio</zorder>
<zorder>layer7Check_audio</zorder>
<zorder>layer4Add_audio</zorder>
<zorder>layer2Add_audio</zorder>
<zorder>universe_audio</zorder>
<zorder>layer4_audio</zorder>
<zorder>layer6_audio</zorder>
<zorder>audio</zorder>
<zorder>layer3_audio</zorder>
<zorder>layer7Add_audio</zorder>
</widget>
</widget>
<widget class="QPlainTextEdit" name="textEdit">
<property name="geometry">
@ -1226,16 +691,7 @@
<addaction name="actionChange_Media_Path"/>
<addaction name="actionLaunch_OLA_Setup"/>
</widget>
<widget class="QMenu" name="menuCITP_MSEx">
<property name="title">
<string>CITP/MSEx</string>
</property>
<addaction name="actionInitMSEX"/>
<addaction name="actionIP_Address"/>
<addaction name="actionMake_Thumbs"/>
</widget>
<addaction name="menuFile"/>
<addaction name="menuCITP_MSEx"/>
</widget>
<action name="actionExit">
<property name="text">

View file

@ -17,26 +17,17 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <QtDebug>
#include <QTimer>
#include <QTcpServer>
#include <QTcpSocket>
#include <QDir>
#include <QDateTime>
#include "msex.h"
#include "MSEXDefines.h"
#include "PacketCreator.h"
#include "citp-lib.h"
msex::msex(QObject *parent)
msex::msex(olaInterface *parent)
: QObject(parent),
m_peerState(STATE),
m_peerName(NAME),
m_listeningPort(LISTENTCPPORT),
m_tcpSocket(NULL)
{
// Iniciamos la lista de estatus de layer
/* // Iniciamos la lista de estatus de layer
LayerStatus layermodel;
m_layers.clear();
int i;
@ -54,24 +45,29 @@ msex::msex(QObject *parent)
}
// Variables para el buffer de LSTA
m_bufferLen = 0x00;
m_buffer = NULL;
m_pathmedia.clear();
m_buffer = NULL;*/
// Timer for frame preview
m_timer = new QTimer(this);
Q_CHECK_PTR(m_timer);
m_timer->setInterval(250);
// Inicio del TCP Server
m_tcpServer = new QTcpServer(this);
Q_CHECK_PTR(m_tcpServer);
m_media = parent->m_media;
if (!m_tcpServer)
qWarning("error TCP Server no creado");
if (!m_tcpServer->listen(QHostAddress::Any, LISTENTCPPORT))
{
qWarning("error creando tcpServer");
}
connect(m_tcpServer, SIGNAL(newConnection()),
this, SLOT(newPeer()));
// Timer for frame preview
n_timer = new QTimer(this);
Q_CHECK_PTR(n_timer);
connect(m_tcpServer, SIGNAL(newConnection()),this, SLOT(newPeer()));
m_citp = new CITPLib(this);
Q_CHECK_PTR(m_citp);
if (!m_citp->createPeerInformationSocket(NAME, STATE, 0x000000))
{
qWarning() << tr("msex|") << "CreatePeerInformationSocket failed" ;
}
}
// Propiedades de clase
msex::~msex()
@ -79,7 +75,7 @@ msex::~msex()
if (m_tcpServer)
m_tcpServer->close();
}
/*
QString msex::peerName() const
{
return m_peerName;
@ -99,7 +95,7 @@ quint16 msex::peerListeningPort() const
{
return m_listeningPort;
}
*/
void msex::newPeer()
{
if (m_tcpSocket != NULL) {return;}
@ -107,21 +103,21 @@ void msex::newPeer()
connect(m_tcpSocket, SIGNAL(readyRead()),
this, SLOT(handleReadyRead()));
// Ahora tenemos que mandar un Sinf para MSEX 1.1 y 1.0
//Creamos un paquete SINf
/* //Creamos un paquete SINf
int bufferLen = sizeof(struct CITP_MSEX_10_SINF);
unsigned char * buffer = PacketCreator::createSINFPacket(bufferLen);
if (!buffer)
{
qDebug() << "msex::new peer:createSINFPacket() failed";
qDebug() << "msex::new peer| CreateSINFPacket() failed";
return;
}
// Mandamos el paquete
if (!msex::sendPacket(buffer, bufferLen))
{
qDebug() << "msex::new peer: Send SInf Message failed";
qDebug() << "msex::new peer| Send SInf Message failed";
return;
}
qDebug() << "msex::new peer: SInf Sent...";
qDebug() << "msex| SInf Sent";*/
return;
/* Iniciamos el layer Status
// Creamos un paquete LSTA
@ -203,12 +199,12 @@ bool msex::sendPacket(const unsigned char *buffer, int bufferLen)
}
if (QAbstractSocket::ConnectedState != m_tcpSocket->state())
{
qDebug() << "msex::sendPacket() - Socket not connected";
qDebug() << tr("msex::sendPacket|") << "Socket not connected";
return false;
}
if (bufferLen != m_tcpSocket->write((const char*)buffer, bufferLen))
{
qDebug() << "msex::sendPacket() write failed:" << m_tcpSocket->error();
qDebug() << tr("msex::sendPacket|") << "write failed:" << m_tcpSocket->error();
return false;
}
delete buffer;
@ -350,25 +346,29 @@ void msex::parseGELIPacket(const QByteArray &byteArray)
struct CITP_MSEX_11_GELI *geliPacket = (struct CITP_MSEX_11_GELI*)data;
if (geliPacket->LibraryType != 0x01)
{
qDebug() << "parseGELIPacket:Not library type supported, only MEDIA now 0x01";
qDebug() << tr("msex:parseGELIPacket|") << "Not library type supported, only MEDIA now 0x01";
return;
}
// geliPacket->LibraryCount; necesario para hacer ELIN. Si 0 mandar todas las bibliotecas
// geliPacket->LibraryNumbers[] ; Requested libraries si LibraryCount > 0
// geliPacket->LibraryParentId.MSEXLibraryId si 0,0,0,0 mandar el canal actual de folder
// Creamos un paquete ELin
int bufferLen = sizeof(struct CITP_MSEX_ELIn);
unsigned char * buffer = PacketCreator::createELINPacket(m_media, bufferLen);
if (!buffer)
{
qDebug() << "parseGELIPacket:createELINPacket() failed";
qWarning() << "msex|"<< "createELINPacket failed";
return;
}
// Mandamos el paquete
if (!msex::sendPacket(buffer, bufferLen))
{
qDebug() << "parseGELIPacket: Send ELin Message failed";
return;
qWarning() << "msex:parseGELIPacket|" << "Send ELin Message failed";
} else { qDebug() << "msex|" << "parseGELIPacket finish ok. ELin Sent";
}
qDebug() << "parseGELIPacket finish ok. ELin Sent...";
}
void msex::parseGEINPacket(const QByteArray &byteArray)
@ -377,8 +377,8 @@ void msex::parseGEINPacket(const QByteArray &byteArray)
struct CITP_MSEX_10_GEIn *geinPacket = (struct CITP_MSEX_10_GEIn*)data;
qDebug() << "GEIn arrives: Elemet count:" << geinPacket->ElementCount << "Libray Id:" << geinPacket->LibraryId << "Library Type:" << geinPacket->LibraryType;
int bufferLen = sizeof (struct CITP_MSEX_10_MEIn);
if (!(geinPacket->LibraryId < m_media.size())) {
qDebug() << "Library ID exceeds size list";
if (!(geinPacket->LibraryId < m_media->size())) {
qDebug() << "msex|" << "Library ID exceeds size list";
/*unsigned char * buffer = PacketCreator::createMEINPacket(m_media.at(geinPacket->LibraryId),bufferLen);
if (!buffer)
{
@ -395,16 +395,16 @@ void msex::parseGEINPacket(const QByteArray &byteArray)
}
else {
unsigned char * buffer = PacketCreator::createMEINPacket(m_media.at(geinPacket->LibraryId),bufferLen);
unsigned char * buffer = PacketCreator::createMEINPacket(m_media->at(geinPacket->LibraryId),bufferLen);
if (!buffer)
{
qDebug() << "parseGEINPacket:createMEINPacket() failed";
qWarning() << "msex|" << "parseGEINPacket:createMEINPacket() failed";
return;
}
// Mandamos el paquete
if (!msex::sendPacket(buffer, bufferLen))
{
qDebug() << "parseGEINPacket: Send MEIn Message failed";
qWarning() << "msex|" << "parseGEINPacket: Send MEIn Message failed";
return;
}
}
@ -421,28 +421,28 @@ void msex::parseGETHPacket(const QByteArray &byteArray)
{
const char *data = byteArray.constData();
struct CITP_MSEX_10_GETh *gethPacket = (struct CITP_MSEX_10_GETh*)data;
qDebug() << "GETh arrives. Format:"<< gethPacket->ThumbnailFormat<<"Width:"<<gethPacket->ThumbnailWidth<<"Height:"<<gethPacket->ThumbnailHeight;
qDebug() << "Library Number:"<<gethPacket->LibraryNumber<<"Element COunt:"<<gethPacket->ElementCount<<"ElementNumber:"<<gethPacket->ElementNumber;
qDebug() << "msex|" << "GETh arrives. Format:"<< gethPacket->ThumbnailFormat<<"Width:"<<gethPacket->ThumbnailWidth<<"Height:"<<gethPacket->ThumbnailHeight;
qDebug() << "msex|" << "Library Number:"<<gethPacket->LibraryNumber<<"Element COunt:"<<gethPacket->ElementCount<<"ElementNumber:"<<gethPacket->ElementNumber;
int bufferLen = sizeof (struct CITP_MSEX_10_ETHN);
if (!(gethPacket->LibraryNumber < m_media.size())) {
if (!(gethPacket->LibraryNumber < m_media->size())) {
qDebug() << "Library ID exceeds size list";
return;
}
MediaLibrary mediai = m_media.at(gethPacket->LibraryNumber);
MediaLibrary mediai = m_media->at(gethPacket->LibraryNumber);
if (mediai.m_ElementCount <= gethPacket->ElementNumber){
qDebug() << "Element Number is greater than the elements in library";
qDebug() << "Element Number is greater than the files in library";
return;
}
unsigned char * buffer = PacketCreator::createETHNPacket(m_pathmedia, mediai, gethPacket->ElementNumber, bufferLen);
unsigned char * buffer = PacketCreator::createETHNPacket(mediai, gethPacket->ElementNumber, bufferLen);
if (!buffer)
{
qDebug() << "parseGETHPacket:createETHNPacket() failed";
qWarning() << "msex|"<< "parseGETHPacket:createETHNPacket() failed";
return;
}
// Mandamos el paquete
if (!msex::sendPacket(buffer, bufferLen))
{
qDebug() << "parseGETHPacket: Send ETHN Message failed";
qWarning() << "msex|" <<"parseGETHPacket: Send ETHN Message failed";
return;
}
}
@ -454,13 +454,13 @@ void msex::parseGVSRPacket()
const char * buffer = PacketCreator::createVSRCPacket(bufferLen);
if (!buffer)
{
qDebug() << "parseGVSRacket:createVSRCPacket() failed";
qWarning() << "msex|"<<"parseGVSRacket:createVSRCPacket() failed";
return;
}
// Mandamos el paquete
if (!msex::sendPacket(buffer, bufferLen))
{
qDebug() << "parseGVSRPacket: Send VRSC Message failed";
qWarning() << "msex|"<<"parseGVSRPacket: Send VRSC Message failed";
return;
}
delete buffer;
@ -472,9 +472,9 @@ void msex::parseRQSTPacket(const QByteArray &byteArray)
struct CITP_MSEX_RqSt *Packet = (struct CITP_MSEX_RqSt*)data;
// Here we need start the streaming MagicQ 88x64 RGB8 1 FPS
// Iniciamos el timer
if (!n_timer->isActive()) {
n_timer->setInterval(1000 * Packet->fps);
n_timer->start();
if (!m_timer->isActive()) {
m_timer->setInterval(1000 * Packet->fps);
m_timer->start();
}
}
@ -490,7 +490,7 @@ bool msex::sendNACK(quint32 header)
if (!sendPacket(buffer, bufferLen))
{
qDebug() << "sendNACK failed";
qWarning() << "msex|"<< "sendNACK failed";
return false;
}
return true;
@ -498,111 +498,51 @@ bool msex::sendNACK(quint32 header)
// Fin de mensajes MSEX
bool msex::updatemedia()
{
qDebug()<<"Actualizando biblioteca de medias en " << m_pathmedia;
QDir dir;
dir.cd(m_pathmedia);
m_media.clear();
// Miramos cuantas librerías tenemos en /video
if (!dir.cd("video"))
{ qWarning("Cannot cd to the video directory");
return false;
void msex::sendFrame(QImage image){
m_timer->stop();
if (!image.byteCount()) {
qWarning()<<"msex|" << "sendFrame: Can not capture FrameBuffer";
return;
}
dir.setFilter(QDir::Dirs | QDir::NoSymLinks | QDir::NoDotAndDotDot);
QFileInfoList filelist = dir.entryInfoList();
dir.setFilter(QDir::Files);
QFileInfo fileInfo;
struct MediaLibrary mediai;
int i;
for (i = 0; i < filelist.size(); ++i) {
fileInfo = filelist.at(i);
QString name = fileInfo.baseName();
dir.cd(fileInfo.baseName());
mediai.m_Id = i;
mediai.m_DMXRangeMax = i;
mediai.m_DMXRangeMin = i;
mediai.m_Name = name;
// mediai.m_LibraryCount = 0; msex 1.2
mediai.m_ElementCount = dir.count();
mediai.m_MediaInformation = getMediaInformation(dir);
dir.cdUp();
m_media.append(mediai);
}
/*
// Miramos las librerías en /imagenes
i++;
dir.cd(m_pathmedia);
if (!dir.cd("image"))
int bufferLen = image.byteCount();
int bufferLenTot = sizeof(struct CITP_MSEX_10_StFr ) + bufferLen;
uchar * buffer = new uchar[bufferLenTot];
memset(buffer, 0, bufferLenTot);
CITP_MSEX_10_StFr *packet = (CITP_MSEX_10_StFr *)buffer;
// CITP header
packet->CITPMSEXHeader.CITPHeader.Cookie = COOKIE_CITP;
packet->CITPMSEXHeader.CITPHeader.VersionMajor = 0x01;
packet->CITPMSEXHeader.CITPHeader.VersionMinor = 0x00;
packet->CITPMSEXHeader.CITPHeader.Reserved[0] = 0x00;
packet->CITPMSEXHeader.CITPHeader.Reserved[1] = 0x00;
packet->CITPMSEXHeader.CITPHeader.MessageSize = bufferLenTot;
packet->CITPMSEXHeader.CITPHeader.MessagePartCount = 0x01;
packet->CITPMSEXHeader.CITPHeader.MessagePart = 0x00; // XXX - doc says 0-based?
packet->CITPMSEXHeader.CITPHeader.ContentType = COOKIE_MSEX;
// MSEX header
packet->CITPMSEXHeader.ContentType = COOKIE_MSEX_STFR;
packet->CITPMSEXHeader.VersionMajor = 0x01;
packet->CITPMSEXHeader.VersionMinor = 0x00;
//STFR Content
packet->FrameBufferSize = bufferLen;
packet->FrameFormat = 943867730;
packet->FrameHeight = 64;
packet->FrameWidth = 88;
packet->SourceIdentifier = 0x0001;
// Copiamos los datos del thumbnail
int offset = sizeof(struct CITP_MSEX_10_StFr);
memcpy((buffer+offset), image.bits(), bufferLen);
if (!buffer)
{
qWarning("Can not find images dir");
return false;
qWarning() << "msex|" << "sendFrame:create packet failed";
return;
}
mediai.m_Id = i;
mediai.m_DMXRangeMax = i;
mediai.m_DMXRangeMin = i;
mediai.m_Name = "Images";
// mediai.m_LibraryCount = 0; msex 1.2
mediai.m_ElementCount = dir.count();
mediai.m_MediaInformation = getMediaInformation(dir);
dir.cdUp();
m_media.append(mediai);
// Creamos una vacía
i++;
mediai.m_Id = i;
mediai.m_DMXRangeMax = i;
mediai.m_DMXRangeMin = i;
mediai.m_Name = "empty";
// mediai.m_LibraryCount = 0; msex 1.2
mediai.m_ElementCount = 0x00;
// mediai.m_MediaInformation = NULL;
m_media.append(mediai);
*/
// Lanzar aquí la creación de thumbs?
// Mandamos las señal ELup (Msex 1.2)
return true;
}
QList<MediaInformation> msex::getMediaInformation(QDir dir)
{
QList<MediaInformation> mediaList;
MediaInformation mediainf;
dir.setFilter(QDir::Files);
QFileInfoList filelist = dir.entryInfoList();
QFileInfo fileInfo;
for (int i = 0; i < filelist.size(); ++i) {
fileInfo = filelist.at(i);
QDateTime date = fileInfo.created();
mediainf.Number = i;
mediainf.DMXRangeMin = i;
mediainf.DMXRangeMax = i;
mediainf.MediaName = fileInfo.baseName();
// mediainf.MediaVersionTimestamp = date.toMSecsSinceEpoch();
mediainf.MediaWidth = 320;
mediainf.MediaHeight = 200;
mediainf.MediaLength = 1000;
mediainf.MediaFPS = 25;
mediaList.append(mediainf);
}
return mediaList;
}
void msex::setpath(QString path)
{
//m_pathmedia = NULL;
m_pathmedia.clear();
m_pathmedia.append(path);
}
void msex::startCitp(quint32 ipadd)
{
m_citp = new CITPLib(this);
Q_CHECK_PTR(m_citp);
if (!m_citp->createPeerInformationSocket(NAME, STATE, ipadd))
// Mandamos el paquete
if (!sendPacket(buffer, bufferLenTot))
{
qDebug()<<("CreatePeerInformationSocket failed");
qWarning() << "msex|" <<"sendFrame: send packet failed";
return;
}
m_timer->start();
}

View file

@ -22,43 +22,37 @@
#define MSEX_H
#include <QObject>
#include <QHostAddress>
#include <QtNetwork/QHostAddress>
#include <QtNetwork/QTcpServer>
#include <QtNetwork/QTcpSocket>
#include <QtDebug>
#include <QTimer>
#include "MSEXDefines.h"
#include "olainterface.h"
#include "citp-lib.h"
#include "libremediaserver.h"
#include "PacketCreator.h"
class QTimer;
class QTcpSocket;
class QTcpServer;
class QDir;
class CITPLib;
//class olaInterface;
class msex : public QObject
{
Q_OBJECT
public:
msex(QObject *parent);
msex(olaInterface * parent);
virtual ~msex();
// virtual QString peerName() const;
// virtual QString peerState() const;
// virtual QString peerHost() const;
// virtual quint16 peerListeningPort() const;
// void previewLayer1();
bool CreateMSEXSocket();
bool updatemedia();
virtual void setpath(QString path); // path to media dir
void startCitp(quint32 ipadd); // Start the Peer Informatio Socket
bool sendPacket(const unsigned char *buffer, int bufferLen);
virtual QString peerName() const;
virtual QString peerState() const;
virtual QString peerHost() const;
virtual quint16 peerListeningPort() const;
QTimer *n_timer; // Frame Request
QList<LayerStatus> m_layers;
QList<MediaLibrary> m_media;
QTimer *m_timer; // Frame Request
protected:
CITPLib *m_citp; // CITP Peer. PLOc and frame transmit
QString m_pathmedia;
CITPLib *m_citp; // CITP Peer. Ploc and frame transmit
QList<MediaLibrary> * m_media; // Link to the MediaLibrary in parent.
unsigned char * m_buffer;
int m_bufferLen;
QString m_peerState;
@ -68,6 +62,9 @@ protected:
QTcpServer *m_tcpServer;
QTcpSocket *m_tcpSocket;
QList<LayerStatus> m_layers;
bool sendPacket(const unsigned char *buffer, int bufferLen);
bool sendPacket(const char *buffer, int bufferLen);
bool sendNACK(quint32 header);
@ -86,12 +83,15 @@ protected:
void parseGELNPacket(const QByteArray &byteArray);
void parseRQSTPacket(const QByteArray &byteArray);
private:
QList<MediaInformation> getMediaInformation(QDir dir);
public slots:
void sendFrame(QImage image);
protected slots:
void handleReadyRead();

View file

@ -1,676 +0,0 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

View file

@ -1,68 +0,0 @@
*******************************************************************************
ola2pd 0.02 6/01/2013
(C) 2012-2013 Santi Noreña belfegor<AT>gmail.com
Based on dmxmonitor by Dirk Jagdmann doj<AT>cubic.org
and dmxmonitor_ola by Simon Newton nomis52<AT>gmail.com
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*******************************************************************************
ola2pd es un objeto de Pure Data que permite leer un universo DMX512 del demonio de Open Lighting Arquitecture. Este proporciona soporte para muchos protocoles de iluminación basados en red (Pathport, ArtNet, ACN, ShowNet, SandNet) y dispositivos USB-DMX (Enttec Open DMX Pro, Velleman, Robe,...).
El objeto está desarrollado con las cabeceras Flext de Thomas Grill. Se incluye el binario para GNU/Linux, testeado en Debian Wheezy y Ubuntu Precise 12.04.
*******************************************************************************
Instalación:
- Instala y configura OLA siguiendo las instrucciones de http://code.google.com/p/linux-lighting
- Copia el archivo ola2pd.pd_linux en una carpeta que esté dentro de las rutas de Pure Data (la carpeta pd-externals en la carpeta de usuario es el sitio indicado) o en la carpeta del patch que uses.
- Si el binario no funciona en tu distribución puedes probar a compilarlo tú mismo. Necesitas tener instalado y compilado flext, y las fuentes de Pure Data/Max. Después se puede compilar con el build.sh de flext bash /home/user/flext/build.sh <system> <compiler>.
- En Ubuntu hay que hacer un paso más. El gcc de Ubuntu tiene una opción habilitada que hace que build.sh no linke bien la biblioteca ola. Como workaround copia la salida de la terminal entre el último g+++ y -lflext-pd_t en un archivo de texto y mueve -lola al final de la línea. Copia todo de nuevo y pégalo en terminal.
En mi caso copio
g++ -L/usr/include/ola -lola -pthread -shared -Wl,-S -L/home/santi/PMS/pd-0.43-2/bin -L/usr/lib -o pd-linux/release-multi/ola2pd.pd_linux pd-linux/release-multi/main.opp -lflext-pd_t
y lo cambio a
g++ -L/usr/include/ola -pthread -shared -Wl,-S -L/home/santi/PMS/pd-0.43-2/bin -L/usr/lib -o pd-linux/release-multi/ola2pd.pd_linux pd-linux/release-multi/main.opp -lflext-pd_t -lola
Después ya se tiene el binario listo para usar.
*******************************************************************************
Uso:
- El demonio olad debe de estar corriendo en el sistema y con un universo al menos configurado como input para que podamos tomar datos de él.
- El demonio olad escucha en el interface activo con la IP más baja, típicamente 2.x.x.x. Podemos ver si están llegando datos dirigiendo un navegador web a localhost:9090. Después pinchando en el universo que queramos monitorizar y luego pinchando en la pestaña "DMX MMonitor".
- Están disponibles los 512 canales; El objeto saca una lista de 512 enteros.
- Antes de que el objeto empiece a sacar valores hay que crear el nodo. Para ello hay que mandar un mensaje [open]. Antes de ello podemos configurar el universo de OLA al que queremos que escuche con el mensaje <universe x>. donde x es el número de universo OLA. Por defecto escucha en el universo 0. Si queremos cambiar el universo de escucha hay que cerrar el nodo mandando un mensaje [close], mandar el mensaje <universe x>, y volver a mandar [open]
*******************************************************************************
Créditos:
- Simon Newton por OLA y ola_dmxmonitor. Esto es una modificación de ese código.
*******************************************************************************
Repositorio SVN:
http://code.google.com/p/libremediaserver/externals/ola2pd
Contacto:
belfegor@gmail.com
*******************************************************************************

View file

@ -1,197 +0,0 @@
/*
* ola2pd - interface from Open Lighting Arquitecture to Pure Data
* v 0.03
*
* Copyright (c) 2012-2013 Santiago Noreña (libremediaserver@gmail.com)
*
* ola2pd is an external for Pure Data and Max that reads one DMX512
* universe from the Open Lighting Arquitecture and output it like a list
* of 512 channels.
*
* Based on dmxmonitor Copyright (C) 2001 Dirk Jagdmann <doj@cubic.org>
* and ola_dmxmonitor by Simon Newton (nomis52<AT>gmail.com)
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
// Define flext
#define FLEXT_USE_CMEM 1
//#define FLEXT_SHARED 1
#define FLEXT_ATTRIBUTES 1
#include <flext.h>
#if !defined(FLEXT_VERSION) || (FLEXT_VERSION < 500)
#error You need at least flext version 0.5.0
#endif
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
// Define general
#include <errno.h>
#include <string>
// Define ola
#include <ola/BaseTypes.h>
#include <ola/Callback.h>
#include <ola/OlaCallbackClient.h>
#include <ola/OlaClientWrapper.h>
#include <ola/DmxBuffer.h>
#include <ola/io/SelectServer.h>
#include <ola/network/TCPSocket.h>
using ola::DmxBuffer;
using ola::OlaCallbackClient;
using ola::OlaCallbackClientWrapper;
using ola::io::SelectServer;
using std::string;
class ola2pd:
public flext_base
{
FLEXT_HEADER_S(ola2pd,flext_base,setup)
public:
// constructor with no arguments
ola2pd():
// initialize data members
m_universe(0),
m_clientpointer(NULL),
m_counter(0)
// m_stdin_descriptor(STDIN_FILENO)
{
// --- define inlets and outlets ---
AddInAnything(); // default inlet
AddOutList(); // outlet for DMX list
post("ola2pd v0.02 - an interface to Open Lighting Arquitecture");
post("(C) 2012-2013 Santi Noreña libremediaserver@gmail.com");
}
void NewDmx(unsigned int universe,
const DmxBuffer &buffer,
const string &error);
void RegisterComplete(const string &error);
// void StdinReady();
bool CheckDataLoss();
protected:
void m_open() {
if (m_clientpointer == NULL)
{
// set up ola connection
if (!m_client.Setup()) {
post("%s: %s",thisName(), strerror(errno));
}
m_clientpointer = m_client.GetClient();
m_clientpointer->SetDmxCallback(ola::NewCallback(this, &ola2pd::NewDmx));
m_clientpointer->RegisterUniverse(m_universe,ola::REGISTER,ola::NewSingleCallback(this, &ola2pd::RegisterComplete));
// m_client.GetSelectServer()->AddReadDescriptor(&m_stdin_descriptor);
// m_stdin_descriptor.SetOnData(ola::NewCallback(this, &ola2pd::StdinReady));
m_client.GetSelectServer()->RegisterRepeatingTimeout(5000,ola::NewCallback(this, &ola2pd::CheckDataLoss));
post("ola2pd: Init complete. Start listening...");
m_client.GetSelectServer()->Run();
}
}
void m_close() {
if (m_clientpointer != NULL)
{
m_clientpointer->RegisterUniverse(m_universe,ola::UNREGISTER,ola::NewSingleCallback(this, &ola2pd::RegisterComplete));
m_client.GetSelectServer()->Terminate();
post("ola2pd: Close complete");
m_clientpointer = NULL;
}
}
void m_bang() {
if (m_clientpointer != NULL) {post("%s listening on universe %d",thisName(),m_universe);}
else {post("%s configured on universe %d. Send open to start listening",thisName(),m_universe);}
}
private:
unsigned int m_universe;
unsigned int m_counter;
// ola::io::UnmanagedFileDescriptor m_stdin_descriptor;
struct timeval m_last_data;
OlaCallbackClientWrapper m_client;
OlaCallbackClient *m_clientpointer;
static void setup(t_classid c)
{
// --- set up methods (class scope) ---
// register a bang method to the default inlet (0)
FLEXT_CADDBANG(c,0,m_bang);
// set up tagged methods for the default inlet (0)
FLEXT_CADDMETHOD_(c,0,"open",m_open);
FLEXT_CADDMETHOD_(c,0,"close",m_close);
// --- set up attributes (class scope) ---
FLEXT_CADDATTR_VAR1(c,"universe",m_universe);
}
FLEXT_CALLBACK(m_bang)
FLEXT_THREAD(m_open)
FLEXT_CALLBACK(m_close)
FLEXT_ATTRVAR_I(m_universe) // wrapper functions (get and set) for integer variable universe
};
// instantiate the class (constructor takes no arguments)
FLEXT_NEW("ola2pd",ola2pd)
/*
* Called when there is new DMX data
*/
void ola2pd::NewDmx(unsigned int universe,
const DmxBuffer &buffer,
const string &error) {
m_counter++;
gettimeofday(&m_last_data, NULL);
int z;
AtomList dmxlist;
dmxlist(512);
for(z=0; z < 512; z++){SetFloat(dmxlist[z],(buffer.Get(z)));}
ToOutList(0, dmxlist);
}
/*
* Check for data loss.
*/
bool ola2pd::CheckDataLoss() {
struct timeval now, diff;
if (timerisset(&m_last_data)) {
gettimeofday(&now, NULL);
timersub(&now, &m_last_data, &diff);
if (diff.tv_sec > 4 || (diff.tv_sec == 4 && diff.tv_usec > 4000000)) {
// loss of data
post("ola2pd: Can not read DMX!");
}
}
return true;
}
/*
* Control de errores en el registro de Universos en OLA
*/
void ola2pd::RegisterComplete(const string &error) {
if (!error.empty()) {
post("ola2pd:Register command failed");
m_client.GetSelectServer()->Terminate();
}
}

View file

@ -1,34 +0,0 @@
#N canvas 533 109 610 300 10;
#X obj 192 126 ola2pd;
#X obj 324 52 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X msg 190 47 open;
#X msg 240 49 close;
#X msg 92 68 universe 0;
#X msg 8 68 universe 2;
#X obj 192 175 list split 4;
#X obj 192 219 unpack f f f f;
#X floatatom 110 252 5 0 0 0 - - -;
#X floatatom 192 253 5 0 0 0 - - -;
#X floatatom 278 253 5 0 0 0 - - -;
#X floatatom 356 253 5 0 0 0 - - -;
#X text 98 268 Channel 1;
#X text 182 270 Channel 2;
#X text 267 270 Channel 3;
#X text 348 270 Channel 4;
#X text 11 6 ola2pd - Interface for reading dmx data from Open Lightin
Arquitecture. (c) 2012-2013 Santi Noreña - GPL License;
#X text 248 103 Start and configure olad before sending open to ola2pd!
;
#X text 16 52 OLA Universe to bind;
#X connect 0 0 6 0;
#X connect 1 0 0 0;
#X connect 2 0 0 0;
#X connect 3 0 0 0;
#X connect 4 0 0 0;
#X connect 5 0 0 0;
#X connect 6 0 7 0;
#X connect 7 0 8 0;
#X connect 7 1 9 0;
#X connect 7 2 10 0;
#X connect 7 3 11 0;

View file

@ -1,19 +0,0 @@
NAME=ola2pd
SRCS=main.cpp
# user defined compiler flags
UFLAGS += -v
# user defined linker flags
LDFLAGS += -lola
# FLEXT HEADERS
# multithreading
BUILDTYPE=multi
# Type mode of the release
BUILDMODE=release

View file

@ -1,71 +0,0 @@
*******************************************************************************
ola2pd 0.02 6/1/2013
(C) 2012-2013 Santi Noreña belfegor<AT>gmail.com
Based on dmxmonitor by Dirk Jagdmann doj<AT>cubic.org
and dmxmonitor_ola by Simon Newton nomis52<AT>gmail.com
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*******************************************************************************
ola2pd is an external for Pure Data that reads one DMX512 universe from the Open Lighting Arquitecture daemon. OLA supports a lot of of lighting protocols (ArtNet, Pathport, ACN, ShowNet, SandNet) and USB-DMX devices (Enttec Open DMX Pro, Velleman, Robe,...)
Ola2pd has been developed with the flext headers from Thoma Grill. The binary file included has been tested in Ubuntu Precise 12.04 and Debian Wheezy.
*******************************************************************************
Install:
- Install and set up OLA following the project instructions from http://code.google.com/p/linux-lighting
- Copy the file ola2pd.pd_linux in a folder in the Pure Data paths. ~/pd-extenals is a good place, or in the folder of the patch you are using.
- If the binary doesn't work in you distribution, you can try compiling it yourself. You need having compiled and installed the flext headers http://grrrr.org/research/software/flext/, the Pure Data sources, and the OLA headers. See build.txt in the flext package for details. Basically you must run the flext build tool (build.sh) in the ola2pd folder.
- For Ubuntu there is an aditional compilation step. Ubuntu's gcc has a option making buils.sh doesn't link correctly the OLA library. You can copy the last command of the build.sh terminal output and change the option -lola to the end of the command. For me, i copy:
g++ -L/usr/include/ola -lola -pthread -shared -Wl,-S -L/home/santi/PMS/pd-0.43-2/bin -L/usr/lib -o pd-linux/release-multi/ola2pd.pd_linux pd-linux/release-multi/main.opp -lflext-pd_t
and i change to:
g++ -L/usr/include/ola -pthread -shared -Wl,-S -L/home/santi/PMS/pd-0.43-2/bin -L/usr/lib -o pd-linux/release-multi/ola2pd.pd_linux pd-linux/release-multi/main.opp -lflext-pd_t -lola
After you can run
strip --strip-unneeded pd-linux/release-multi/ola2pd.pd_linux
to make the binary smaller. After, the binary is ready to work
*******************************************************************************
Usage:
- The ola daemon must be running in the system and set up with at least one input universe.
- olad listens on the network interface with lower IP address, tipically 2.x.x.x. You can see if valid data is arriving pointing one web browser to localhost:9090. Click in the universe you want and click in the "DMX Monitor" tab. You should see the arriving data.
- Before ola2pd begins output values, we can configure the listening universe with the message [universe x), where x is the number of the OLA universe we want to listen. The object begins listening with [open) message. We can change the listening universe closing the connection with a [close) message, sending the new universe and reopening the node.
- ola2pd outputs a list with the 512 channel of the universe. We can manipulate with [list split] and [unpack].
- See ola2pd-help.pd
*******************************************************************************
Credits:
- Simon Newton for OLA and ola_dmxmonitor, this is a modification of that code.
*****************************
SVN:
http://code.google.com/p/puremediaserver/externals/ola2pd
Contact:
belfegor@gmail.com
*****************************

413
src/olainterface.cpp Executable file
View file

@ -0,0 +1,413 @@
/* olainterface.cpp
Santi Noreña 2013
It includes two classes:
olaWorker is the threading class that reads raw DMX from ola daemon and save it into a buffer ordered in layers
olaInterface controls olaWorker and translates DMX values received from olaWorker into orders to RenderingManager and Source
*/
#include "olainterface.h"
olaInterface::olaInterface()
{
qDebug() << tr("olaInterface|") << "Starting";
m_thread = NULL;
worker = new olaWorker();
Q_CHECK_PTR(worker);
readDataFromXML(); // Read the dmx setting from dmx.xml
connect (worker, SIGNAL(dmx(int,int,int)), this, SLOT(dmx(int,int,int)), Qt::QueuedConnection); // The DMX values.
initMediaLibrary(); // Init the media library reading the files in m_pathmedia
m_msex = new msex(this); // Init the CITP/MSEx protocol
Q_CHECK_PTR(m_msex);
open();
}
olaInterface::~olaInterface()
{
close();
}
// Starts olaWorker in a new thread.
void olaInterface::open()
{
m_thread = new QThread;
Q_CHECK_PTR(m_thread);
worker->moveToThread(m_thread);
connect(m_thread, SIGNAL(started()), worker, SLOT(olastart()));
connect(m_thread, SIGNAL(finished()), m_thread, SLOT(deleteLater()));
m_thread->start();
}
// Close olaWorker and finish the thread
void olaInterface::close()
{
worker->blockSignals(true);
worker->olastop();
delete worker;
}
// Read the dmx settings for dmx.xml At the moment we need:
// - The path to the medias folder tree
// - The number of sources/layers controlled by DMX
// - The first DMX channel of each source/layer
// - The universe to bind in OLA
void olaInterface::readDataFromXML() {
QFile* xmlFile = new QFile("dmx.xlm");
if (!xmlFile->open(QIODevice::ReadOnly | QIODevice::Text)) {
QMessageBox::critical(NULL,"Load XML File Problem",
"Couldn't open dmx.xml to load settings for olaInterface",
QMessageBox::Ok);
return;
}
QXmlStreamReader* xmlReader = new QXmlStreamReader(xmlFile);
int counter = 0;
//Parse the XML until we reach end of it
while(!xmlReader->atEnd() && !xmlReader->hasError()) {
// Read next element
QXmlStreamReader::TokenType token = xmlReader->readNext();
//If token is just StartDocument - go to next
if(token == QXmlStreamReader::StartDocument) {
continue;
}
//If token is StartElement - read it
if(token == QXmlStreamReader::StartElement) {
if(xmlReader->name() == "dmxSettings") {
int version = xmlReader->attributes().value("fileVersion").toLocal8Bit().toInt();
if(version == 1) {
worker->m_layersNumber = xmlReader->attributes().value("layersNumber").toLocal8Bit().toInt();
m_pathmedia = xmlReader->attributes().value("path").toLocal8Bit();
continue;
}
}
if (worker->m_layersNumber > MAX_SOURCE_DMX) {
worker->m_layersNumber = MAX_SOURCE_DMX;
}
QString add = "layer";
add.append(QString("%1").arg(counter));
if((xmlReader->name() == add) && (counter < worker->m_layersNumber)) {
dmxSettings temp;
temp.address = xmlReader->attributes().value("dmx").toLocal8Bit().toInt() - 1;
temp.universe = xmlReader->attributes().value("universe").toLocal8Bit().toInt();
worker->m_settings.replace(counter ,temp);
// If the universe is not in the list, append it.
if(!worker->m_universe.contains(temp.universe)) {
worker->m_universe.append(temp.universe);
}
}
counter++;
}
}
if(xmlReader->hasError()) {
QMessageBox::critical(NULL,"xmlFile.xml Parse Error",xmlReader->errorString(), QMessageBox::Ok);
}
//close reader and flush file
xmlReader->clear();
xmlFile->close();
delete xmlReader;
delete xmlFile;
}
////////////////////////////////////////////////////////////
//
// Parse new DMX
//
////////////////////////////////////////////////////////////
//New dmx. Connected with signal newdmx from olaInterface->Worker
void olaInterface::dmx(int layer, int channel, int value)
{
// This qDebug slows all the program. Uncomment only for debugging purpouse and comment again in normal use
// qDebug() << tr("olaInterface|") << "newdmx layer" << layer << "channel" << channel << "value" << value;
switch(channel){
case DMX_FOLDER:// Folder
case DMX_FILE:// File
requestNewFile(layer, 1);
break;
case DMX_SOURCETYPE:// Source type
if(value < 25)
{
requestNewFile(layer, 0);
} else if (value > 24 && value < 50) { // Create a video source
requestNewFile(layer, 1);
} else if (value > 49 && value < 75){ // Create a Picture
requestNewFile(layer, 2);
} else if (value > 74 && value < 100) { // Text
requestNewFile(layer, 3);
} else if (value > 99 && value < 125) { // Cam
requestNewFile(layer, 4);
}
break;
default:
emit sendDmx(layer, channel, value);
break;
}
}
// Create a new media source
void olaInterface::requestNewFile(int layer, int type){
int cooki = layer + 201;
QString newfile = tr("%1 %2 ").arg(cooki).arg(type);
newfile.append("open ");
// Select one mediafile from the media library
int folder = worker->m_dmx[layer][DMX_FOLDER];
int file = worker->m_dmx[layer][DMX_FILE];
if (folder < m_media->size()) {
if (file < m_media->at(folder).m_MediaInformation.size()) {
newfile.append(m_media->at(folder).m_MediaInformation.at(file).MediaName);
} else {
qDebug() << tr("olaInterface|") << "Requested file is greater than files in library";
return;
}
} else {
qDebug() << tr("olaInterface|") << "Requested folder is greater than media libraries";
return;
}
newfile.append(";");
emit newFile(newfile);
}
// Initializes the media library and the media information from the path to media in m_pathmedia
void olaInterface::initMediaLibrary() {
QDir dir;
if (!dir.cd(m_pathmedia)) {
qWarning() << "olaInterface::initMediaLibrary| Can not cd to the path to media: " << m_pathmedia;
return;
}
m_media = new QList<MediaLibrary>;
dir.setFilter(QDir::Dirs | QDir::NoSymLinks | QDir::NoDotAndDotDot);
QFileInfoList filelist = dir.entryInfoList();
dir.setFilter(QDir::Files);
QFileInfo fileInfo;
struct MediaLibrary mediai;
int i;
for (i = 0; i < filelist.size(); ++i) {
fileInfo = filelist.at(i);
QString name = fileInfo.absoluteFilePath();
dir.cd(fileInfo.baseName());
mediai.m_Id = i;
mediai.m_DMXRangeMax = i;
mediai.m_DMXRangeMin = i;
mediai.m_Name = name;
// mediai.m_LibraryCount = 0; msex 1.2
mediai.m_ElementCount = dir.count();
mediai.m_MediaInformation = getMediaInformation(dir);
dir.cdUp();
m_media->append(mediai);
}
}
// This set every media file included in one library/folder
QList<MediaInformation> olaInterface::getMediaInformation(QDir dir)
{
QList<MediaInformation> mediaList;
MediaInformation mediainf;
dir.setFilter(QDir::Files);
QFileInfoList filelist = dir.entryInfoList();
QFileInfo fileInfo;
bool folder = false;
// Check if the thumbs folder exists and create if not
if (!dir.cd("thumbs")) {
if (!dir.mkdir("thumbs"))
{
qWarning() << tr("olaInterface|") << "Can not create thumbs folder in " << dir.path();
}
folder = true;
}
for (int i = 0; i < filelist.size(); ++i) {
fileInfo = filelist.at(i);
// Update the data base with the new file
mediainf.Number = i;
mediainf.DMXRangeMin = i;
mediainf.DMXRangeMax = i;
mediainf.MediaName = fileInfo.absoluteFilePath();
// QDateTime date = fileInfo.created();
// mediainf.MediaVersionTimestamp = date.toMSecsSinceEpoch();
mediainf.MediaWidth = 320;
mediainf.MediaHeight = 200;
mediainf.MediaLength = 1000;
mediainf.MediaFPS = 25;
mediaList.append(mediainf);
// Make the name of the thumb
QString thumbname;
thumbname.append(fileInfo.fileName());
thumbname.append(".jpg");
// Check if extis the thumbname. If not create it
QStringList thumbList = dir.entryList();
if ( !(thumbList.contains(thumbname)) || folder) { // Si no existe el fichero o hemos creado la carpeta gentera el thumbnail
thumbname.prepend("/");
thumbname.prepend(dir.path());
QStringList arguments;
arguments.append("-i");
arguments.append(fileInfo.absoluteFilePath());
arguments.append("-f");
arguments.append("image2");
arguments.append("-frames:v");
arguments.append("1");
arguments.append("-s");
arguments.append("64x46");
arguments.append("-vcodec");
arguments.append("mjpeg");
arguments.append(thumbname);
QProcess avconv;
// This should be done with ffmpeg library
int fail = avconv.execute("avconv", arguments);
if (fail != 0){
qDebug() << tr("olaInterface|") << "avconv returned error" << fail;
}
}
}
return mediaList;
}
//////////////////////////////////////////////////
//
// OLA Worker Class
//
//////////////////////////////////////////////////
// --- CONSTRUCTOR ---
olaWorker::olaWorker() {
m_clientpointer = NULL;
m_counter = 0;
gettimeofday(&m_last_data, NULL);
m_layersNumber = MAX_SOURCE_DMX;
dmxSettings newsetting;
newsetting.address = -1;
newsetting.universe = -1;
for (int i=0; i < MAX_SOURCE_DMX; i++)
{
m_settings.append(newsetting);
for (int j=0; j < LAYER_CHANNELS; j++)
{
m_dmx[i][j] = 0;
}
}
}
// --- DECONSTRUCTOR ---
olaWorker::~olaWorker() {
olastop();
}
// Open the connection with olad and start processing data.
void olaWorker::olastart() {
// set up ola connection
m_client = new OlaCallbackClientWrapper;
if (!m_client->Setup()) {qErrnoWarning("olaInterface::open: m_client.Setup:");}
m_clientpointer = m_client->GetClient();
m_clientpointer->SetDmxCallback(ola::NewCallback(this, &olaWorker::NewDmx));
// register all the universe in list
for (int i =0; i < m_universe.size(); i++) {
m_clientpointer->RegisterUniverse(m_universe.at(i), ola::REGISTER,ola::NewSingleCallback(this, &olaWorker::RegisterComplete));
qDebug() << tr("olaWorker|") << tr("Universe registered: %1").arg(m_universe.at(i));
}
m_client->GetSelectServer()->RegisterRepeatingTimeout(4000,ola::NewCallback(this, &olaWorker::CheckDataLoss));
qDebug()<< tr("olaWorker|") << "Init complete.";
m_client->GetSelectServer()->Run();
}
void olaWorker::olastop()
{
if (m_clientpointer != NULL)
{
for (int i = 0; i < m_universe.size(); i ++) {
m_clientpointer->RegisterUniverse(m_universe.at(i), ola::UNREGISTER, ola::NewSingleCallback(this, &olaWorker::RegisterComplete));
}
m_client->GetSelectServer()->Terminate();
m_clientpointer = NULL;
}
}
/*
* CallBack from OLA daemon when there is new DMX data. This is called one for second if there is not updated in the DMX frame. We need emit only the channels that
* has changed to save resources.
*/
// ToDo: It can be more efficient making the dmx buffer a DmxBuffer class instead a int array and compare with the new if there is changes at start. Also all access to the buffer it should be get/set. I should profile this
void olaWorker::NewDmx(unsigned int universe, const DmxBuffer &buffer,const string &error) {
if (!error.empty()) {
qWarning() << tr("olaWorker:NewDmx|") << "error received " << QString::fromStdString(error);
return;
}
m_counter++;
gettimeofday(&m_last_data, NULL);
for (int i = 0; i < m_layersNumber; i++) { // loop for reading the channels by layer.
if((m_settings.at(i).universe == universe) && ( m_settings.at(i).address > -1 )) { // Compare if the layer is from this universe
// AND if the DMX address is 0 or greater, process this layer.
for (int j = 0; j < LAYER_CHANNELS; j++){
int value = buffer.Get((m_settings.at(i).address) + j); // Get the value for this channel.
if (m_dmx[i][j] != value) { // Compare the new value with the old value.
emit dmx(i,j,value); // Connected with dmx slot in olaInterface.
m_dmx[i][j] = value;
}
}
}
}
}
/*
* Check for data loss each 4 seconds.
*/
bool olaWorker::CheckDataLoss() {
struct timeval now, diff;
if (timerisset(&m_last_data)) {
gettimeofday(&now, NULL);
timersub(&now, &m_last_data, &diff);
if (diff.tv_sec > 4 || (diff.tv_sec == 4 && diff.tv_usec > 4000000)) {
// loss of data
qDebug()<< "olaWorker| Can not read one or several universes";
}
}
return true;
}
/*
* Control de errores en el registro de Universos en OLA
*/
void olaWorker::RegisterComplete(const string &error) {
if (!error.empty()) {
qWarning() << "olaWorker|" << "Register command failed" << QString::fromStdString(error);
}
}
////////////////////////////////////////////////////////////////////////////////////////////
/* We will need some GUI interaction from the user for settings. We will need:
* - Change the path to the medias
* - Change the DMX address of each layer
* - Change the universe to bind in ola
* - Write and read different xml configuration files for different setups
* - Open the olad web setup page in localhost:9090 or patch directly from xml configuration file
* - Start and stop the dmx reading
void GLMixer::on_actionOLASetup_triggered(){
QWebView *view = new QWebView();
view->load(QUrl("http://localhost:9090/ola.html"));
view->show();
}
// Changing the path to the media folder tree
void UserPreferencesDialog::on_ChangeMediaPath_clicked(){
QFileDialog dialog(this);
dialog.setFileMode(QFileDialog::Directory);
QStringList fileNames;
if (!dialog.exec())
return;
fileNames = dialog.selectedFiles();
QString file = fileNames.at(0);
MediaPath->setText(file);
QString desc = tr("Media Path Changed to: %1").arg(file);
qDebug() << desc;
}
void savesetttingtoxml{
// Habrá que salvar las settings en algún sitio
}
void opensettings{
Posibilidad de abrir otro archivo de configuración
}
*/

135
src/olainterface.h Executable file
View file

@ -0,0 +1,135 @@
/* olainterface.h
Santi Noreña 2013
It includes two classes:
olaWorker is the threading class that reads raw DMX from ola daemon
olaInterface controls olaWorker and translates DMX values received from olaWorker into orders to RenderingManager and Source
*/
#ifndef OLAINTERFACE_H
#define OLAINTERFACE_H
// Define the DMX personality to avoid dealing with numbers and change it easy
#define DMX_FOLDER 5
#define DMX_FILE 6
#define DMX_SOURCETYPE 7
#define LAYER_CHANNELS 63 // The numer of control channels per video layer
#define MAX_SOURCE_DMX 8 // Number of maximum Sources controlled by DMX. It should be equal to MAX_SOURCE_COUNT
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <QObject>
#include <QThread>
#include <QDebug>
#include <QXmlStreamReader>
#include <QFile>
#include <QMessageBox>
#include <QProcess>
// The OLA Library
#include <ola/OlaClientWrapper.h>
#include <ola/OlaCallbackClient.h>
#include "CITPDefines.h"
#include "MSEXDefines.h"
#include "msex.h"
#include "QDir"
#include "libremediaserver.h"
using namespace ola;
// struct where save the DMX settings for each layer
struct dmxSettings {
int address;
uint universe;
bool updated;
};
class olaWorker : public QThread
{
Q_OBJECT
friend class olaInterface;
public:
protected:
olaWorker();
virtual ~olaWorker();
OlaCallbackClientWrapper *m_client;
OlaCallbackClient *m_clientpointer;
unsigned int m_counter;
struct timeval m_last_data; // Last DMX frame received
QList<dmxSettings> m_settings;
QList<int> m_universe; // OLA universes binding
// DMX Conf
int m_dmx[MAX_SOURCE_DMX][LAYER_CHANNELS]; // DMX Buffer
int m_layersNumber; // Number of layers in wich divide the dmx frame. Each layer, one source.
private:
void NewDmx(unsigned int universe,const DmxBuffer &buffer,const string &error); // Callback from OlaCallbackCLient when there is new dmx info
bool CheckDataLoss();
void RegisterComplete(const string &error); // Called after completing the register
protected slots:
void olastart(); // Starts the conexion with olad. olad must be running before this
void olastop(); // Close the connection with olad.
signals:
void finished(); // Signal for closing. Not use now.
void dmx(int layer, int channel, int value); // Signal when a channel has changed
};
class msex;
class olaInterface : public QObject
{
Q_OBJECT
public:
explicit olaInterface();
virtual ~olaInterface();
void open(); // Starts the thread and open the connection with olad
void close(); // Close the connection with olad
olaWorker *worker; // The thread of connection with ola.
inline void setPath(QString path) {m_pathmedia = path;} // Set the path to the root media path. The media files are inside this folder tree.
inline QString getPath () {return m_pathmedia;} // Get the path to the medias folder tree.
msex *m_msex;
QList<MediaLibrary> *m_media; // Library to save the folders/media libraries and index each media file inside
// Created here but m_msex acces for reading in this library
protected:
QThread *m_thread; // The thread for olaWorker
private:
void requestNewFile(int layer, int type); // When there is a change in the channels folder, file or type media (5,6,7), this is called. Creates a new source.
void initMediaLibrary();
QList<MediaInformation> getMediaInformation(QDir dir); // Get all the information of each media file in a dir
QString m_pathmedia; // Path to Medias
void readDataFromXML(); // Read the DMX configuration from the file dmx.xml
public slots:
void dmx(int layer, int channel, int value); // Connected with signal dmx from olaWorker. This is the horsepower of all this. Converts DMX orders
// into orders to RenderingManager and Source. Mantains updated the videolayer struct.
signals:
void sendDmx(int layer,int channel, int value);
void newFile(QString file);
};
#endif // OLAINTERFACE_H

View file

@ -1,13 +0,0 @@
Quick compilation instructions for Gnu/linux or Mac OSX, or Windows if you have
installed gygwin: make sure "automake" is installed as well as the usual C
compiler chain. Then in this directory, type "./autogen.sh", then
"./configure"; then "make".
Alternatively, you can use the fallback makefiles in "src" for gnu/linux, Mac
OSX, or Microsoft Visual C. (Special instructions for Microsoft Visual C: cd
to src and type "make -f makefile.nt". Then CD to the various subdirs of extra
and type "make nt" in each.)
Various dependencies: in linux and Mac you need TK (apparently always present
for Mac and usually there for linux). On linux you may also need an ALSA
"dev" package: (yum install alsa-lib-devel) or (apt-get install libasound2-dev).

View file

@ -1,30 +0,0 @@
This software is copyrighted by Miller Puckette and others. The following
terms (the "Standard Improved BSD License") apply to all files associated with
the software unless explicitly disclaimed in individual files:
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
3. The name of the author may not be used to endorse or promote
products derived from this software without specific prior
written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
THE POSSIBILITY OF SUCH DAMAGE.

View file

@ -1,464 +0,0 @@
AUTOMAKE_OPTIONS = foreign
ACLOCAL_AMFLAGS = -I m4/generated -I m4
CFLAGS += @DEFS@
EXTRA_SUBDIRS =
# pkg-config support
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = pd.pc
if ASIO
EXTRA_SUBDIRS += asio
endif
if PORTAUDIO
EXTRA_SUBDIRS += portaudio
endif
if PORTMIDI
EXTRA_SUBDIRS += portmidi
endif
# files that are included but not built
EXTRA_DIST = LICENSE.txt README.txt INSTALL.txt
# subdirs that are built
SUBDIRS = $(EXTRA_SUBDIRS) src man tcl po extra
# subdirs that are always included in the dist, etc.
DIST_SUBDIRS = asio extra man po portaudio portmidi src tcl
BUILT_SOURCES =
if MSGFMT
BUILT_SOURCES += locales
endif
## FIXXXME
## $(pkglibdir) is used throughout the other Makefile.amS
## simply ignoring the special case for other OSs...
if LINUX
libpddir = $(pkglibdir)
else
libpddir = $(prefix)
endif
# Symlinks don't work on Windows/MinGW but they do on Cygwin.
bin:
$(LN_S) src bin
locales:
make -C po all
install-data-local:
$(INSTALL) -d $(DESTDIR)$(libpddir)/startup
$(INSTALL) -d $(DESTDIR)$(libpddir)/startup/disabled
# this is at the end because its loooong
# these files go into libpddir defined above
nobase_dist_libpd_DATA = \
doc/1.manual/1.introduction.txt \
doc/1.manual/fig1.1.png \
doc/1.manual/fig1.2.jpg \
doc/1.manual/fig1.3.jpg \
doc/1.manual/fig1.4.png \
doc/1.manual/fig1.5.jpg \
doc/1.manual/fig11.1.png \
doc/1.manual/fig11.2.png \
doc/1.manual/fig11.3.png \
doc/1.manual/fig11.4.png \
doc/1.manual/fig3.1.jpg \
doc/1.manual/fig3.10.jpg \
doc/1.manual/fig3.2.jpg \
doc/1.manual/fig3.3.jpg \
doc/1.manual/fig3.4.jpg \
doc/1.manual/fig3.5.jpg \
doc/1.manual/fig3.6.jpg \
doc/1.manual/fig3.7.jpg \
doc/1.manual/fig3.8.jpg \
doc/1.manual/fig3.9.jpg \
doc/1.manual/fig7.1.jpg \
doc/1.manual/fig7.2.jpg \
doc/1.manual/fig7.3.jpg \
doc/1.manual/fig7.4.jpg \
doc/1.manual/fig7.5.jpg \
doc/1.manual/fig7.6.jpg \
doc/1.manual/fig8.1.jpg \
doc/1.manual/fig8.2.jpg \
doc/1.manual/fig8.3.jpg \
doc/1.manual/fig8.4.jpg \
doc/1.manual/fig8.5.jpg \
doc/1.manual/fig8.6.jpg \
doc/1.manual/fig9.1.jpg \
doc/1.manual/fig9.2.jpg \
doc/1.manual/fig9.3.jpg \
doc/1.manual/index.htm \
doc/1.manual/pdmanual.css \
doc/1.manual/x1.htm \
doc/1.manual/x2.htm \
doc/1.manual/x3.htm \
doc/1.manual/x4.htm \
doc/1.manual/x5.htm \
doc/2.control.examples/00.INTRO.txt \
doc/2.control.examples/01.PART1.hello.pd \
doc/2.control.examples/02.editing.pd \
doc/2.control.examples/03.connections.pd \
doc/2.control.examples/04.messages.pd \
doc/2.control.examples/05.counter.pd \
doc/2.control.examples/06.more.counters.pd \
doc/2.control.examples/07.time.pd \
doc/2.control.examples/08.depthfirst.pd \
doc/2.control.examples/09.send_receive.pd \
doc/2.control.examples/10.more.messages.pd \
doc/2.control.examples/11.review.pd \
doc/2.control.examples/12.PART2.subpatch.pd \
doc/2.control.examples/13.locality.pd \
doc/2.control.examples/14.dollarsigns.pd \
doc/2.control.examples/15.array.pd \
doc/2.control.examples/15.file.txt \
doc/2.control.examples/16.more.arrays.pd \
doc/2.control.examples/17.PART3.midi.pd \
doc/2.control.examples/18.conditional.pd \
doc/2.control.examples/19.random.pd \
doc/2.control.examples/20.weighted-random.pd \
doc/2.control.examples/21.markov.chain.pd \
doc/2.control.examples/22.random-walk.pd \
doc/2.control.examples/23.sequencing.pd \
doc/2.control.examples/24.loops.pd \
doc/2.control.examples/dollarsign.pd \
doc/2.control.examples/dollarsign2.pd \
doc/2.control.examples/sendnumber.pd \
doc/3.audio.examples/A00.intro.pd \
doc/3.audio.examples/A00.intro.txt \
doc/3.audio.examples/A01.sinewave.pd \
doc/3.audio.examples/A02.amplitude.pd \
doc/3.audio.examples/A03.line.pd \
doc/3.audio.examples/A04.line2.pd \
doc/3.audio.examples/A05.output.subpatch.pd \
doc/3.audio.examples/A06.frequency.pd \
doc/3.audio.examples/A07.fusion.pd \
doc/3.audio.examples/A08.beating.pd \
doc/3.audio.examples/A09.frequency.mod.pd \
doc/3.audio.examples/A10.review.pd \
doc/3.audio.examples/adsr.pd \
doc/3.audio.examples/B01.wavetables.pd \
doc/3.audio.examples/B02.two-wavetables.pd \
doc/3.audio.examples/B03.tabread4.pd \
doc/3.audio.examples/B04.tabread4.interpolation.pd \
doc/3.audio.examples/B05.tabread.FM.pd \
doc/3.audio.examples/B06.table.switching.pd \
doc/3.audio.examples/B07.sampler.pd \
doc/3.audio.examples/B08.sampler.loop.pd \
doc/3.audio.examples/B09.sampler.loop.smooth.pd \
doc/3.audio.examples/B10.sampler.scratch.pd \
doc/3.audio.examples/B11.sampler.nodoppler.pd \
doc/3.audio.examples/B12.sampler.transpose.pd \
doc/3.audio.examples/B13.sampler.overlap.pd \
doc/3.audio.examples/B14.sampler.rockafella.pd \
doc/3.audio.examples/B15.tabread4~-onset.pd \
doc/3.audio.examples/B16.long-varispeed.pd \
doc/3.audio.examples/buttercoef3.pd \
doc/3.audio.examples/butterworth3~.pd \
doc/3.audio.examples/C01.nyquist.pd \
doc/3.audio.examples/C02.sawtooth-foldover.pd \
doc/3.audio.examples/C03.zipper.noise.pd \
doc/3.audio.examples/C04.control.to.signal.pd \
doc/3.audio.examples/C05.sampler.oneshot.pd \
doc/3.audio.examples/C06.signal.to.control.pd \
doc/3.audio.examples/C07.envelope.follower.pd \
doc/3.audio.examples/C08.analog.sequencer.pd \
doc/3.audio.examples/C09.sample.hold.pd \
doc/3.audio.examples/C10.monophonic.synth.pd \
doc/3.audio.examples/D01.envelope.gen.pd \
doc/3.audio.examples/D02.adsr.pd \
doc/3.audio.examples/D03.envelope.dB.pd \
doc/3.audio.examples/D04.envelope.quartic.pd \
doc/3.audio.examples/D05.envelope.pitch.pd \
doc/3.audio.examples/D06.envelope.portamento.pd \
doc/3.audio.examples/D07.additive.pd \
doc/3.audio.examples/D08.table.spectrum.pd \
doc/3.audio.examples/D09.shepard.tone.pd \
doc/3.audio.examples/D10.sampler.notes.pd \
doc/3.audio.examples/D11.sampler.poly.pd \
doc/3.audio.examples/D12.sampler.bis.pd \
doc/3.audio.examples/D13.additive.qlist.pd \
doc/3.audio.examples/D14.vibrato.pd \
doc/3.audio.examples/E01.spectrum.pd \
doc/3.audio.examples/E02.ring.modulation.pd \
doc/3.audio.examples/E03.octave.divider.pd \
doc/3.audio.examples/E04.difference.tone.pd \
doc/3.audio.examples/E05.chebychev.pd \
doc/3.audio.examples/E06.exponential.pd \
doc/3.audio.examples/E07.evenodd.pd \
doc/3.audio.examples/E08.phase.mod.pd \
doc/3.audio.examples/E09.FM.spectrum.pd \
doc/3.audio.examples/E10.complex.FM.pd \
doc/3.audio.examples/F01.pulse.pd \
doc/3.audio.examples/F02.just.say.pd \
doc/3.audio.examples/F03.pulse.spectrum.pd \
doc/3.audio.examples/F04.waveshaping.pulse.pd \
doc/3.audio.examples/F05.ring.modulation.pd \
doc/3.audio.examples/F06.packets.pd \
doc/3.audio.examples/F07.packet.spectrum.pd \
doc/3.audio.examples/F08.two.cosines.pd \
doc/3.audio.examples/F09.declickit.pd \
doc/3.audio.examples/F10.sweepable.FM.pd \
doc/3.audio.examples/F11.anharmonic.FM.pd \
doc/3.audio.examples/F12.paf.pd \
doc/3.audio.examples/F13.paf.control.pd \
doc/3.audio.examples/F14.wave.packet.pd \
doc/3.audio.examples/filter-graph1.pd \
doc/3.audio.examples/filter-graph2.pd \
doc/3.audio.examples/G01.delay.pd \
doc/3.audio.examples/G02.delay.loop.pd \
doc/3.audio.examples/G03.delay.variable.pd \
doc/3.audio.examples/G04.control.blocksize.pd \
doc/3.audio.examples/G05.execution.order.pd \
doc/3.audio.examples/G06.octave.doubler.pd \
doc/3.audio.examples/G07.shaker.pd \
doc/3.audio.examples/G08.reverb.pd \
doc/3.audio.examples/G09.pitchshift.pd \
doc/3.audio.examples/H01.low-pass.pd \
doc/3.audio.examples/H02.high-pass.pd \
doc/3.audio.examples/H03.band-pass.pd \
doc/3.audio.examples/H04.filter.sweep.pd \
doc/3.audio.examples/H05.filter.floyd.pd \
doc/3.audio.examples/H06.envelope.follower.pd \
doc/3.audio.examples/H07.measure.spectrum.pd \
doc/3.audio.examples/H08.heterodyning.pd \
doc/3.audio.examples/H09.ssb.modulation.pd \
doc/3.audio.examples/H10.measurement.pd \
doc/3.audio.examples/H11.shelving.pd \
doc/3.audio.examples/H12.peaking.pd \
doc/3.audio.examples/H13.butterworth.pd \
doc/3.audio.examples/H14.all.pass.pd \
doc/3.audio.examples/H15.phaser.pd \
doc/3.audio.examples/H16.adsr.filter.qlist.pd \
doc/3.audio.examples/I01.Fourier.analysis.pd \
doc/3.audio.examples/I02.Hann.window.pd \
doc/3.audio.examples/I03.resynthesis.pd \
doc/3.audio.examples/I04.noisegate.pd \
doc/3.audio.examples/I05.compressor.pd \
doc/3.audio.examples/I06.timbre.stamp.pd \
doc/3.audio.examples/I07.phase.vocoder.pd \
doc/3.audio.examples/I08.pvoc.reverb.pd \
doc/3.audio.examples/I09.sheep.from.goats.pd \
doc/3.audio.examples/I10.phase.bash.pd \
doc/3.audio.examples/J01.even.odd.pd \
doc/3.audio.examples/J02.trapezoids.pd \
doc/3.audio.examples/J03.pulse.width.mod.pd \
doc/3.audio.examples/J04.corners.pd \
doc/3.audio.examples/J05.triangle.pd \
doc/3.audio.examples/J06.enveloping.pd \
doc/3.audio.examples/J07.oversampling.pd \
doc/3.audio.examples/J08.classicsynth.pd \
doc/3.audio.examples/J09.bandlimited.pd \
doc/3.audio.examples/osc-voice.pd \
doc/3.audio.examples/output~.pd \
doc/3.audio.examples/partial.pd \
doc/3.audio.examples/qlist-sampler.txt \
doc/3.audio.examples/qlist.txt \
doc/3.audio.examples/qlist2.txt \
doc/3.audio.examples/reverb-echo.pd \
doc/3.audio.examples/sampvoice.pd \
doc/3.audio.examples/sampvoice2.pd \
doc/3.audio.examples/shepvoice.pd \
doc/3.audio.examples/sinevoice.pd \
doc/3.audio.examples/spectrum-partial.pd \
doc/4.data.structures/00.intro.txt \
doc/4.data.structures/01.scalars.pd \
doc/4.data.structures/02.getting.data.pd \
doc/4.data.structures/03.setting.data.pd \
doc/4.data.structures/04.append.pd \
doc/4.data.structures/05.array.pd \
doc/4.data.structures/06.file.pd \
doc/4.data.structures/07.sequencer.pd \
doc/4.data.structures/08.selection.pd \
doc/4.data.structures/09.scaling.pd \
doc/4.data.structures/10.onoff.pd \
doc/4.data.structures/11.array.controls.pd \
doc/4.data.structures/12.beat-patterns.pd \
doc/4.data.structures/13.sliderule.pd \
doc/4.data.structures/14.partialtracer.pd \
doc/4.data.structures/add-trace.pd \
doc/4.data.structures/beat-maker.pd \
doc/4.data.structures/data-array.pd \
doc/4.data.structures/data-start.pd \
doc/4.data.structures/file.txt \
doc/4.data.structures/osc-voice.pd \
doc/4.data.structures/output~.pd \
doc/4.data.structures/voice.pd \
doc/4.data.structures/z.txt \
doc/5.reference/0_all_guis-INTRO.txt \
doc/5.reference/abs~-help.pd \
doc/5.reference/acoustics-help.pd \
doc/5.reference/acoustics~-help.pd \
doc/5.reference/adc~_dac~-help.pd \
doc/5.reference/append-help.pd \
doc/5.reference/bag-help.pd \
doc/5.reference/bang-help.pd \
doc/5.reference/bang~-help.pd \
doc/5.reference/biquad~-help.pd \
doc/5.reference/block~-help.pd \
doc/5.reference/bng-help.pd \
doc/5.reference/bp~-help.pd \
doc/5.reference/canvas-help.pd \
doc/5.reference/change-help.pd \
doc/5.reference/clip~-help.pd \
doc/5.reference/cos~-help.pd \
doc/5.reference/cpole~-help.pd \
doc/5.reference/cputime-help.pd \
doc/5.reference/czero_rev~-help.pd \
doc/5.reference/czero~-help.pd \
doc/5.reference/declare-help.pd \
doc/5.reference/delay-help.pd \
doc/5.reference/delread~-help.pd \
doc/5.reference/delwrite~-help.pd \
doc/5.reference/drawnumber-help.pd \
doc/5.reference/drawpolygon-help.pd \
doc/5.reference/element-help.pd \
doc/5.reference/env~-help.pd \
doc/5.reference/exp~-help.pd \
doc/5.reference/fft~-help.pd \
doc/5.reference/float-help.pd \
doc/5.reference/framp~-help.pd \
doc/5.reference/gatom-help.pd \
doc/5.reference/get-help.pd \
doc/5.reference/getsize-help.pd \
doc/5.reference/graph-help.pd \
doc/5.reference/hdial-help.pd \
doc/5.reference/help-intro.pd \
doc/5.reference/hip~-help.pd \
doc/5.reference/hslider-help.pd \
doc/5.reference/int-help.pd \
doc/5.reference/key-help.pd \
doc/5.reference/line-help.pd \
doc/5.reference/line~-help.pd \
doc/5.reference/list-help.pd \
doc/5.reference/log~-help.pd \
doc/5.reference/lop~-help.pd \
doc/5.reference/makefilename-help.pd \
doc/5.reference/makenote-help.pd \
doc/5.reference/math-help.pd \
doc/5.reference/message-help.pd \
doc/5.reference/metro.pd \
doc/5.reference/midi-help.pd \
doc/5.reference/moses-help.pd \
doc/5.reference/my_canvas-help.pd \
doc/5.reference/namecanvas-help.pd \
doc/5.reference/netreceive-help.pd \
doc/5.reference/netsend-help.pd \
doc/5.reference/noise~-help.pd \
doc/5.reference/numbox2-help.pd \
doc/5.reference/openpanel-help.pd \
doc/5.reference/operators-help.pd \
doc/5.reference/osc~-help.pd \
doc/5.reference/otherbinops-help.pd \
doc/5.reference/pack-help.pd \
doc/5.reference/pd-help.pd \
doc/5.reference/phasor~-help.pd \
doc/5.reference/pipe-help.pd \
doc/5.reference/plot-help.pd \
doc/5.reference/pointer-help.pd \
doc/5.reference/poly-help.pd \
doc/5.reference/pow~-help.pd \
doc/5.reference/print-help.pd \
doc/5.reference/print~-help.pd \
doc/5.reference/qlist-help.pd \
doc/5.reference/qlist.txt \
doc/5.reference/random-help.pd \
doc/5.reference/readsf~-help.pd \
doc/5.reference/realtime-help.pd \
doc/5.reference/receive-help.pd \
doc/5.reference/route-help.pd \
doc/5.reference/rpole~-help.pd \
doc/5.reference/rsqrt~-help.pd \
doc/5.reference/rzero_rev~-help.pd \
doc/5.reference/rzero~-help.pd \
doc/5.reference/samphold~-help.pd \
doc/5.reference/savepanel-help.pd \
doc/5.reference/select-help.pd \
doc/5.reference/send-help.pd \
doc/5.reference/send~-help.pd \
doc/5.reference/set-help.pd \
doc/5.reference/setsize-help.pd \
doc/5.reference/setsize.txt \
doc/5.reference/sigbinops-help.pd \
doc/5.reference/sig~-help.pd \
doc/5.reference/snapshot~-help.pd \
doc/5.reference/soundfiler-help.pd \
doc/5.reference/spigot-help.pd \
doc/5.reference/sqrt~-help.pd \
doc/5.reference/stripnote-help.pd \
doc/5.reference/struct-help.pd \
doc/5.reference/sublist-help.pd \
doc/5.reference/swap-help.pd \
doc/5.reference/switch~-help.pd \
doc/5.reference/table.txt \
doc/5.reference/tabosc4~-help.pd \
doc/5.reference/tabplay~-help.pd \
doc/5.reference/tabread-help.pd \
doc/5.reference/tabread4~-help.pd \
doc/5.reference/tabreceive~-help.pd \
doc/5.reference/tabsend~-help.pd \
doc/5.reference/tabwrite-help.pd \
doc/5.reference/tabwrite~-help.pd \
doc/5.reference/text-help.pd \
doc/5.reference/textfile-help.pd \
doc/5.reference/textfile.txt \
doc/5.reference/threshold~-help.pd \
doc/5.reference/throw~-help.pd \
doc/5.reference/timer-help.pd \
doc/5.reference/toggle-help.pd \
doc/5.reference/trigger-help.pd \
doc/5.reference/unpack-help.pd \
doc/5.reference/until-help.pd \
doc/5.reference/value-help.pd \
doc/5.reference/vcf~-help.pd \
doc/5.reference/vdial-help.pd \
doc/5.reference/vd~-help.pd \
doc/5.reference/vline~-help.pd \
doc/5.reference/vslider-help.pd \
doc/5.reference/vu-help.pd \
doc/5.reference/wrap~-help.pd \
doc/5.reference/writesf~-help.pd \
doc/5.reference/x_all_guis.pd \
doc/6.externs/0.README.txt \
doc/6.externs/dspobj~.c \
doc/6.externs/makefile \
doc/6.externs/obj1.c \
doc/6.externs/obj2.c \
doc/6.externs/obj3.c \
doc/6.externs/obj4.c \
doc/6.externs/obj5.c \
doc/6.externs/test-dspobj~.pd \
doc/6.externs/test-obj1.pd \
doc/6.externs/test-obj2.pd \
doc/6.externs/test-obj3.pd \
doc/6.externs/test-obj4.pd \
doc/6.externs/test-obj5.pd \
doc/7.stuff/soundfile-tools/1.ring-mod.pd \
doc/7.stuff/soundfile-tools/2.bandpass.pd \
doc/7.stuff/soundfile-tools/3.phase.vocoder.pd \
doc/7.stuff/soundfile-tools/4.looper.pd \
doc/7.stuff/soundfile-tools/5.reverb.pd \
doc/7.stuff/soundfile-tools/6.vocoder.pd \
doc/7.stuff/soundfile-tools/README.txt \
doc/7.stuff/synth/1.poly.synth.pd \
doc/7.stuff/synth/gadsr.pd \
doc/7.stuff/synth/numset.pd \
doc/7.stuff/synth/preset.pd \
doc/7.stuff/synth/preset1.txt \
doc/7.stuff/synth/preset2.txt \
doc/7.stuff/synth/preset3.txt \
doc/7.stuff/synth/preset4.txt \
doc/7.stuff/synth/README.txt \
doc/7.stuff/synth/synthvoice.pd \
doc/7.stuff/synth/test-gadsr.pd \
doc/7.stuff/tools/latency.pd \
doc/7.stuff/tools/load-meter.pd \
doc/7.stuff/tools/testtone.pd \
doc/7.stuff/tools/testtone16.pd \
doc/sound/bell.aiff \
doc/sound/voice.wav \
doc/sound/voice2.wav

File diff suppressed because it is too large Load diff

View file

@ -1,41 +0,0 @@
This is the README file for Pd, a free real-time computer music software
package resembling Max. You can get Pd for Linux, Mac OSX, or MS Windows,
from http://www.crca.ucsd.edu/~msp/software.html.
Installation instructions are in the HTML DOCUMENTATION at:
http://www.crca.ucsd.edu/~msp/Pd_documentation/index.htm
If you download and unpack Pd, you will also find the html documentation
locally in the file, .../pd-whatever/doc/1.manual/index.htm. To unpack Pd:
LINUX (or freeBSD). In some linux installations you can download Pd via
"apt-get install puredata" or "yum install puredata"; otherwise you will have to
download the source and compile it as described in the file, INSTALL.txt
Microsoft Windows. Pd binaries are distributed as a "zip" file. Unzip this,
creating a directory such as \pd.
Macintosh. The web browser will automatically unpack the distributions
into a folder such as "pd-0.35" on your desktop.
If you have qustions about Pd, or if you wish to be notified of releases,
check the Pd mailing list: http://iem.mhsg.ac.at/mailinglists/pd-list/
Many extensions to Pd are available, notably for handling video and 3D
graphics; see the html documentation for pointers.
COPYRIGHT. Except as otherwise noted, all files in the Pd distribution are
Copyright (c) 1997-2012 Miller Puckette and others.
For information on usage and redistribution, and for a DISCLAIMER OF ALL
WARRANTIES, see the file, "LICENSE.txt," included in the Pd distribution.
(Note that tcl/tk, expr, and some other files are copyrighted separately).
ACKNOWLEDGEMENTS. Thanks to Harry Castle, Krzysztof Czaja, Mark Danks,
Christian Feldbauer, Guenter Geiger, Kerry Hagan, Trevor Johnson, Fernando
Lopez-Lezcano, Adam Lindsay, Karl MacMillan, Thomas Musil, Toshinori Ohkouchi,
Winfried Ritsch, Vibeke Sorensen, Rand Steiger, Hans-Christoph Steiner,
Shahrokh Yadegari, David Zicarelli, Iohannes Zmoelnig, and probably many others
for contributions of code, documentation, ideas, and expertise. This work has
received support from Intel, Keith Mcmillen Instruments, and UCSD.

View file

@ -1,979 +0,0 @@
# generated automatically by aclocal 1.11.6 -*- Autoconf -*-
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
# Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
m4_ifndef([AC_AUTOCONF_VERSION],
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
[m4_warning([this file was generated for autoconf 2.69.
You have another version of autoconf. It may work, but is not guaranteed to.
If you have problems, you may need to regenerate the build system entirely.
To do so, use the procedure documented by the package, typically `autoreconf'.])])
# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software
# Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 1
# AM_AUTOMAKE_VERSION(VERSION)
# ----------------------------
# Automake X.Y traces this macro to ensure aclocal.m4 has been
# generated from the m4 files accompanying Automake X.Y.
# (This private macro should not be called outside this file.)
AC_DEFUN([AM_AUTOMAKE_VERSION],
[am__api_version='1.11'
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
dnl require some minimum version. Point them to the right macro.
m4_if([$1], [1.11.6], [],
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
])
# _AM_AUTOCONF_VERSION(VERSION)
# -----------------------------
# aclocal traces this macro to find the Autoconf version.
# This is a private macro too. Using m4_define simplifies
# the logic in aclocal, which can simply ignore this definition.
m4_define([_AM_AUTOCONF_VERSION], [])
# AM_SET_CURRENT_AUTOMAKE_VERSION
# -------------------------------
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
[AM_AUTOMAKE_VERSION([1.11.6])dnl
m4_ifndef([AC_AUTOCONF_VERSION],
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 1
# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
#
# Of course, Automake must honor this variable whenever it calls a
# tool from the auxiliary directory. The problem is that $srcdir (and
# therefore $ac_aux_dir as well) can be either absolute or relative,
# depending on how configure is run. This is pretty annoying, since
# it makes $ac_aux_dir quite unusable in subdirectories: in the top
# source directory, any form will work fine, but in subdirectories a
# relative path needs to be adjusted first.
#
# $ac_aux_dir/missing
# fails when called from a subdirectory if $ac_aux_dir is relative
# $top_srcdir/$ac_aux_dir/missing
# fails if $ac_aux_dir is absolute,
# fails when called from a subdirectory in a VPATH build with
# a relative $ac_aux_dir
#
# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
# are both prefixed by $srcdir. In an in-source build this is usually
# harmless because $srcdir is `.', but things will broke when you
# start a VPATH build or use an absolute $srcdir.
#
# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
# and then we would define $MISSING as
# MISSING="\${SHELL} $am_aux_dir/missing"
# This will work as long as MISSING is not called from configure, because
# unfortunately $(top_srcdir) has no meaning in configure.
# However there are other variables, like CC, which are often used in
# configure, and could therefore not use this "fixed" $ac_aux_dir.
#
# Another solution, used here, is to always expand $ac_aux_dir to an
# absolute PATH. The drawback is that using absolute paths prevent a
# configured tree to be moved without reconfiguration.
AC_DEFUN([AM_AUX_DIR_EXPAND],
[dnl Rely on autoconf to set up CDPATH properly.
AC_PREREQ([2.50])dnl
# expand $ac_aux_dir to an absolute path
am_aux_dir=`cd $ac_aux_dir && pwd`
])
# AM_CONDITIONAL -*- Autoconf -*-
# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 9
# AM_CONDITIONAL(NAME, SHELL-CONDITION)
# -------------------------------------
# Define a conditional.
AC_DEFUN([AM_CONDITIONAL],
[AC_PREREQ(2.52)dnl
ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
AC_SUBST([$1_TRUE])dnl
AC_SUBST([$1_FALSE])dnl
_AM_SUBST_NOTMAKE([$1_TRUE])dnl
_AM_SUBST_NOTMAKE([$1_FALSE])dnl
m4_define([_AM_COND_VALUE_$1], [$2])dnl
if $2; then
$1_TRUE=
$1_FALSE='#'
else
$1_TRUE='#'
$1_FALSE=
fi
AC_CONFIG_COMMANDS_PRE(
[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
AC_MSG_ERROR([[conditional "$1" was never defined.
Usually this means the macro was only invoked conditionally.]])
fi])])
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009,
# 2010, 2011 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 12
# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
# written in clear, in which case automake, when reading aclocal.m4,
# will think it sees a *use*, and therefore will trigger all it's
# C support machinery. Also note that it means that autoscan, seeing
# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
# _AM_DEPENDENCIES(NAME)
# ----------------------
# See how the compiler implements dependency checking.
# NAME is "CC", "CXX", "GCJ", or "OBJC".
# We try a few techniques and use that to set a single cache variable.
#
# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
# dependency, and given that the user is not expected to run this macro,
# just rely on AC_PROG_CC.
AC_DEFUN([_AM_DEPENDENCIES],
[AC_REQUIRE([AM_SET_DEPDIR])dnl
AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
AC_REQUIRE([AM_MAKE_INCLUDE])dnl
AC_REQUIRE([AM_DEP_TRACK])dnl
ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
[$1], CXX, [depcc="$CXX" am_compiler_list=],
[$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
[$1], UPC, [depcc="$UPC" am_compiler_list=],
[$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
[depcc="$$1" am_compiler_list=])
AC_CACHE_CHECK([dependency style of $depcc],
[am_cv_$1_dependencies_compiler_type],
[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
# We make a subdir and do the tests there. Otherwise we can end up
# making bogus files that we don't know about and never remove. For
# instance it was reported that on HP-UX the gcc test will end up
# making a dummy file named `D' -- because `-MD' means `put the output
# in D'.
rm -rf conftest.dir
mkdir conftest.dir
# Copy depcomp to subdir because otherwise we won't find it if we're
# using a relative directory.
cp "$am_depcomp" conftest.dir
cd conftest.dir
# We will build objects and dependencies in a subdirectory because
# it helps to detect inapplicable dependency modes. For instance
# both Tru64's cc and ICC support -MD to output dependencies as a
# side effect of compilation, but ICC will put the dependencies in
# the current directory while Tru64 will put them in the object
# directory.
mkdir sub
am_cv_$1_dependencies_compiler_type=none
if test "$am_compiler_list" = ""; then
am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
fi
am__universal=false
m4_case([$1], [CC],
[case " $depcc " in #(
*\ -arch\ *\ -arch\ *) am__universal=true ;;
esac],
[CXX],
[case " $depcc " in #(
*\ -arch\ *\ -arch\ *) am__universal=true ;;
esac])
for depmode in $am_compiler_list; do
# Setup a source with many dependencies, because some compilers
# like to wrap large dependency lists on column 80 (with \), and
# we should not choose a depcomp mode which is confused by this.
#
# We need to recreate these files for each test, as the compiler may
# overwrite some of them when testing with obscure command lines.
# This happens at least with the AIX C compiler.
: > sub/conftest.c
for i in 1 2 3 4 5 6; do
echo '#include "conftst'$i'.h"' >> sub/conftest.c
# Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
# Solaris 8's {/usr,}/bin/sh.
touch sub/conftst$i.h
done
echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
# We check with `-c' and `-o' for the sake of the "dashmstdout"
# mode. It turns out that the SunPro C++ compiler does not properly
# handle `-M -o', and we need to detect this. Also, some Intel
# versions had trouble with output in subdirs
am__obj=sub/conftest.${OBJEXT-o}
am__minus_obj="-o $am__obj"
case $depmode in
gcc)
# This depmode causes a compiler race in universal mode.
test "$am__universal" = false || continue
;;
nosideeffect)
# after this tag, mechanisms are not by side-effect, so they'll
# only be used when explicitly requested
if test "x$enable_dependency_tracking" = xyes; then
continue
else
break
fi
;;
msvc7 | msvc7msys | msvisualcpp | msvcmsys)
# This compiler won't grok `-c -o', but also, the minuso test has
# not run yet. These depmodes are late enough in the game, and
# so weak that their functioning should not be impacted.
am__obj=conftest.${OBJEXT-o}
am__minus_obj=
;;
none) break ;;
esac
if depmode=$depmode \
source=sub/conftest.c object=$am__obj \
depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
$SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
>/dev/null 2>conftest.err &&
grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
${MAKE-make} -s -f confmf > /dev/null 2>&1; then
# icc doesn't choke on unknown options, it will just issue warnings
# or remarks (even with -Werror). So we grep stderr for any message
# that says an option was ignored or not supported.
# When given -MP, icc 7.0 and 7.1 complain thusly:
# icc: Command line warning: ignoring option '-M'; no argument required
# The diagnosis changed in icc 8.0:
# icc: Command line remark: option '-MP' not supported
if (grep 'ignoring option' conftest.err ||
grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
am_cv_$1_dependencies_compiler_type=$depmode
break
fi
fi
done
cd ..
rm -rf conftest.dir
else
am_cv_$1_dependencies_compiler_type=none
fi
])
AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
AM_CONDITIONAL([am__fastdep$1], [
test "x$enable_dependency_tracking" != xno \
&& test "$am_cv_$1_dependencies_compiler_type" = gcc3])
])
# AM_SET_DEPDIR
# -------------
# Choose a directory name for dependency files.
# This macro is AC_REQUIREd in _AM_DEPENDENCIES
AC_DEFUN([AM_SET_DEPDIR],
[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
])
# AM_DEP_TRACK
# ------------
AC_DEFUN([AM_DEP_TRACK],
[AC_ARG_ENABLE(dependency-tracking,
[ --disable-dependency-tracking speeds up one-time build
--enable-dependency-tracking do not reject slow dependency extractors])
if test "x$enable_dependency_tracking" != xno; then
am_depcomp="$ac_aux_dir/depcomp"
AMDEPBACKSLASH='\'
am__nodep='_no'
fi
AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
AC_SUBST([AMDEPBACKSLASH])dnl
_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
AC_SUBST([am__nodep])dnl
_AM_SUBST_NOTMAKE([am__nodep])dnl
])
# Generate code to set up dependency tracking. -*- Autoconf -*-
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
#serial 5
# _AM_OUTPUT_DEPENDENCY_COMMANDS
# ------------------------------
AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
[{
# Autoconf 2.62 quotes --file arguments for eval, but not when files
# are listed without --file. Let's play safe and only enable the eval
# if we detect the quoting.
case $CONFIG_FILES in
*\'*) eval set x "$CONFIG_FILES" ;;
*) set x $CONFIG_FILES ;;
esac
shift
for mf
do
# Strip MF so we end up with the name of the file.
mf=`echo "$mf" | sed -e 's/:.*$//'`
# Check whether this is an Automake generated Makefile or not.
# We used to match only the files named `Makefile.in', but
# some people rename them; so instead we look at the file content.
# Grep'ing the first line is not enough: some people post-process
# each Makefile.in and add a new line on top of each file to say so.
# Grep'ing the whole file is not good either: AIX grep has a line
# limit of 2048, but all sed's we know have understand at least 4000.
if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
dirpart=`AS_DIRNAME("$mf")`
else
continue
fi
# Extract the definition of DEPDIR, am__include, and am__quote
# from the Makefile without running `make'.
DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
test -z "$DEPDIR" && continue
am__include=`sed -n 's/^am__include = //p' < "$mf"`
test -z "am__include" && continue
am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
# When using ansi2knr, U may be empty or an underscore; expand it
U=`sed -n 's/^U = //p' < "$mf"`
# Find all dependency output files, they are included files with
# $(DEPDIR) in their names. We invoke sed twice because it is the
# simplest approach to changing $(DEPDIR) to its actual value in the
# expansion.
for file in `sed -n "
s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
# Make sure the directory exists.
test -f "$dirpart/$file" && continue
fdir=`AS_DIRNAME(["$file"])`
AS_MKDIR_P([$dirpart/$fdir])
# echo "creating $dirpart/$file"
echo '# dummy' > "$dirpart/$file"
done
done
}
])# _AM_OUTPUT_DEPENDENCY_COMMANDS
# AM_OUTPUT_DEPENDENCY_COMMANDS
# -----------------------------
# This macro should only be invoked once -- use via AC_REQUIRE.
#
# This code is only required when automatic dependency tracking
# is enabled. FIXME. This creates each `.P' file that we will
# need in order to bootstrap the dependency handling code.
AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
[AC_CONFIG_COMMANDS([depfiles],
[test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
[AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
])
# Do all the work for Automake. -*- Autoconf -*-
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 16
# This macro actually does too much. Some checks are only needed if
# your package does certain things. But this isn't really a big deal.
# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
# AM_INIT_AUTOMAKE([OPTIONS])
# -----------------------------------------------
# The call with PACKAGE and VERSION arguments is the old style
# call (pre autoconf-2.50), which is being phased out. PACKAGE
# and VERSION should now be passed to AC_INIT and removed from
# the call to AM_INIT_AUTOMAKE.
# We support both call styles for the transition. After
# the next Automake release, Autoconf can make the AC_INIT
# arguments mandatory, and then we can depend on a new Autoconf
# release and drop the old call support.
AC_DEFUN([AM_INIT_AUTOMAKE],
[AC_PREREQ([2.62])dnl
dnl Autoconf wants to disallow AM_ names. We explicitly allow
dnl the ones we care about.
m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
AC_REQUIRE([AC_PROG_INSTALL])dnl
if test "`cd $srcdir && pwd`" != "`pwd`"; then
# Use -I$(srcdir) only when $(srcdir) != ., so that make's output
# is not polluted with repeated "-I."
AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
# test to see if srcdir already configured
if test -f $srcdir/config.status; then
AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
fi
fi
# test whether we have cygpath
if test -z "$CYGPATH_W"; then
if (cygpath --version) >/dev/null 2>/dev/null; then
CYGPATH_W='cygpath -w'
else
CYGPATH_W=echo
fi
fi
AC_SUBST([CYGPATH_W])
# Define the identity of the package.
dnl Distinguish between old-style and new-style calls.
m4_ifval([$2],
[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
AC_SUBST([PACKAGE], [$1])dnl
AC_SUBST([VERSION], [$2])],
[_AM_SET_OPTIONS([$1])dnl
dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
[m4_fatal([AC_INIT should be called with package and version arguments])])dnl
AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
_AM_IF_OPTION([no-define],,
[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
# Some tools Automake needs.
AC_REQUIRE([AM_SANITY_CHECK])dnl
AC_REQUIRE([AC_ARG_PROGRAM])dnl
AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
AM_MISSING_PROG(AUTOCONF, autoconf)
AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
AM_MISSING_PROG(AUTOHEADER, autoheader)
AM_MISSING_PROG(MAKEINFO, makeinfo)
AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
AC_REQUIRE([AM_PROG_MKDIR_P])dnl
# We need awk for the "check" target. The system "awk" is bad on
# some platforms.
AC_REQUIRE([AC_PROG_AWK])dnl
AC_REQUIRE([AC_PROG_MAKE_SET])dnl
AC_REQUIRE([AM_SET_LEADING_DOT])dnl
_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
[_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
[_AM_PROG_TAR([v7])])])
_AM_IF_OPTION([no-dependencies],,
[AC_PROVIDE_IFELSE([AC_PROG_CC],
[_AM_DEPENDENCIES(CC)],
[define([AC_PROG_CC],
defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
AC_PROVIDE_IFELSE([AC_PROG_CXX],
[_AM_DEPENDENCIES(CXX)],
[define([AC_PROG_CXX],
defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
AC_PROVIDE_IFELSE([AC_PROG_OBJC],
[_AM_DEPENDENCIES(OBJC)],
[define([AC_PROG_OBJC],
defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
])
_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro
dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
AC_CONFIG_COMMANDS_PRE(dnl
[m4_provide_if([_AM_COMPILER_EXEEXT],
[AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
])
dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
dnl mangled by Autoconf and run in a shell conditional statement.
m4_define([_AC_COMPILER_EXEEXT],
m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
# When config.status generates a header, we must update the stamp-h file.
# This file resides in the same directory as the config header
# that is generated. The stamp files are numbered to have different names.
# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
# loop where config.status creates the headers, so we can generate
# our stamp files there.
AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
[# Compute $1's index in $config_headers.
_am_arg=$1
_am_stamp_count=1
for _am_header in $config_headers :; do
case $_am_header in
$_am_arg | $_am_arg:* )
break ;;
* )
_am_stamp_count=`expr $_am_stamp_count + 1` ;;
esac
done
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
# Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation,
# Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 1
# AM_PROG_INSTALL_SH
# ------------------
# Define $install_sh.
AC_DEFUN([AM_PROG_INSTALL_SH],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
if test x"${install_sh}" != xset; then
case $am_aux_dir in
*\ * | *\ *)
install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
*)
install_sh="\${SHELL} $am_aux_dir/install-sh"
esac
fi
AC_SUBST(install_sh)])
# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 2
# Check whether the underlying file-system supports filenames
# with a leading dot. For instance MS-DOS doesn't.
AC_DEFUN([AM_SET_LEADING_DOT],
[rm -rf .tst 2>/dev/null
mkdir .tst 2>/dev/null
if test -d .tst; then
am__leading_dot=.
else
am__leading_dot=_
fi
rmdir .tst 2>/dev/null
AC_SUBST([am__leading_dot])])
# Check to see how 'make' treats includes. -*- Autoconf -*-
# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 4
# AM_MAKE_INCLUDE()
# -----------------
# Check to see how make treats includes.
AC_DEFUN([AM_MAKE_INCLUDE],
[am_make=${MAKE-make}
cat > confinc << 'END'
am__doit:
@echo this is the am__doit target
.PHONY: am__doit
END
# If we don't find an include directive, just comment out the code.
AC_MSG_CHECKING([for style of include used by $am_make])
am__include="#"
am__quote=
_am_result=none
# First try GNU make style include.
echo "include confinc" > confmf
# Ignore all kinds of additional output from `make'.
case `$am_make -s -f confmf 2> /dev/null` in #(
*the\ am__doit\ target*)
am__include=include
am__quote=
_am_result=GNU
;;
esac
# Now try BSD make style include.
if test "$am__include" = "#"; then
echo '.include "confinc"' > confmf
case `$am_make -s -f confmf 2> /dev/null` in #(
*the\ am__doit\ target*)
am__include=.include
am__quote="\""
_am_result=BSD
;;
esac
fi
AC_SUBST([am__include])
AC_SUBST([am__quote])
AC_MSG_RESULT([$_am_result])
rm -f confinc confmf
])
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 6
# AM_MISSING_PROG(NAME, PROGRAM)
# ------------------------------
AC_DEFUN([AM_MISSING_PROG],
[AC_REQUIRE([AM_MISSING_HAS_RUN])
$1=${$1-"${am_missing_run}$2"}
AC_SUBST($1)])
# AM_MISSING_HAS_RUN
# ------------------
# Define MISSING if not defined so far and test if it supports --run.
# If it does, set am_missing_run to use it, otherwise, to nothing.
AC_DEFUN([AM_MISSING_HAS_RUN],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
AC_REQUIRE_AUX_FILE([missing])dnl
if test x"${MISSING+set}" != xset; then
case $am_aux_dir in
*\ * | *\ *)
MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
*)
MISSING="\${SHELL} $am_aux_dir/missing" ;;
esac
fi
# Use eval to expand $SHELL
if eval "$MISSING --run true"; then
am_missing_run="$MISSING --run "
else
am_missing_run=
AC_MSG_WARN([`missing' script is too old or missing])
fi
])
# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation,
# Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 1
# AM_PROG_MKDIR_P
# ---------------
# Check for `mkdir -p'.
AC_DEFUN([AM_PROG_MKDIR_P],
[AC_PREREQ([2.60])dnl
AC_REQUIRE([AC_PROG_MKDIR_P])dnl
dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
dnl while keeping a definition of mkdir_p for backward compatibility.
dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
dnl Makefile.ins that do not define MKDIR_P, so we do our own
dnl adjustment using top_builddir (which is defined more often than
dnl MKDIR_P).
AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
case $mkdir_p in
[[\\/$]]* | ?:[[\\/]]*) ;;
*/*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
esac
])
# Helper functions for option handling. -*- Autoconf -*-
# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software
# Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 5
# _AM_MANGLE_OPTION(NAME)
# -----------------------
AC_DEFUN([_AM_MANGLE_OPTION],
[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
# _AM_SET_OPTION(NAME)
# --------------------
# Set option NAME. Presently that only means defining a flag for this option.
AC_DEFUN([_AM_SET_OPTION],
[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
# _AM_SET_OPTIONS(OPTIONS)
# ------------------------
# OPTIONS is a space-separated list of Automake options.
AC_DEFUN([_AM_SET_OPTIONS],
[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
# -------------------------------------------
# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
AC_DEFUN([_AM_IF_OPTION],
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
# Check to make sure that the build environment is sane. -*- Autoconf -*-
# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 5
# AM_SANITY_CHECK
# ---------------
AC_DEFUN([AM_SANITY_CHECK],
[AC_MSG_CHECKING([whether build environment is sane])
# Just in case
sleep 1
echo timestamp > conftest.file
# Reject unsafe characters in $srcdir or the absolute working directory
# name. Accept space and tab only in the latter.
am_lf='
'
case `pwd` in
*[[\\\"\#\$\&\'\`$am_lf]]*)
AC_MSG_ERROR([unsafe absolute working directory name]);;
esac
case $srcdir in
*[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
esac
# Do `set' in a subshell so we don't clobber the current shell's
# arguments. Must try -L first in case configure is actually a
# symlink; some systems play weird games with the mod time of symlinks
# (eg FreeBSD returns the mod time of the symlink's containing
# directory).
if (
set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
if test "$[*]" = "X"; then
# -L didn't work.
set X `ls -t "$srcdir/configure" conftest.file`
fi
rm -f conftest.file
if test "$[*]" != "X $srcdir/configure conftest.file" \
&& test "$[*]" != "X conftest.file $srcdir/configure"; then
# If neither matched, then we have a broken ls. This can happen
# if, for instance, CONFIG_SHELL is bash and it inherits a
# broken ls alias from the environment. This has actually
# happened. Such a system could not be considered "sane".
AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
alias in your environment])
fi
test "$[2]" = conftest.file
)
then
# Ok.
:
else
AC_MSG_ERROR([newly created file is older than distributed files!
Check your system clock])
fi
AC_MSG_RESULT(yes)])
# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 1
# AM_PROG_INSTALL_STRIP
# ---------------------
# One issue with vendor `install' (even GNU) is that you can't
# specify the program used to strip binaries. This is especially
# annoying in cross-compiling environments, where the build's strip
# is unlikely to handle the host's binaries.
# Fortunately install-sh will honor a STRIPPROG variable, so we
# always use install-sh in `make install-strip', and initialize
# STRIPPROG with the value of the STRIP variable (set by the user).
AC_DEFUN([AM_PROG_INSTALL_STRIP],
[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
# Installed binaries are usually stripped using `strip' when the user
# run `make install-strip'. However `strip' might not be the right
# tool to use in cross-compilation environments, therefore Automake
# will honor the `STRIP' environment variable to overrule this program.
dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
if test "$cross_compiling" != no; then
AC_CHECK_TOOL([STRIP], [strip], :)
fi
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
AC_SUBST([INSTALL_STRIP_PROGRAM])])
# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 3
# _AM_SUBST_NOTMAKE(VARIABLE)
# ---------------------------
# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
# This macro is traced by Automake.
AC_DEFUN([_AM_SUBST_NOTMAKE])
# AM_SUBST_NOTMAKE(VARIABLE)
# --------------------------
# Public sister of _AM_SUBST_NOTMAKE.
AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
# Check how to create a tarball. -*- Autoconf -*-
# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 2
# _AM_PROG_TAR(FORMAT)
# --------------------
# Check how to create a tarball in format FORMAT.
# FORMAT should be one of `v7', `ustar', or `pax'.
#
# Substitute a variable $(am__tar) that is a command
# writing to stdout a FORMAT-tarball containing the directory
# $tardir.
# tardir=directory && $(am__tar) > result.tar
#
# Substitute a variable $(am__untar) that extract such
# a tarball read from stdin.
# $(am__untar) < result.tar
AC_DEFUN([_AM_PROG_TAR],
[# Always define AMTAR for backward compatibility. Yes, it's still used
# in the wild :-( We should find a proper way to deprecate it ...
AC_SUBST([AMTAR], ['$${TAR-tar}'])
m4_if([$1], [v7],
[am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
[m4_case([$1], [ustar],, [pax],,
[m4_fatal([Unknown tar format])])
AC_MSG_CHECKING([how to create a $1 tar archive])
# Loop over all known methods to create a tar archive until one works.
_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
_am_tools=${am_cv_prog_tar_$1-$_am_tools}
# Do not fold the above two line into one, because Tru64 sh and
# Solaris sh will not grok spaces in the rhs of `-'.
for _am_tool in $_am_tools
do
case $_am_tool in
gnutar)
for _am_tar in tar gnutar gtar;
do
AM_RUN_LOG([$_am_tar --version]) && break
done
am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
am__untar="$_am_tar -xf -"
;;
plaintar)
# Must skip GNU tar: if it does not support --format= it doesn't create
# ustar tarball either.
(tar --version) >/dev/null 2>&1 && continue
am__tar='tar chf - "$$tardir"'
am__tar_='tar chf - "$tardir"'
am__untar='tar xf -'
;;
pax)
am__tar='pax -L -x $1 -w "$$tardir"'
am__tar_='pax -L -x $1 -w "$tardir"'
am__untar='pax -r'
;;
cpio)
am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
am__untar='cpio -i -H $1 -d'
;;
none)
am__tar=false
am__tar_=false
am__untar=false
;;
esac
# If the value was cached, stop now. We just wanted to have am__tar
# and am__untar set.
test -n "${am_cv_prog_tar_$1}" && break
# tar/untar a dummy directory, and stop if the command works
rm -rf conftest.dir
mkdir conftest.dir
echo GrepMe > conftest.dir/file
AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
rm -rf conftest.dir
if test -s conftest.tar; then
AM_RUN_LOG([$am__untar <conftest.tar])
grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
fi
done
rm -rf conftest.dir
AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
AC_MSG_RESULT([$am_cv_prog_tar_$1])])
AC_SUBST([am__tar])
AC_SUBST([am__untar])
]) # _AM_PROG_TAR
m4_include([m4/android.m4])
m4_include([m4/iphone.m4])
m4_include([m4/universal.m4])
m4_include([m4/generated/libtool.m4])
m4_include([m4/generated/ltoptions.m4])
m4_include([m4/generated/ltsugar.m4])
m4_include([m4/generated/ltversion.m4])
m4_include([m4/generated/lt~obsolete.m4])

View file

@ -1,26 +0,0 @@
# The ASIO sources are not free, so they are not included here. You can get
# them for free (as in beer) from Steinberg:
# http://www.steinberg.net/en/company/3rd_party_developer.html
# First, download the ASIO SDK. You have to agree to Steinberg's license, then
# submit an email address, then they'll send you the download URL in an
# email. Download the asiosdk2.2.zip file to the pd/asio directory, then unzip
# it right into that folder. You should have all of the ASIO files in
# pd/asio/ASIOSDK2 when you are done unzipping.
# this is built as a "libtool convenience library"
# http://sources.redhat.com/automake/automake.html#Libtool-Convenience-Libraries
AUTOMAKE_OPTIONS = foreign
AM_CFLAGS =
INCLUDES = -I./ASIOSDK2/host -I./ASIOSDK2/host/pc -I./ASIOSDK2/common
noinst_LTLIBRARIES = libasio.la
nodist_libasio_la_SOURCES = \
ASIOSDK2/common/asio.cpp \
ASIOSDK2/host/asiodrivers.cpp \
ASIOSDK2/host/pc/asiolist.cpp
EXTRA_DIST = README.txt

View file

@ -1,561 +0,0 @@
# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
# The ASIO sources are not free, so they are not included here. You can get
# them for free (as in beer) from Steinberg:
# http://www.steinberg.net/en/company/3rd_party_developer.html
# First, download the ASIO SDK. You have to agree to Steinberg's license, then
# submit an email address, then they'll send you the download URL in an
# email. Download the asiosdk2.2.zip file to the pd/asio directory, then unzip
# it right into that folder. You should have all of the ASIO files in
# pd/asio/ASIOSDK2 when you are done unzipping.
# this is built as a "libtool convenience library"
# http://sources.redhat.com/automake/automake.html#Libtool-Convenience-Libraries
VPATH = @srcdir@
am__make_dryrun = \
{ \
am__dry=no; \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
*) \
for am__flg in $$MAKEFLAGS; do \
case $$am__flg in \
*=*|--*) ;; \
*n*) am__dry=yes; break;; \
esac; \
done;; \
esac; \
test $$am__dry = yes; \
}
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = asio
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/android.m4 \
$(top_srcdir)/m4/iphone.m4 $(top_srcdir)/m4/universal.m4 \
$(top_srcdir)/m4/generated/libtool.m4 \
$(top_srcdir)/m4/generated/ltoptions.m4 \
$(top_srcdir)/m4/generated/ltsugar.m4 \
$(top_srcdir)/m4/generated/ltversion.m4 \
$(top_srcdir)/m4/generated/lt~obsolete.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
LTLIBRARIES = $(noinst_LTLIBRARIES)
libasio_la_LIBADD =
nodist_libasio_la_OBJECTS = asio.lo asiodrivers.lo asiolist.lo
libasio_la_OBJECTS = $(nodist_libasio_la_OBJECTS)
DEFAULT_INCLUDES = -I.@am__isrc@
depcomp = $(SHELL) $(top_srcdir)/m4/config/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
CXXLD = $(CXX)
CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
SOURCES = $(nodist_libasio_la_SOURCES)
DIST_SOURCES =
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALLOCA = @ALLOCA@
ALSA_LIBS = @ALSA_LIBS@
AMTAR = @AMTAR@
AR = @AR@
ARCH_CFLAGS = @ARCH_CFLAGS@
ARCH_LDFLAGS = @ARCH_LDFLAGS@
AS = @AS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
EXTERNAL_CFLAGS = @EXTERNAL_CFLAGS@
EXTERNAL_EXTENSION = @EXTERNAL_EXTENSION@
EXTERNAL_LDFLAGS = @EXTERNAL_LDFLAGS@
EXTERNTARGET = @EXTERNTARGET@
FGREP = @FGREP@
GREP = @GREP@
HAVE_MSGFMT = @HAVE_MSGFMT@
INCLUDES = -I./ASIOSDK2/host -I./ASIOSDK2/host/pc -I./ASIOSDK2/common
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
JACK_LIBS = @JACK_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBM = @LIBM@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
subdirs = @subdirs@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
AUTOMAKE_OPTIONS = foreign
AM_CFLAGS =
noinst_LTLIBRARIES = libasio.la
nodist_libasio_la_SOURCES = \
ASIOSDK2/common/asio.cpp \
ASIOSDK2/host/asiodrivers.cpp \
ASIOSDK2/host/pc/asiolist.cpp
EXTRA_DIST = README.txt
all: all-am
.SUFFIXES:
.SUFFIXES: .cpp .lo .o .obj
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign asio/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign asio/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
clean-noinstLTLIBRARIES:
-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
test "$$dir" != "$$p" || dir=.; \
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
libasio.la: $(libasio_la_OBJECTS) $(libasio_la_DEPENDENCIES) $(EXTRA_libasio_la_DEPENDENCIES)
$(CXXLINK) $(libasio_la_OBJECTS) $(libasio_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asio.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asiodrivers.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asiolist.Plo@am__quote@
.cpp.o:
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
.cpp.obj:
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
.cpp.lo:
@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
asio.lo: ASIOSDK2/common/asio.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT asio.lo -MD -MP -MF $(DEPDIR)/asio.Tpo -c -o asio.lo `test -f 'ASIOSDK2/common/asio.cpp' || echo '$(srcdir)/'`ASIOSDK2/common/asio.cpp
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/asio.Tpo $(DEPDIR)/asio.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ASIOSDK2/common/asio.cpp' object='asio.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o asio.lo `test -f 'ASIOSDK2/common/asio.cpp' || echo '$(srcdir)/'`ASIOSDK2/common/asio.cpp
asiodrivers.lo: ASIOSDK2/host/asiodrivers.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT asiodrivers.lo -MD -MP -MF $(DEPDIR)/asiodrivers.Tpo -c -o asiodrivers.lo `test -f 'ASIOSDK2/host/asiodrivers.cpp' || echo '$(srcdir)/'`ASIOSDK2/host/asiodrivers.cpp
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/asiodrivers.Tpo $(DEPDIR)/asiodrivers.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ASIOSDK2/host/asiodrivers.cpp' object='asiodrivers.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o asiodrivers.lo `test -f 'ASIOSDK2/host/asiodrivers.cpp' || echo '$(srcdir)/'`ASIOSDK2/host/asiodrivers.cpp
asiolist.lo: ASIOSDK2/host/pc/asiolist.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT asiolist.lo -MD -MP -MF $(DEPDIR)/asiolist.Tpo -c -o asiolist.lo `test -f 'ASIOSDK2/host/pc/asiolist.cpp' || echo '$(srcdir)/'`ASIOSDK2/host/pc/asiolist.cpp
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/asiolist.Tpo $(DEPDIR)/asiolist.Plo
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ASIOSDK2/host/pc/asiolist.cpp' object='asiolist.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o asiolist.lo `test -f 'ASIOSDK2/host/pc/asiolist.cpp' || echo '$(srcdir)/'`ASIOSDK2/host/pc/asiolist.cpp
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
set x; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am:
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-libtool clean-noinstLTLIBRARIES ctags distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
pdf pdf-am ps ps-am tags uninstall uninstall-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View file

@ -1,13 +0,0 @@
In order to build ASIO support into Pd on Windows, you need to download the
ASIO sources from Steinberg directly. Their license does not let us
redistribute their source files.
- Download the ASIO SDK http://www.steinberg.net/en/company/3rd_party_developer.html
You have to agree to Steinberg's license, then submit an email address, then
they'll send you the download URL in an email.
- Uncompress asiosdk2.2.zip into pd/asio

View file

@ -1,24 +0,0 @@
#!/bin/sh
PATH=/sw/bin:$PATH
PWD=${0%/*}
## git cannot really handle empty directories
## so let's create the missing ones
mkdir -p ${PWD}/m4/generated
case `uname -s` in
MINGW*)
# autoreconf doesn't always work on MinGW
aclocal --force -I m4/generated -I m4 && \
libtoolize --install --force && \
autoconf --force && \
automake --add-missing --copy --force-missing && \
true
;;
*)
autoreconf --install --force --verbose
;;
esac

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,516 +0,0 @@
# This file was generated by Autom4te Sun Apr 29 21:48:16 UTC 2012.
# It contains the lists of macros which have been traced.
# It can be safely removed.
@request = (
bless( [
'0',
1,
[
'/usr/share/autoconf'
],
[
'/usr/share/autoconf/autoconf/autoconf.m4f',
'/usr/share/aclocal/argz.m4',
'/usr/share/aclocal/libtool.m4',
'/usr/share/aclocal/ltdl.m4',
'/usr/share/aclocal/ltoptions.m4',
'/usr/share/aclocal/ltsugar.m4',
'/usr/share/aclocal/ltversion.m4',
'/usr/share/aclocal/lt~obsolete.m4',
'/usr/share/aclocal-1.11/amversion.m4',
'/usr/share/aclocal-1.11/auxdir.m4',
'/usr/share/aclocal-1.11/cond.m4',
'/usr/share/aclocal-1.11/depend.m4',
'/usr/share/aclocal-1.11/depout.m4',
'/usr/share/aclocal-1.11/init.m4',
'/usr/share/aclocal-1.11/install-sh.m4',
'/usr/share/aclocal-1.11/lead-dot.m4',
'/usr/share/aclocal-1.11/make.m4',
'/usr/share/aclocal-1.11/missing.m4',
'/usr/share/aclocal-1.11/mkdirp.m4',
'/usr/share/aclocal-1.11/options.m4',
'/usr/share/aclocal-1.11/runlog.m4',
'/usr/share/aclocal-1.11/sanity.m4',
'/usr/share/aclocal-1.11/silent.m4',
'/usr/share/aclocal-1.11/strip.m4',
'/usr/share/aclocal-1.11/substnot.m4',
'/usr/share/aclocal-1.11/tar.m4',
'm4/android.m4',
'm4/iphone.m4',
'm4/universal.m4',
'configure.ac'
],
{
'AM_ENABLE_STATIC' => 1,
'AC_LIBTOOL_LANG_RC_CONFIG' => 1,
'_LT_AC_SHELL_INIT' => 1,
'AC_DEFUN' => 1,
'_LT_AC_LANG_CXX_CONFIG' => 1,
'AC_PROG_LIBTOOL' => 1,
'AM_PROG_MKDIR_P' => 1,
'AM_AUTOMAKE_VERSION' => 1,
'AM_SUBST_NOTMAKE' => 1,
'AM_MISSING_PROG' => 1,
'AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH' => 1,
'_LT_AC_LANG_C_CONFIG' => 1,
'AM_PROG_INSTALL_STRIP' => 1,
'_m4_warn' => 1,
'AC_LIBTOOL_OBJDIR' => 1,
'gl_FUNC_ARGZ' => 1,
'AM_SANITY_CHECK' => 1,
'LTOBSOLETE_VERSION' => 1,
'AC_LIBTOOL_LANG_GCJ_CONFIG' => 1,
'AC_LIBTOOL_PROG_COMPILER_PIC' => 1,
'LT_LIB_M' => 1,
'_LT_AC_CHECK_DLFCN' => 1,
'AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE' => 1,
'LTSUGAR_VERSION' => 1,
'_LT_PROG_LTMAIN' => 1,
'LT_SYS_SYMBOL_USCORE' => 1,
'_AM_PROG_TAR' => 1,
'AC_LIBTOOL_GCJ' => 1,
'_LT_WITH_SYSROOT' => 1,
'LT_SYS_DLOPEN_DEPLIBS' => 1,
'LT_FUNC_DLSYM_USCORE' => 1,
'_LT_AC_LANG_F77' => 1,
'AC_LIBTOOL_CONFIG' => 1,
'AC_LTDL_DLLIB' => 1,
'_AM_SUBST_NOTMAKE' => 1,
'_AM_AUTOCONF_VERSION' => 1,
'AM_DISABLE_SHARED' => 1,
'_LT_PROG_ECHO_BACKSLASH' => 1,
'_LTDL_SETUP' => 1,
'AM_PROG_LIBTOOL' => 1,
'_LT_AC_LANG_CXX' => 1,
'AM_PROG_LD' => 1,
'_LT_AC_FILE_LTDLL_C' => 1,
'AC_LIB_LTDL' => 1,
'PD_CHECK_ANDROID' => 1,
'AU_DEFUN' => 1,
'AC_PROG_NM' => 1,
'AC_LIBTOOL_DLOPEN' => 1,
'AC_PROG_LD' => 1,
'AC_ENABLE_FAST_INSTALL' => 1,
'AC_PROG_LD_GNU' => 1,
'AC_LIBTOOL_FC' => 1,
'LTDL_CONVENIENCE' => 1,
'_AM_SET_OPTION' => 1,
'AC_LTDL_PREOPEN' => 1,
'_LT_LINKER_BOILERPLATE' => 1,
'_LT_PREPARE_SED_QUOTE_VARS' => 1,
'AC_LIBTOOL_LANG_CXX_CONFIG' => 1,
'AC_LIBTOOL_PROG_CC_C_O' => 1,
'gl_PREREQ_ARGZ' => 1,
'LT_SUPPORTED_TAG' => 1,
'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
'LT_PROG_RC' => 1,
'LT_SYS_MODULE_EXT' => 1,
'AC_DEFUN_ONCE' => 1,
'_LT_AC_LANG_GCJ' => 1,
'AC_LTDL_OBJDIR' => 1,
'_LT_PATH_TOOL_PREFIX' => 1,
'AC_LIBTOOL_RC' => 1,
'AC_DISABLE_FAST_INSTALL' => 1,
'_LT_AC_PROG_ECHO_BACKSLASH' => 1,
'AM_SILENT_RULES' => 1,
'include' => 1,
'_LT_AC_TRY_DLOPEN_SELF' => 1,
'_LT_AC_SYS_LIBPATH_AIX' => 1,
'LT_AC_PROG_SED' => 1,
'AM_ENABLE_SHARED' => 1,
'LTDL_INSTALLABLE' => 1,
'_LT_AC_LANG_GCJ_CONFIG' => 1,
'AC_ENABLE_SHARED' => 1,
'AC_ENABLE_STATIC' => 1,
'_LT_REQUIRED_DARWIN_CHECKS' => 1,
'AC_LIBTOOL_SYS_HARD_LINK_LOCKS' => 1,
'_LT_AC_TAGVAR' => 1,
'AC_LIBTOOL_LANG_F77_CONFIG' => 1,
'AM_CONDITIONAL' => 1,
'LT_LIB_DLLOAD' => 1,
'_LT_PROG_CXX' => 1,
'_LT_PROG_F77' => 1,
'LTVERSION_VERSION' => 1,
'LTDL_INIT' => 1,
'm4_include' => 1,
'AM_PROG_INSTALL_SH' => 1,
'AC_PROG_EGREP' => 1,
'AC_PATH_MAGIC' => 1,
'_AC_AM_CONFIG_HEADER_HOOK' => 1,
'AC_LTDL_SYSSEARCHPATH' => 1,
'AM_MAKE_INCLUDE' => 1,
'LT_CMD_MAX_LEN' => 1,
'_LT_AC_TAGCONFIG' => 1,
'm4_pattern_forbid' => 1,
'_LT_LINKER_OPTION' => 1,
'AC_LIBTOOL_COMPILER_OPTION' => 1,
'AC_DISABLE_SHARED' => 1,
'_LT_COMPILER_BOILERPLATE' => 1,
'AC_LIBTOOL_WIN32_DLL' => 1,
'AC_LIBTOOL_SETUP' => 1,
'AC_PROG_LD_RELOAD_FLAG' => 1,
'AC_LTDL_DLSYM_USCORE' => 1,
'AM_MISSING_HAS_RUN' => 1,
'LT_LANG' => 1,
'LT_SYS_DLSEARCH_PATH' => 1,
'LT_CONFIG_LTDL_DIR' => 1,
'AC_LIBTOOL_DLOPEN_SELF' => 1,
'LT_OUTPUT' => 1,
'AC_LIBTOOL_PROG_LD_SHLIBS' => 1,
'AC_WITH_LTDL' => 1,
'AC_LIBTOOL_LINKER_OPTION' => 1,
'LT_AC_PROG_RC' => 1,
'AC_LIBTOOL_CXX' => 1,
'LT_INIT' => 1,
'LT_AC_PROG_GCJ' => 1,
'LT_SYS_DLOPEN_SELF' => 1,
'PD_CHECK_IPHONE' => 1,
'AM_DISABLE_STATIC' => 1,
'AM_DEP_TRACK' => 1,
'_LT_AC_PROG_CXXCPP' => 1,
'_AC_PROG_LIBTOOL' => 1,
'PD_CHECK_UNIVERSAL' => 1,
'_AM_IF_OPTION' => 1,
'AC_PATH_TOOL_PREFIX' => 1,
'm4_pattern_allow' => 1,
'AC_LIBTOOL_F77' => 1,
'AM_SET_LEADING_DOT' => 1,
'LT_AC_PROG_EGREP' => 1,
'_LT_PROG_FC' => 1,
'_AM_DEPENDENCIES' => 1,
'AC_LIBTOOL_LANG_C_CONFIG' => 1,
'LTOPTIONS_VERSION' => 1,
'_LT_AC_SYS_COMPILER' => 1,
'AM_PROG_NM' => 1,
'AC_LIBLTDL_CONVENIENCE' => 1,
'AC_DEPLIBS_CHECK_METHOD' => 1,
'AC_LIBLTDL_INSTALLABLE' => 1,
'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1,
'AC_LTDL_ENABLE_INSTALL' => 1,
'LT_PROG_GCJ' => 1,
'AC_LIBTOOL_SYS_DYNAMIC_LINKER' => 1,
'AM_INIT_AUTOMAKE' => 1,
'AC_DISABLE_STATIC' => 1,
'LT_PATH_NM' => 1,
'AC_LTDL_SHLIBEXT' => 1,
'_LT_AC_LOCK' => 1,
'_LT_AC_LANG_RC_CONFIG' => 1,
'LT_PROG_GO' => 1,
'LT_SYS_MODULE_PATH' => 1,
'LT_WITH_LTDL' => 1,
'AC_LIBTOOL_POSTDEP_PREDEP' => 1,
'AC_LTDL_SHLIBPATH' => 1,
'AM_AUX_DIR_EXPAND' => 1,
'AC_LIBTOOL_PROG_COMPILER_NO_RTTI' => 1,
'_LT_AC_LANG_F77_CONFIG' => 1,
'_LT_COMPILER_OPTION' => 1,
'_AM_SET_OPTIONS' => 1,
'AM_RUN_LOG' => 1,
'_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
'AC_LIBTOOL_PICMODE' => 1,
'AC_LTDL_SYS_DLOPEN_DEPLIBS' => 1,
'AC_LIBTOOL_SYS_OLD_ARCHIVE' => 1,
'AC_CHECK_LIBM' => 1,
'LT_PATH_LD' => 1,
'AC_LIBTOOL_SYS_LIB_STRIP' => 1,
'_AM_MANGLE_OPTION' => 1,
'AC_LIBTOOL_SYS_MAX_CMD_LEN' => 1,
'AC_LTDL_SYMBOL_USCORE' => 1,
'AM_SET_DEPDIR' => 1,
'_LT_CC_BASENAME' => 1,
'_LT_LIBOBJ' => 1
}
], 'Autom4te::Request' ),
bless( [
'1',
1,
[
'/usr/share/autoconf'
],
[
'/usr/share/autoconf/autoconf/autoconf.m4f',
'aclocal.m4',
'configure.ac'
],
{
'AM_PROG_F77_C_O' => 1,
'_LT_AC_TAGCONFIG' => 1,
'AC_INIT' => 1,
'm4_pattern_forbid' => 1,
'AC_CANONICAL_TARGET' => 1,
'_AM_COND_IF' => 1,
'AC_CONFIG_LIBOBJ_DIR' => 1,
'AC_SUBST' => 1,
'AC_CANONICAL_HOST' => 1,
'AC_FC_SRCEXT' => 1,
'AC_PROG_LIBTOOL' => 1,
'AM_INIT_AUTOMAKE' => 1,
'AC_CONFIG_SUBDIRS' => 1,
'AM_PATH_GUILE' => 1,
'AM_AUTOMAKE_VERSION' => 1,
'LT_CONFIG_LTDL_DIR' => 1,
'AC_CONFIG_LINKS' => 1,
'AC_REQUIRE_AUX_FILE' => 1,
'LT_SUPPORTED_TAG' => 1,
'm4_sinclude' => 1,
'AM_MAINTAINER_MODE' => 1,
'AM_NLS' => 1,
'AC_FC_PP_DEFINE' => 1,
'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,
'_m4_warn' => 1,
'AM_MAKEFILE_INCLUDE' => 1,
'AM_PROG_CXX_C_O' => 1,
'_AM_MAKEFILE_INCLUDE' => 1,
'_AM_COND_ENDIF' => 1,
'AM_ENABLE_MULTILIB' => 1,
'AM_SILENT_RULES' => 1,
'AM_PROG_MOC' => 1,
'AC_CONFIG_FILES' => 1,
'include' => 1,
'LT_INIT' => 1,
'AM_GNU_GETTEXT' => 1,
'AM_PROG_AR' => 1,
'AC_LIBSOURCE' => 1,
'AC_CANONICAL_BUILD' => 1,
'AM_PROG_FC_C_O' => 1,
'AC_FC_FREEFORM' => 1,
'AC_FC_PP_SRCEXT' => 1,
'AH_OUTPUT' => 1,
'AC_CONFIG_AUX_DIR' => 1,
'_AM_SUBST_NOTMAKE' => 1,
'm4_pattern_allow' => 1,
'AM_PROG_CC_C_O' => 1,
'sinclude' => 1,
'AM_CONDITIONAL' => 1,
'AC_CANONICAL_SYSTEM' => 1,
'AM_XGETTEXT_OPTION' => 1,
'AC_CONFIG_HEADERS' => 1,
'AC_DEFINE_TRACE_LITERAL' => 1,
'AM_POT_TOOLS' => 1,
'm4_include' => 1,
'_AM_COND_ELSE' => 1,
'AC_SUBST_TRACE' => 1
}
], 'Autom4te::Request' ),
bless( [
'2',
1,
[
'/usr/share/autoconf'
],
[
'/usr/share/autoconf/autoconf/autoconf.m4f',
'/usr/share/aclocal/argz.m4',
'/usr/share/aclocal/ltdl.m4',
'/usr/share/aclocal-1.11/amversion.m4',
'/usr/share/aclocal-1.11/auxdir.m4',
'/usr/share/aclocal-1.11/cond.m4',
'/usr/share/aclocal-1.11/depend.m4',
'/usr/share/aclocal-1.11/depout.m4',
'/usr/share/aclocal-1.11/init.m4',
'/usr/share/aclocal-1.11/install-sh.m4',
'/usr/share/aclocal-1.11/lead-dot.m4',
'/usr/share/aclocal-1.11/make.m4',
'/usr/share/aclocal-1.11/missing.m4',
'/usr/share/aclocal-1.11/mkdirp.m4',
'/usr/share/aclocal-1.11/options.m4',
'/usr/share/aclocal-1.11/runlog.m4',
'/usr/share/aclocal-1.11/sanity.m4',
'/usr/share/aclocal-1.11/silent.m4',
'/usr/share/aclocal-1.11/strip.m4',
'/usr/share/aclocal-1.11/substnot.m4',
'/usr/share/aclocal-1.11/tar.m4',
'm4/android.m4',
'm4/iphone.m4',
'm4/universal.m4',
'm4/generated/libtool.m4',
'm4/generated/ltoptions.m4',
'm4/generated/ltsugar.m4',
'm4/generated/ltversion.m4',
'm4/generated/lt~obsolete.m4',
'configure.ac'
],
{
'AM_ENABLE_STATIC' => 1,
'AC_LIBTOOL_LANG_RC_CONFIG' => 1,
'_LT_AC_SHELL_INIT' => 1,
'AC_DEFUN' => 1,
'_LT_AC_LANG_CXX_CONFIG' => 1,
'AC_PROG_LIBTOOL' => 1,
'AM_PROG_MKDIR_P' => 1,
'AM_AUTOMAKE_VERSION' => 1,
'AM_SUBST_NOTMAKE' => 1,
'AM_MISSING_PROG' => 1,
'AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH' => 1,
'_LT_AC_LANG_C_CONFIG' => 1,
'AM_PROG_INSTALL_STRIP' => 1,
'_m4_warn' => 1,
'AC_LIBTOOL_OBJDIR' => 1,
'gl_FUNC_ARGZ' => 1,
'AM_SANITY_CHECK' => 1,
'LTOBSOLETE_VERSION' => 1,
'AC_LIBTOOL_LANG_GCJ_CONFIG' => 1,
'AC_LIBTOOL_PROG_COMPILER_PIC' => 1,
'LT_LIB_M' => 1,
'_LT_AC_CHECK_DLFCN' => 1,
'AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE' => 1,
'LTSUGAR_VERSION' => 1,
'_LT_PROG_LTMAIN' => 1,
'LT_SYS_SYMBOL_USCORE' => 1,
'_AM_PROG_TAR' => 1,
'AC_LIBTOOL_GCJ' => 1,
'_LT_WITH_SYSROOT' => 1,
'LT_SYS_DLOPEN_DEPLIBS' => 1,
'LT_FUNC_DLSYM_USCORE' => 1,
'_LT_AC_LANG_F77' => 1,
'AC_LIBTOOL_CONFIG' => 1,
'AC_LTDL_DLLIB' => 1,
'_AM_SUBST_NOTMAKE' => 1,
'_AM_AUTOCONF_VERSION' => 1,
'AM_DISABLE_SHARED' => 1,
'_LT_PROG_ECHO_BACKSLASH' => 1,
'_LTDL_SETUP' => 1,
'AM_PROG_LIBTOOL' => 1,
'_LT_AC_LANG_CXX' => 1,
'AM_PROG_LD' => 1,
'_LT_AC_FILE_LTDLL_C' => 1,
'AC_LIB_LTDL' => 1,
'PD_CHECK_ANDROID' => 1,
'AU_DEFUN' => 1,
'AC_PROG_NM' => 1,
'AC_LIBTOOL_DLOPEN' => 1,
'AC_PROG_LD' => 1,
'AC_ENABLE_FAST_INSTALL' => 1,
'AC_PROG_LD_GNU' => 1,
'AC_LIBTOOL_FC' => 1,
'LTDL_CONVENIENCE' => 1,
'_AM_SET_OPTION' => 1,
'AC_LTDL_PREOPEN' => 1,
'_LT_LINKER_BOILERPLATE' => 1,
'_LT_PREPARE_SED_QUOTE_VARS' => 1,
'AC_LIBTOOL_LANG_CXX_CONFIG' => 1,
'AC_LIBTOOL_PROG_CC_C_O' => 1,
'gl_PREREQ_ARGZ' => 1,
'LT_SUPPORTED_TAG' => 1,
'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
'LT_PROG_RC' => 1,
'LT_SYS_MODULE_EXT' => 1,
'AC_DEFUN_ONCE' => 1,
'_LT_AC_LANG_GCJ' => 1,
'AC_LTDL_OBJDIR' => 1,
'_LT_PATH_TOOL_PREFIX' => 1,
'AC_LIBTOOL_RC' => 1,
'AC_DISABLE_FAST_INSTALL' => 1,
'_LT_AC_PROG_ECHO_BACKSLASH' => 1,
'AM_SILENT_RULES' => 1,
'include' => 1,
'_LT_AC_TRY_DLOPEN_SELF' => 1,
'_LT_AC_SYS_LIBPATH_AIX' => 1,
'LT_AC_PROG_SED' => 1,
'AM_ENABLE_SHARED' => 1,
'LTDL_INSTALLABLE' => 1,
'_LT_AC_LANG_GCJ_CONFIG' => 1,
'AC_ENABLE_SHARED' => 1,
'AC_ENABLE_STATIC' => 1,
'_LT_REQUIRED_DARWIN_CHECKS' => 1,
'AC_LIBTOOL_SYS_HARD_LINK_LOCKS' => 1,
'_LT_AC_TAGVAR' => 1,
'AC_LIBTOOL_LANG_F77_CONFIG' => 1,
'AM_CONDITIONAL' => 1,
'LT_LIB_DLLOAD' => 1,
'_LT_PROG_CXX' => 1,
'_LT_PROG_F77' => 1,
'LTVERSION_VERSION' => 1,
'LTDL_INIT' => 1,
'm4_include' => 1,
'AM_PROG_INSTALL_SH' => 1,
'AC_PROG_EGREP' => 1,
'AC_PATH_MAGIC' => 1,
'_AC_AM_CONFIG_HEADER_HOOK' => 1,
'AC_LTDL_SYSSEARCHPATH' => 1,
'AM_MAKE_INCLUDE' => 1,
'LT_CMD_MAX_LEN' => 1,
'_LT_AC_TAGCONFIG' => 1,
'm4_pattern_forbid' => 1,
'_LT_LINKER_OPTION' => 1,
'AC_LIBTOOL_COMPILER_OPTION' => 1,
'AC_DISABLE_SHARED' => 1,
'_LT_COMPILER_BOILERPLATE' => 1,
'AC_LIBTOOL_WIN32_DLL' => 1,
'AC_LIBTOOL_SETUP' => 1,
'AC_PROG_LD_RELOAD_FLAG' => 1,
'AC_LTDL_DLSYM_USCORE' => 1,
'AM_MISSING_HAS_RUN' => 1,
'LT_LANG' => 1,
'LT_SYS_DLSEARCH_PATH' => 1,
'LT_CONFIG_LTDL_DIR' => 1,
'AC_LIBTOOL_DLOPEN_SELF' => 1,
'LT_OUTPUT' => 1,
'AC_LIBTOOL_PROG_LD_SHLIBS' => 1,
'AC_WITH_LTDL' => 1,
'AC_LIBTOOL_LINKER_OPTION' => 1,
'LT_AC_PROG_RC' => 1,
'AC_LIBTOOL_CXX' => 1,
'LT_INIT' => 1,
'LT_AC_PROG_GCJ' => 1,
'LT_SYS_DLOPEN_SELF' => 1,
'PD_CHECK_IPHONE' => 1,
'AM_DISABLE_STATIC' => 1,
'AM_DEP_TRACK' => 1,
'_LT_AC_PROG_CXXCPP' => 1,
'_AC_PROG_LIBTOOL' => 1,
'PD_CHECK_UNIVERSAL' => 1,
'_AM_IF_OPTION' => 1,
'AC_PATH_TOOL_PREFIX' => 1,
'm4_pattern_allow' => 1,
'AC_LIBTOOL_F77' => 1,
'AM_SET_LEADING_DOT' => 1,
'LT_AC_PROG_EGREP' => 1,
'_LT_PROG_FC' => 1,
'_AM_DEPENDENCIES' => 1,
'AC_LIBTOOL_LANG_C_CONFIG' => 1,
'LTOPTIONS_VERSION' => 1,
'_LT_AC_SYS_COMPILER' => 1,
'AM_PROG_NM' => 1,
'AC_LIBLTDL_CONVENIENCE' => 1,
'AC_DEPLIBS_CHECK_METHOD' => 1,
'AC_LIBLTDL_INSTALLABLE' => 1,
'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1,
'AC_LTDL_ENABLE_INSTALL' => 1,
'LT_PROG_GCJ' => 1,
'AC_LIBTOOL_SYS_DYNAMIC_LINKER' => 1,
'AM_INIT_AUTOMAKE' => 1,
'AC_DISABLE_STATIC' => 1,
'LT_PATH_NM' => 1,
'AC_LTDL_SHLIBEXT' => 1,
'_LT_AC_LOCK' => 1,
'_LT_AC_LANG_RC_CONFIG' => 1,
'LT_PROG_GO' => 1,
'LT_SYS_MODULE_PATH' => 1,
'LT_WITH_LTDL' => 1,
'AC_LIBTOOL_POSTDEP_PREDEP' => 1,
'AC_LTDL_SHLIBPATH' => 1,
'AM_AUX_DIR_EXPAND' => 1,
'AC_LIBTOOL_PROG_COMPILER_NO_RTTI' => 1,
'_LT_AC_LANG_F77_CONFIG' => 1,
'_LT_COMPILER_OPTION' => 1,
'_AM_SET_OPTIONS' => 1,
'AM_RUN_LOG' => 1,
'_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
'AC_LIBTOOL_PICMODE' => 1,
'AC_LTDL_SYS_DLOPEN_DEPLIBS' => 1,
'AC_LIBTOOL_SYS_OLD_ARCHIVE' => 1,
'AC_CHECK_LIBM' => 1,
'LT_PATH_LD' => 1,
'AC_LIBTOOL_SYS_LIB_STRIP' => 1,
'_AM_MANGLE_OPTION' => 1,
'AC_LIBTOOL_SYS_MAX_CMD_LEN' => 1,
'AC_LTDL_SYMBOL_USCORE' => 1,
'AM_SET_DEPDIR' => 1,
'_LT_CC_BASENAME' => 1,
'_LT_LIBOBJ' => 1
}
], 'Autom4te::Request' )
);

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

20990
src/pd-0.44-2/configure vendored

File diff suppressed because it is too large Load diff

View file

@ -1,278 +0,0 @@
AC_PREREQ(2.59)
AC_INIT(pd,0.44.0)
AC_CONFIG_SRCDIR(src/m_pd.c)
AC_CONFIG_AUX_DIR([m4/config])
AM_INIT_AUTOMAKE
AC_CONFIG_MACRO_DIR([m4/generated])
if test -d "$srcdir/portaudio"; then
AC_CONFIG_SUBDIRS([portaudio])
fi
AC_CANONICAL_HOST
# you will need to install iPhone XCode on Mac OS X to use this:
PD_CHECK_IPHONE(IPHONEOS=yes, IPHONEOS=no, AC_MSG_ERROR([iPhoneOS SDK not available]))
PD_CHECK_ANDROID(ANDROID=yes, ANDROID=no , AC_MSG_ERROR([Android SDK not available]))
case $host in
*darwin*)
if test "x${IPHONEOS}" = "xno"; then
portaudio=yes
portmidi=yes
MACOSX=yes
EXTERNAL_CFLAGS="-fPIC"
EXTERNAL_EXTENSION=d_fat
else
portaudio=no
EXTERNAL_CFLAGS=
EXTERNAL_EXTENSION=pd_darwin
fi
CFLAGS="$CFLAGS -O3 -funroll-loops -fomit-frame-pointer"
INCLUDES="$INCLUDES -I/sw/include"
LDFLAGS="$LDFLAGS -L/sw/lib"
EXTERNAL_LDFLAGS="-bundle -undefined dynamic_lookup"
;;
*linux*|GNU|GNU/kFreeBSD)
# GNU and GNU/kFreeBSD are for Debian, were they are treated very similar to linux
if test "x${host}" = "xGNU"; then
HURD=yes
fi
if test "x${ANDROID}" = "xno"; then
LINUX=yes
portaudio=yes
CFLAGS="$CFLAGS -O6 -funroll-loops -fomit-frame-pointer"
fi
EXTERNAL_CFLAGS="-fPIC"
EXTERNAL_LDFLAGS="-Wl,--export-dynamic -shared -fPIC"
EXTERNAL_EXTENSION=pd_linux
;;
*mingw*)
WINDOWS=yes
MINGW=yes
# ASIO doesn't build yet with the autotools setup. We need to figure out how
# to make the final linking phase use g++
# asio=yes
portaudio=yes
CFLAGS="$CFLAGS -O6 -funroll-loops -fomit-frame-pointer -DWINVER=0x0501 -D_WIN32_WINNT=0x0501"
# ASIO is a C++ library, so if its included, then use g++ to build
CC=g++
EXTERNAL_CFLAGS="-mms-bitfields"
EXTERNAL_LDFLAGS="-s -shared -Wl,--enable-auto-import -lpd"
EXTERNAL_EXTENSION=dll
;;
*cygwin*)
WINDOWS=yes
CYGWIN=yes
portaudio=yes
CFLAGS="$CFLAGS -O6 -funroll-loops -fomit-frame-pointer"
EXTERNAL_CFLAGS=
EXTERNAL_LDFLAGS="-Wl,--export-dynamic -shared -lpd"
EXTERNAL_EXTENSION=dll
;;
esac
PD_CHECK_UNIVERSAL(ARCH, universal=yes, universal=no)
AM_CONDITIONAL(UNIVERSAL, test x$universal = xyes)
if test "x${universal}" = "xyes"; then
CFLAGS="${CFLAGS} ${ARCH_CFLAGS}"
LDFLAGS="${LDFLAGS} ${ARCH_LDFLAGS}"
fi
AM_CONDITIONAL(ANDROID, test x$ANDROID = xyes)
AM_CONDITIONAL(IPHONEOS, test x$IPHONEOS = xyes)
AM_CONDITIONAL(LINUX, test x$LINUX = xyes)
AM_CONDITIONAL(HURD, test x$HURD = xyes)
AM_CONDITIONAL(MACOSX, test x$MACOSX = xyes)
AM_CONDITIONAL(WINDOWS, test x$WINDOWS = xyes)
AM_CONDITIONAL(CYGWIN, test x$MINGW = xyes)
AM_CONDITIONAL(MINGW, test x$MINGW = xyes)
# Configure libtool
AC_LIBTOOL_DLOPEN
AC_LIBTOOL_WIN32_DLL
AC_PROG_LIBTOOL
# Checks for programs.
AC_PROG_CC
AC_PROG_CXX
AC_PROG_INSTALL
AC_PROG_LIBTOOL
AC_PROG_MAKE_SET
AC_PROG_LN_S
#AC_PROG_GREP
#AC_PROG_SED
AC_SUBST(EXTERNTARGET)
AC_SUBST(INCLUDES)
AC_SUBST(EXTERNAL_EXTENSION)
AC_SUBST(EXTERNAL_CFLAGS)
AC_SUBST(EXTERNAL_LDFLAGS)
AC_SUBST([ALSA_LIBS])
AC_SUBST([JACK_LIBS])
dnl Checks for libraries.
AC_CHECK_LIB([dl], [dlopen])
AC_CHECK_LIBM
# AC_CHECK_LIBM computes LIBM but does not add to LIBS, hence we add it in
# src/Makefile.am under pd_LDFLAGS as well
# Checking for `pthread_create' function in -pthread (MinGW uses unusual names)
## CHECK whether this can be replaced by AX_PTHREAD
AC_CHECK_LIB([pthread], [pthread_create],LIBS="-lpthread $LIBS",
AC_CHECK_LIB([pthreadGC2], [pthread_create], LIBS="-lpthreadGC2 $LIBS",
AC_CHECK_LIB([pthreadGC1], [pthread_create], LIBS="-lpthreadGC1 $LIBS",
AC_CHECK_LIB([pthreadGC], [pthread_create], LIBS="-lpthreadGC $LIBS",
AC_MSG_WARN([pthreads required])))))
AC_HEADER_STDC
dnl Cygwin has sys/soundcard.h but Pd isn't ready for Cygwin since it only
dnl includes OSS for UNIX
AC_CHECK_HEADER(sys/soundcard.h, [oss=yes], [oss=no])
AM_CONDITIONAL(OSS, test x$oss = xyes)
AC_CHECK_HEADER(CoreAudio/CoreAudio.h, [coreaudio=yes], [coreaudio=no])
dnl AC_CHECK_HEADER(Jackmp/jack.h, [jack=yes], [jack=no])
dnl portaudio/CoreAudio doesn't work with iPhone
test x$IPHONEOS = xyes && coreaudio=no
AM_CONDITIONAL(COREAUDIO, test x$coreaudio = xyes)
dnl TODO implement debug and static
#AC_ARG_ENABLE(static, [ --enable-static link statically],
# static=$enableval)
#AC_ARG_ENABLE([debug],
# [AS_HELP_STRING([--enable-debug], [use debugging support])],
# [debug=$enableval])
#if test x$debug = xyes; then
# CFLAGS="$CFLAGS -g"
#fi
dnl ALSA
dnl shouldn't we use AM_PATH_ALSA from /usr/share/aclocal/alsa.m4
dnl alternatively we could use pkg-config
AC_ARG_ENABLE([alsa],
[AS_HELP_STRING([--disable-alsa],
[do not use ALSA audio driver])],
[alsa=$enableval], [alsa=yes])
AS_IF([test x$alsa = xyes], [
AC_CHECK_LIB(asound,snd_pcm_info,ALSA_LIBS="-lasound",alsa=no)])
AM_CONDITIONAL(ALSA, test x$alsa = xyes)
dnl ASIO
AC_ARG_ENABLE([asio],
[AS_HELP_STRING([--enable-asio],
[use ASIO audio driver])],
[asio=$enableval])
AS_IF([test x$asio = xyes], [
AC_CHECK_FILE([asio/ASIOSDK2/common/asio.h],[asio=yes],[asio=no])])
AM_CONDITIONAL(ASIO, test x$asio = xyes)
dnl JACK
dnl shouldn't we use pkg-config?
dnl TODO support jack xrun
AC_ARG_ENABLE([jack],
[AS_HELP_STRING([--enable-jack],
[use JACK audio server])],
[jack=$enableval])
dnl on Mac OS X, use the JackOSX.com Jackmp.framework not the jack lib.
dnl this is set in src/Makefile.am based on the JACK var
AS_IF([test x$MACOSX != xyes], [
AS_IF([test x$jack = xyes], [
AC_CHECK_LIB(rt,shm_open,LIBS="$LIBS -lrt")
AC_CHECK_LIB(jack,jack_set_xrun_callback,JACK_LIBS="-ljack";jack=xrun)
AC_CHECK_LIB(jack,jack_set_error_function,JACK_LIBS="-ljack";jack=yes,
jack=no)])])
AM_CONDITIONAL(JACK, test x$jack = xyes)
dnl portaudio
AC_ARG_ENABLE([portaudio],
[AS_HELP_STRING([--disable-portaudio],
[do not use portaudio])],
[portaudio=$enableval])
AM_CONDITIONAL(PORTAUDIO, test x$portaudio = xyes)
dnl portmidi
AC_ARG_ENABLE([portmidi],
[AS_HELP_STRING([--enable-portmidi],
[use portmidi])],
[portmidi=$enableval])
AM_CONDITIONAL(PORTMIDI, test x$portmidi = xyes)
if test x$portmidi = xyes; then echo Using included portmidi; fi
dnl fftw v2
AC_ARG_ENABLE([fftw],
[AS_HELP_STRING([--enable-fftw],
[use FFTW package])],
[fftw=$enableval])
if test x$fftw = xyes; then
AC_CHECK_LIB(fftw, fftw_one, [LIBS="$LIBS -lfftw"],
[AC_MSG_NOTICE([fftw package not found - using built-in FFT]); fftw=no])
fi
AM_CONDITIONAL(FFTW, test x$fftw = xyes)
# Checks for header files.
AC_FUNC_ALLOCA
AC_CHECK_HEADERS([fcntl.h limits.h malloc.h netdb.h netinet/in.h stddef.h stdlib.h string.h sys/ioctl.h sys/param.h sys/socket.h sys/soundcard.h sys/time.h sys/timeb.h unistd.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_TYPE_INT16_T
AC_TYPE_INT32_T
AC_TYPE_OFF_T
AC_TYPE_PID_T
AC_TYPE_SIZE_T
# Checks for library functions.
AC_FUNC_ERROR_AT_LINE
AC_FUNC_FORK
AC_FUNC_MALLOC
AC_FUNC_REALLOC
AC_TYPE_SIGNAL
AC_CHECK_FUNCS([dup2 floor getcwd gethostbyname gettimeofday memmove memset pow regcomp select socket sqrt strchr strerror strrchr strstr strtol])
# check for programs
AC_CHECK_PROG(HAVE_MSGFMT, [msgfmt], yes, no)
test x$HAVE_MSGFMT = xyes || AC_MSG_WARN([Install GNU gettext with msgfmt if you want localizations to be compiled!])
AM_CONDITIONAL(MSGFMT, test x$HAVE_MSGFMT = xyes)
# Specify what files are to be created.
AC_CONFIG_FILES([Makefile
asio/Makefile
man/Makefile
portmidi/Makefile
tcl/Makefile
po/Makefile
src/Makefile
extra/Makefile
extra/bonk~/GNUmakefile
extra/choice/GNUmakefile
extra/expr~/GNUmakefile
extra/fiddle~/GNUmakefile
extra/loop~/GNUmakefile
extra/lrshift~/GNUmakefile
extra/pd~/GNUmakefile
extra/pique/GNUmakefile
extra/sigmund~/GNUmakefile
extra/stdout/GNUmakefile
pd.pc
])
AC_OUTPUT
dnl output some messages at the end
AS_IF([test x$windows = xyes], [
AS_IF([test x$asio = xno], [
AC_MSG_RESULT(
ASIO SDK not found! You need to download asiosdk2.2.zip from:
http://www.steinberg.net/en/company/3rd_party_developer.html)])])

View file

@ -1,23 +0,0 @@
PD_VERSION
A real-time graphical programming environment for live interactive
computer music, Pd works on Linux, Macintosh OSX, and Microsoft Windows.
Pd is copyrighted, but is free for you to use for any reasonable purpose.
See the file:
PD_BASEDIR/LICENSE.txt
Reference documentation for Pd lives in:
file:PD_BASEDIR/doc/1.manual/index.htm
or:
http://www.crca.ucsd.edu/~msp/Pd_documentation/index.htm
More extensive FLOSS documentation is available on:
http://en.flossmanuals.net/PureData/ (English)
http://fr.flossmanuals.net/PureData/ (Francais)
Information of all sorts (guides, development, meetings, etc):
http://puredata.org
The Pd mailing list archive lives in:
http://iem.at/mailinglists/pd-list/

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

View file

@ -1,165 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML>
<HEAD>
<TITLE>Pd Documentation</TITLE>
<meta http-equiv="Content-Type" content="text/html">
<link rel="stylesheet" type="text/css" href="pdmanual.css" media="screen">
</HEAD>
<BODY>
<H1>Pd Documentation</H1>
<P>
This is the HTML documentation for Pd, a patchable environment for audio
analysis, synthesis, and processing,
with a rich set of multimedia capabilities. The latest version of this page
can be found at:
<a href="http://www.crca.ucsd.edu/~msp/software.html" name=s1>
http://www.crca.ucsd.edu/~msp/software.html</A> .
<OL>
<LI> <a href="x1.htm" name=s1>introduction </A>
<OL>
<LI> <a href="x1.htm#s1">guide to the documentation </A>
<LI> <a href="x1.htm#s2">other resources </A>
</OL>
<LI> <A href="x2.htm" name=s2>theory of operation </A>
<OL>
<LI> <A href="x2.htm#s1"> overview </A>
<OL>
<LI> <A href="x2.htm#s1.1"> main window, canvases, and printout </A>
<LI> <A href="x2.htm#s1.2"> object boxes </A>
<LI> <A href="x2.htm#s1.3"> message and GUI boxes </A>
<LI> <A href="x2.htm#s1.4"> patches and files </A>
</OL>
<LI> <A href="x2.htm#s2"> how to edit patches </A>
<OL>
<LI> <A href="x2.htm#s2.1"> edit and run mode </A>
<LI> <A href="x2.htm#s2.2"> creating boxes </A>
<LI> <A href="x2.htm#s2.3"> the selection </A>
<LI> <A href="x2.htm#s2.4"> deleting, cutting, and pasting </A>
<LI> <A href="x2.htm#s2.5"> changing the text </A>
<LI> <A href="x2.htm#s2.6"> connecting and disconnecting boxes </A>
<LI> <A href="x2.htm#s2.7"> properties and help </A>
</OL>
<LI> <A href="x2.htm#s3"> messages </A>
<OL>
<LI> <A href="x2.htm#s3.1"> anatomy of a message </A>
<LI> <A href="x2.htm#s3.2"> depth first message passing </A>
<LI> <A href="x2.htm#s3.3">
hot and cold inlets and right to left outlet order </A>
<LI> <A href="x2.htm#s3.4"> message boxes </A>
</OL>
<LI> <A href="x2.htm#s4"> audio signals </A>
<OL>
<LI> <A href="x2.htm#s4.1"> sample rate and format </A>
<LI> <A href="x2.htm#s4.2"> tilde objects and audio connections </A>
<LI> <A href="x2.htm#s4.3"> converting to and from messages </A>
<LI> <A href="x2.htm#s4.4"> switching and blocking </A>
<LI> <A href="x2.htm#s4.5"> nonlocal signal connections </A>
</OL>
<LI> <A href="x2.htm#s5"> scheduling </A>
<OL>
<LI> <A href="x2.htm#s5.1"> audio and messages </A>
<LI> <A href="x2.htm#s5.2"> computation load </A>
<LI> <A href="x2.htm#s5.3"> determinism </A>
</OL>
<LI> <A href="x2.htm#s6"> semantics </A>
<OL>
<LI> <A href="x2.htm#s6.1"> creation of objects </A>
<LI> <A href="x2.htm#s6.2"> persistence of data </A>
<LI> <A href="x2.htm#s6.3"> message passing </A>
<LI> <A href="x2.htm#s6.4"> inlets and lists </A>
<LI> <A href="x2.htm#s6.5"> dollar signs </A>
</OL>
<LI> <A href="x2.htm#s7"> subpatches </A>
<OL>
<LI> <A href="x2.htm#s7.1"> abstractions </A>
<LI> <A href="x2.htm#s7.2"> graph-on-parent subpatches </A>
</OL>
<LI> <A href="x2.htm#s8"> numeric arrays </A>
<LI> <A href="x2.htm#s9"> data structures </A>
<OL>
<LI> <A href="x2.htm#s9.1"> traversal </A>
<LI> <A href="x2.htm#s9.2"> accessing and changing data </A>
<LI> <A href="x2.htm#s9.3"> editing </A>
<LI> <A href="x2.htm#s9.4"> limitations </A>
</OL>
</OL>
<LI> <a href="x3.htm" name=s3> getting Pd to run </A>
<OL>
<LI> <a href="x3.htm#s1.0"> audio and MIDI </A>
<LI> <a href="x3.htm#s1.1">installing Pd in Microsoft Windows </A>
<LI> <a href="x3.htm#s1.2">installing Pd in Linux </A>
<LI> <a href="x3.htm#s1.3">installing Pd in MacOS X </A>
<LI> <a href="x3.htm#s1.4">installing Pd in IRIX (SGI) </A>
<LI> <a href="x3.htm#s4"> preferences and startup options </A>
<LI> <a href="x3.htm#s5"> how Pd searches for files </A>
</OL>
<LI> <a href="x4.htm" name=s4> writing Pd objects in C </A>
<LI> <a href="x5.htm" name=s5> current status </A>
<OL>
<LI> <a href="x5.htm#s1"> release notes </A>
<LI> <a href="x5.htm#s2"> known bugs </A>
<LI> <a href="x5.htm#s3"> differences from Max/MSP </A>
</OL>
</OL>
<!--
intro: what Pd is
guide to the documentation
other resources
Theory of operation
main window and canvases
messages
signals
loading, editing, and saving patches
subpatches
one-off and abstractions
blocking for signals
data
Making Pd work
how to get and install Pd
IRIX
NT
Linux
audio
testing it
the scheduler advance
IRIX
NT
Linux
GEM
getting it
running it
running Pd patches
command line options
opening & saving files
editing
file stuff
the path
abstractions
externs
the help feature
Writing Pd objects in C
release notes
features
bugs
-->
</BODY>
</HTML>

View file

@ -1,39 +0,0 @@
HTML {
background: #ffffff;
color: #000000;
font-family: Times, Times New Roman, serif;
font-size: 10pt;
}
BODY {
width: 6.5in;
margin-left: 0.5in
}
H1 {
font-size: 36pt;
text-align: center;
}
H2 {
font-size: 10pt;
text-align: center;
}
H3 {
font-size: 12pt;
text-align: left;
}
H4 {
font-size: 10pt;
text-align: left;
}
H5 {
font-size: 8pt;
text-align: left;
}
H6 {
font-size: 8pt;
text-align: left;
}
PRE {
font-size: 8pt;
text-align: left;
}

View file

@ -1,108 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML>
<HEAD>
<TITLE>Pd Documentation 1</TITLE>
<meta http-equiv="Content-Type" content="text/html">
<link rel="stylesheet" type="text/css" href="pdmanual.css" media="screen">
</HEAD>
<BODY>
<H2>Pd Documentation chapter 1: introduction</H2>
<P>
<A href="index.htm#s1"> back to table of contents </A>
<BR><BR>
</P>
<P>
This is the HTML documentation for the Pd computer program.
Pd is free and can be downloaded from the internet;
go to
<A href="http://www.crca.ucsd.edu/~msp/software.html">
http://www.crca.ucsd.edu/~msp/software.html</A>
to get it.
<H3> <A name=s1> 1.1. guide to the documentation </A> </H3>
<P> Pd's documentation consists of:
<UL>
<LI> this HTML manual
<LI> "reference" patches, one for each kind of object in Pd
<LI> "example" patches showing how to do things
<LI> sample C code
</UL>
<P>
This manual has five sections:
<OL>
<LI> this overview
<LI> <A href="x2.htm">
a theory of operations, explaining how Pd works </A>
<LI> <A href="x3.htm">
instructions on installing Pd and getting it to run </A>
<LI> <A href="x4.htm"> how to write C extensions to Pd </A>
<LI> <A href="x5.htm"> release notes and known bugs </A>
</OL>
<P>
For a list of all the objects you can use in Pd, see the text file,
"0.INTRO.txt" in the directory, "../5.reference". To get help on any
Pd object you can right click on it; or you can browse the help patches
by choosing "Browser..." in the Pd help menu and looking in
5.reference.
<P>
The example patches are also available from the "Browser..." item
in Pd's "help" menu. They appear in subdirectories named
"2.control.examples", "3.audio.examples" and "4.fft.examples." Some additional
patches in "7.stuff" might also be helpful.
<P>
To get started writing your own C extensions, refer to chapter 4 of this manual.
<H3> <A name=s2> 1.2. other resources </A> </H3>
<P> There is a very extensive Pd community web site,
<a href="http://www.pure-data.info/"> pure-data.info</a>, which aims to be the
central resource for Pd, from documentation and
downloads; to forums, member pages, and a patch exchange.
<P> More documentation is avalable on the Pd FLOSS site:
<A href=http://en.flossmanuals.net/PureData/>
en.flossmanuals.net/PureData/</A> (English) and
<A href=http://fr.flossmanuals.net/PureData/>
fr.flossmanuals.net/PureData/</A> (French).
<P>
Most of the interesting news related to Pd shows up on the Pd mailing list,
maintained by Iohannes Zmoelnig. To subscribe or browse the archives
visit:
<A href="http://iem.at/mailinglists/pd-list/">
http://iem.at/mailinglists/pd-list/</A>.
This is the
best source of recent information regarding installation problems and bugs. It
is perfectly reasonable to post "newbie" questions on this list; alternatively
you can contact msp@ucsd.edu for help.
<P> the Pd Extended package, maintained by Hans-Christophe Steiner, can be
downloaded from the <A href=http://sourceforge.net/projects/pure-data/> Pd's
sourceforge site </A>. All this and much more is described in detail on <A
href="http://puredata.info/"> http://puredata.info/</A>.
<P> Many extensions to Pd are announced on the mailing list. In particular,
for people interested in graphics, there is a 3D graphics rendering package,
named GEM, based on OpenGL, written by Mark Danks, adapted to Linux by
Guenter Geiger, and now maintained by Iohannes Zmoelnig. You can get
it from: <A href="http://iem.at/GEM">http://iem.kug.ac.at/GEM</A>, or by
installing Pd Extended.
<P> Here are some
<a href="http://crca.ucsd.edu/~msp/external-links.htm">
more external links</A>.
</BODY>
</HTML>

File diff suppressed because it is too large Load diff

View file

@ -1,677 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML>
<HEAD>
<TITLE>Pd Documentation 3</TITLE>
<meta http-equiv="Content-Type" content="text/html">
<link rel="stylesheet" type="text/css" href="pdmanual.css" media="screen">
</HEAD>
<BODY>
<H2>Pd Documentation chapter 3: Getting Pd to run</H2>
<P>
<A href="index.htm#s3"> back to table of contents </A>
<BR><BR>
</P>
<P> The following are basic instructions on how to get Pd installed and running
on your machine. More details are maintined online on the
<A href=http://www.pure-data.info/>pure-data.info</A> site.
<P>Pd runs under Microsoft Windows, Linux, and MacOS (10.2 or later). How to
get Pd up and running depends on your operating system, but the overall strategy
is the same. You must first get and install it, and then untangle whatever
problems arise in handling audio and MIDI input and output, and finally get Pd
to meet its real-time obligations reliably.
<P> Installation instructions are platform-specfic; the following three
sections
will describe what to do for various operating systems you might have.
In case of trouble also consult the Pd mailing list archive on
<A href="http://iem.at/mailinglists/pd-list/">
http://iem.at/mailinglists/pd-list/</A>
, which often has late-breaking news about configuration problems and solutions.
The rest of this section describes how to get audio and MIDI to work.
<H3> <A name=s1.0> 3.1. Audio and MIDI </A> </H3>
<P>
To test audio and MIDI, start Pd and select "test Audio and MIDI" from the
"Media" menu. You should see a window like this:
<CENTER><P>
<IMG src="fig11.1.png" ALT="test tone patch">
</P></CENTER>
<P> First, try to get Pd to play a sine wave over your speakers. The "TEST
TONE" control at top left turns this on and off. Normally, all the output
channels are turned on so that when you turn the tone on (to a soft -40 dB or a
louder -20 dB) you should get output on the first eight of your output channels.
(If you have fewer than 8 output channnels open, the extra
channels aren't played; and if you have more, this particular patch won't
use them.)
<P> If there's anything wrong, the most likely outcome is that you will hear
nothing at all. This could be for any of at least three reasons: Pd might
have failed to open the audio device; the audio card's output volume might
be set to zero; or your audio system might not be set to amplify the computer
output.
<P> The number boxes labeled "AUDIO INPUT" show the levels of incoming
audio, in dB, with 100 being maximum. (Incoming signals may clip at
RMS levels below 100; for instance, a sinusoid clips at about 97 dB.)
Any DC present in the input (such as you get with cheap audio hardware)
will show up as level unless you turn on the "input hipass" toggle
at right; then the DC component is filtered out before metering.
<P> To test the quality of audio input and output, turn on "monitor"
(also at right) which causes the inputs to be played to the outputs at
unit gain. You should hear a faithful, non-distored copy of whatever is
sent through the patch.
<P> It is easy to get two copies of Pd running by accident; on most machines
only one at a time may be inputting and outputting sound. (Some copy of Pd
might have audio or MIDI devices open and prevent the copy you're trying to use
from getting access to them.) Having extra
copies of Pd around will also eat CPU cycles uselessly.
<P>
You may be interested in getting only audio output or audio input, or
you may need both to run simultaneously. By default, Pd will try to run
both, but if you don't need either input or output, you may find that Pd
runs more reliably, or at least more efficiently, with the unused direction
turned off. This may be specified in Pd's command line flags or using the
"audio settings" dialog panel.
<P>
Depending on your application you will have a more or less stringent latency
requirement. Ideally, when any input (audio, MIDI, keyboard, network) is
available, the outputs (in particular the audio output) should react instantly.
In real life, it is necessary to buffer the audio inputs and outputs, trying
always to keep some number of milliseconds ahead of real time to prepare for the
inevitable occasions where the CPU runs off to service some different task
from Pd. How small this latency can be chosen depends on your OS and your
audio driver.
<P> TIP: If Pd starts up but you get distortion or glitches in the audio
output, this could be either because the "audio I/O buffer" isn't big enough,
or else because the CPU load of the patch you're running is too great for the
machine you have, or else because the ADC and DAC are out of sync or even at
different sample rates. To test for the first possibility, try increasing the
audio latency in the command line or the "audio settings" dialog (but see also
under your OS below.) For the second, start up your favorite performance
monitor program; and for the third, try starting Pd up with ADCs disabled.
<P> In addition to the "test audio and MIDI" patch, the "Media" menu
contains items for controlling audio and MIDI settings. The first two
items, "Audio on" and "Audio off", open or close the audio devices and
start or stop Pd's audio computation.
<P> If there is a choice of
audio API to make, the Media menu will display them. (On Linux, they are
OSS, ALSA, and Portaudio; on Windows, you get MMIO and ASIO). On Mac the only
one is portaudio. More information
about the APIs appears in the sections below.
<P> Selecting an API (even if it's the one already in use), or, alternatively,
selecting "Audio Settings..." from Preferences, opens
a dialog panel like this:
<CENTER><P>
<IMG src="fig11.2.png" ALT="audio settings dialog">
</P></CENTER>
The exact choices you get depend on the operating system and API. The sample
rate controls both audio output and input. The audio throughput delay is
the nominal amount of time, in milliseconds, that a sound coming into the
audio input will be delayed if it is copied through Pd straight to the
output. Naturally you would like this to be as small as possible, but,
depending on OS, API, and even the specific choice of audio hardware, there
will be a limit to how small you can make this. You can typically get
10 msec on linux (and lower still if you use special tricks), 30 msec on Mac
OSX, and 60 msec on Windows (but note that there might be ways that a
patient Windows user can reduce this).
<P> Next you get a choice of input and output device. If you want to open
more than one, hit "use multiple devices" and you'll be allowed up to 4
in and 4 out. Each audio device is 2 channels by default, but you may
specify more if your hardware supports it.
Other parameters may be tweaked using the command line; see under
<A href=#s4> preferences and startup options </A>.
<H6> MIDI </H6>
<A> The "channel message" midi objects in Pd
such as notein or pgmout will take channels 1-16 to mean the first open MIDI
port, 17-32 the second one, and so on. The midiin, sysexin, midiout objects
give you a separate inlet to specify which of the open MIDI port numbers
you want.
<P> System exclusive MIDI message input and output are theoretically supported
but does not work uniformly across all operating systems..
<H3> <A name=s1.1> 3.2. Installing Pd in Microsoft Windows </A> </H3>
<P> Pd should work under any version of Windows since 95. You can download as
a self-extracting archive (a ".exe" file). Run this and select a destination
directory when prompted, such as "\pd" or "Program Files\pd".
<P> If for example you put Pd in "C:Program Files\pd", the executable program
will be "C:Program Files\pd\bin\pd". You can simply adjust your path to
include C:\pd\bin and then invoke "pd" in a command prompt window. You can also
make a shortcut to the executable program (left-click on it and drag to the
desktop, for example.)
<P> Pd requires "TCP/IP networking" to be turned on. This doesn't mean you
have to be on a real network, but simply that Pd actually consists of two
programs that make a "network link" (locally) to intercommunicate.
<H4> Audio in Microsoft Windows </H4>
<P>
Pd offers both the ASIO and MMIO APIs in Windows. Which of these works better
will depend on your audio hardware.
<P>
MIDI timing is very poor if you are using simultaneous audio input and output;
if you suppress either audio input or output things will improve somewhat under
NT; you can apparently get the jitter down to ~40 msec. On W95 performance is
simply terrible. W98, with either audio input or output suppressed, offers
fairly good MIDI timing (~5 msec jitter). The "first edition" used to crash
occasionally; this might be fixed in the "second edition".
<H4> ASIO </H4>
<P> As of version 0.35 Pd supports ASIO. Invoke Pd as "pd -asio" and, if
needed, specify "-sounddev" (etc.) flags to specify which device (see
"the Pd command line" below.) You can also specify a "-blocksize" different
from the default (256 samples) and "-audiobuf" in milliseconds. Pd will
round this down to a power of two buffers, each of "-blocksize" in sample
frames.
<P> TIP: Often your machine will allow you to use ASIO with built-in PC
audio hardware. Sometimes it is necessary to set a ridiculously high block size
for this to work (on my machine I have to set it to 4096 -- about 1/10 of a
second!)
<P> Using MMIO I've been able to get very low latencies (6 msec) using M-audio
PCI converters (Delta 44).
<H3> <A name=s1.2> 3.3. Installing Pd in Linux </A> </H3>
<P> What to do depends on which flavor of Linux you are running (e.g., Debian
or Red Hat). The instructions here should work for Pd 0.33 and up regardless of
your situation. (If not, you can read the Pd mailing list archives for
recent problems; if you have found a new problem you're welcome to post it
to the list.)
<P> Pd is available via the package systems for some linux distributions,
but not always in the most recent version possible. It's relatively easy to
compile your own copy of Pd and that is the approach described here.
<H4> Getting Pd as a .tar.gz </H4>
<P> Before you start, you might want to check that you have the resources Pd
needs. The main things you need are the C compiler, X windows (including
the X development package for Pd to link against), TK, and the ALSA "devel"
headers. It should be
enough to load "tcl-devel", "tk-devel", and "alsa-devel" packages using
yum or apt-get.
<P> There are two parallel compilation setups now available. The old one is
described here; as of 0.43 I still use that but I plan to discontinue this for
0.44 and start using only the new one (by Hans). The following description
applies to the old one. Look in the INSTALL.txt file to see how to use the
new one.
<P>
Download Pd, perhaps from
<a href="http://www.crca.ucsd.edu/~msp/software.html">
http://www.crca.ucsd.edu/~msp/software.html</A> ,
to file such as "pd-linux-033.tar.gz". Open a "shell"
window, cd to
the directory containing the file, and type the command,
<PRE>
tar xzf pd-linux-033.tar.gz
</PRE>
<P>which creates a directory named "pd". I do this from my home directory.
Next, compile it. "CD" to pd and read the INSTALL.txt, or else just cd
to "pd/src" and type
<P>
<BR> ./configure
<BR> make
</P>
<P> You can pass flags to "configure" to customize your compilation:
<PRE>
To enable debugging (and losing code optimization) add "--enable-debug".
To use Portaudio, add "--enable-portaudio".
To put Pd in /usr/bin instead of /usr/local/bin, add "--prefix=/bin".
</PRE>
Alsa and Jack support should auto-configure, but "--enable-alsa" od
"--enable-jack" will force their inclusion.
<P> After "make", just type "~/pd/bin/pd" to run pd.
<P> Alternatively, as superuser, you can run "make install" after "make depend"
and then anyone on your system can just type "pd" to run it.
<H4> Testing audio and MIDI. </H4>
<P>
Next try audio. We want to know whether audio output works, whether audio
input works, and whether they work simultaneously. First run "aumix" (or
any newer audio mixer app) to
check audio input and output gains and learn which input (mic; line;
etc.) is "recording".
Then test audio output by running
<PRE>
pd -noadc
</PRE>
<P>and selecting "test audio and MIDI" from the "Media" menu. You should see
a patch. Turn on the test tone and listen. Do the usual where's-the-signal
business.
<P>
Then quit Pd and test audio input via
<PRE>
pd -nodac
</PRE>
<P>Re-open the test patch and hit "meter"; look at the levels. 100 dB is a
hard clip; arrange gains so that the input signal tops out around 80 or 90,
but no higher.
<P> Now see if your audio driver can do full duplex by typing "pd" with no
flags. If you see error messages involving /dev/dsp or /dev/dsp2, you're
probably not able to run audio in and out at the same time. If on the other
hand there's no complaint, and if the audio test patch does what you want, you
might wish to experiment with the "-audiobuffer" flag to see what values of
audio latency your audio system can handle.
<H3> Audio hardware in Linux </H3>
<P>
Installing and testing audio and MIDI drivers in Linux can take
days or weeks. There apears to be no single place where you can get detailed
information on Linux audio.
<P>
There are two widely-used driver sets, called "OSS" and "ALSA". ALSA is
included in the standard Linux kernel since 2.4 or so. However, for some
audio cards you can find newer versions than are included in the kernel
releases. You can get ALSA from
<a href="http://www.alsa-project.org/">
http://www.alsa-project.org/</A> .
<P> ALSA is able to emulate OSS, so that you can usually run Pd using the
"OSS" driver settings even if it's actually ALSA that's running.
<P> By default, Pd uses ALSA. You can ask Pd to use ALSA's OSS emulation by
adding the "-oss" flag to the command line or fooling with the "media" menu
items.
<P> You can add ALSA devices by name on the Pd command line:
<PRE>
pd -alsaadd loupgarou
</PRE>
instructs Pd to offer the 'loupgarou' audio device in the Audio Settings panel.
<H4> Experiences with particular soudcards </H4>
<P>
Here are some of my own experiences with sound cards so far. See
also the Pd mailing list archives.
<H6> RME 9652 (Hammerfall) </H6>
<P> This is the best PCI sound card out there; it costs around $500 and has 3 ADAT
I/O ports and one SPDIF. There is a "baby hammerfall" also, which I think is
the "9632." DO NOT CONFUSE THE 9652/9632 WITH OTHER RME BOARDS WHICH MIGHT
NOT WORK WITH PD.
<P> The easiest way to use
Hammerfall boards in Pd is via ALSA and jack; but you can use ALSA alone:
<PRE>
pd -alsa -channels 26
</PRE>
works for me.
<H6> MIDIMAN </H6>
<P>Midiman sells PCI devices (delta 44, 66, 1010, and 1010LT)
with between 4 and 10 channels in and out, for
which there are ALSA drivers. These are also very good, and they are a
bit cheaper than Hammerfalls. The driver name is "ice1712".
<H6> USB sound devices</H6>
<P> Ed Kelly reports success with the Lexicon series of USB 1.0 devices (e.g.,
the Omega Studio; apparently 4 channels in and 4 out). Also known to work well
is the Edirol box (2 channels in and out).
<P> As of Sept. 2011, the only multi-channel USB device I've been able to use
with Pd is the Native Instruments Traktor Audio series. (I have the Audio
Traktor 10 which does indeed get 10 discrete channels in and out; the box is
designed for turntables and the I/O is all RCA. I haven't yet tested whether
the inputs are RIAA equalized or flat. To run this device you'll need to
compile and install an ALSA snapshot from at least September 2011. This won't
start showing up in Linux distros for at least some months.
<P> THe Alsa devel list is reporting progress on the M-audio Ultra series,
which goes up to 6 in and out (analog) with 2 more as SP/DIF. Things work
OK for input or output separately but "full duplex" (in and out simultaneously)
has sync problems.
<H3> <A name="s1.3"> 3.4. Installing Pd in Macintosh OSX </A> </H3>
<P>Pd version 0.35 and up support Macintosh OSX. You need the OSX Jaguar
distribution (10.2) or later. Recent versions of Pd require 10.4 or up.
<P> To install Pd you can always download the sources and compile them
yourself, or (easier) just download the Mac binary from the download page:
<A href="http://crca.ucsd.edu/~msp/software.html">
http://crca.ucsd.edu/~msp/software.html</A>.
This is in the form of a compressed Tar archive; just click on it and the Max
will extract the Pd application. Open this and you should be running.
<P> You might get various warnings about Pd trying to open an internet port.
This is normal although some system administrators will prevent you from
doing this (in which case you can't run Pd on that machine).
<P> The package by Hans-Christoph Steiner, on
<A href="http://at.or.at/hans/pd/installers.html">
http://at.or.at/hans/pd/installers.html</A>,
has many updates and extensions
which are not included in the original Pd distribution. Download this and
follow the (simple) instructions found there.
</P>
<H4> To install on OSX from source: </H4>
<P>
Whether you've downloaded the source or the "package" you can
always compile Pd for yourself, whether to make your own improvements, or
possibly so that you can get the newest version before it shows up compiled for
Mac OS X.
<P> To be able to compile Pd, you must have Tcl/Tk installed in the standard
places. I think this is true for all reasoably recent releases of OSX.
<P> Then, just as for linux, just unload pd-whatever.tar.gz into a directory
such as ~/pd-0.36-0, cd to pd-0.36-0/src, type "./configure"
and "make". Then type ~/pd-0.36-0/bin/pd to a shell and enjoy!
<P> If you wish you can put a line such as,
<pre>
alias pd ~/pd/bin/pd
</pre>
<P>in the file, ~/.tcshrc, so that you can later just type "pd" to a shell.
(The
shell only reads the ~/.tcshrc file on startup, so this won't take effect in
any existing shells unless you specially type
<pre>
source ~/.tcshrc
</pre>
<P>to them.)
<P> Follow the general directions above for testing audio and/or MIDI
as needed.
<P> To get MIDI working, you have to do the Mac OSX magic to get a USB
MIDI interface installed. I've seen this done with Midisport devices and
I think you just download the OSX driver and follow directions.
<H3> <A name=s4> 3.6. Preferences and startup options </A> </H3>
<P> Pd's behavior may be customized to instruct it where to find files, which
audio devices to open, what font size to use, and so on. Most of
these may also be changed using the various dialogs you can open from Pd's
menus. Others take effect only when Pd starts up; some of these appear
on the ``startup" dialog and some of them, too cranky to put in a GUI, must
be typed as <I> command line arguments </I>.
<P> In addition to the Audio and MIDI settings (see
<A href="#s1.0"> Audio and MIDI </A>), you can customize font size (from the
``edit" menu), directories to search for files (see
<A href="#s5"> How Pd searches for files </A>), and additional startup
parameters described below.
<P> All of these settings may be saved automatically between Pd sessions.
It is also possible to specify settings directly via the <I> command
line </I>. (A third mechanism, using configuration files, is deprecated and
isn't described here.) The Pd command line is described in the next
section. Command line settings, if given, each override the corresponding
setting that was saved from Pd.
<P> The startup settings (i.e., those that take effect only when Pd is started)
are controlled using the ``startup..." dialog from the File menu. The
dialog appears as follows:
<CENTER><P>
<IMG src="fig11.3.png" ALT="startup dialog">
</P></CENTER>
The slots at top each specify a binary ``library" for Pd to load on startup.
These may be for Gem, pdp, zexy, iemlib, cyclone, and so on. Typically, a
single binary object (an ``extern") is left for Pd to load automatically;
startup library loading is appropriate for collections of many objects
specified by a single binary library.
<P> The ``defeat real-time scheduling" contol, if enabled, makes Pd run without
its usual effort to become a real-time process (whatever this means in the
operating system you are using.) In Unix, Pd must usually be setuid to allow
real-time scheduling at all.
<P> The ``startup flags" allow you to add to Pd's command line on startup. This
is specified as described below, except that the initial word, ``pd", is
understood. For example, putting ``-rt" in this field sets real-time
scheduling; ``-sleepgrain 1" sets the sleep grain to 1 (see under MIDI below),
and typing "-rt -sleepgrain 1" does both.
<P> You may save the current settings for future Pd sessions with the
``save all settings" button; this saves not only the path but all other
settings as well.
<H6> Command line arguments </A> </H3>
<P>Pd may be run as a "command line" program from your "terminal emulator,"
"shell," or "MSDOS prompt." In Windows, if Pd is started using a "shortcut"
it is also run from a command line which you can edit using the ``properties"
dialog for the shortcut. In any operating system, Pd can be called from a
script (called a <I> batch file </I> on Windows or a <I> shell script </I>
on OSX or unix). The command line is just a line of text, which should be
of the form:
<PRE>
pd [options] [patches to open]
</PRE>
<P>although you may have to specify a path (such as "~/pd/bin/pd" or
"C:\program files\pd\bin\pd") so your command interpreter can find
Pd. Possible options include:
<PRE>
audio configuration flags:
-r &lt;n&gt; -- specify sample rate
-audioindev ... -- sound in device list; e.g., "2,1" for second and first
-audiooutdev ... -- sound out device list, same as above
-audiodev ... -- specify both -audioindev and -audiooutdev together
-inchannels ... -- number of audio in channels (by device, like "2" or "16,8")
-outchannels ... -- number of audio out channels (by device)
-channels ... -- specify both input and output channels
-audiobuf &lt;n&gt; -- specify size of audio I/O buffer in msec
-blocksize &lt;n&gt; -- specify audio I/O block size in sample frames
-sleepgrain &lt;n&gt; -- specify number of milliseconds to sleep when idle
-nodac -- suppress audio output
-noadc -- suppress audio input
-noaudio -- suppress audio input and output (-nosound is synonym)
-listdev -- list audio and MIDI devices
(linux specific audio:)
-oss -- use ALSA audio drivers
-alsa -- use ALSA audio drivers
-pa -- use portaudio (experimental version 19)
-alsadev &lt;n&gt; -- obsolete: use -audiodev
-32bit -- (probably obsolete) -- use 32 bit OSS extension
-alsaadd &lt;dev&gt; -- add a device to the ALSA device list
(Windows specific audio:)
-mmio -- use MMIO drivers and API
-asio -- use ASIO drivers and API
MIDI configuration flags:
-midiindev ... -- midi in device list; e.g., "1,3" for first and third
-midioutdev ... -- midi out device list, same format
-mididev ... -- specify -midioutdev and -midiindev together
-nomidiin -- suppress MIDI input
-nomidiout -- suppress MIDI output
-nomidi -- suppress MIDI input and output
-alsamidi -- use ALSA midi API
general flags:
-path &lt;path&gt; -- add to file search path
-nostdpath -- don't search standard ("extra") directory
-stdpath -- search standard directory (true by default)
-helppath &lt;path&gt; -- add to help search path
-open &lt;file&gt; -- open file(s) on startup
-lib &lt;file&gt; -- load object library(s)
-font &lt;n&gt; -- specify default font size in points
-verbose -- extra printout on startup and when searching for files
-version -- don't run Pd; just print out which version it is
-d &lt;n&gt; -- specify debug level
-noloadbang -- suppress all loadbangs
-stderr -- send printout to standard error instead of GUI
-nogui -- suppress starting the GUI
-guiport &lt;n&gt; -- connect to pre-existing GUI over port 'n'
-guicmd "cmd..." -- substitute another GUI program (e.g., rsh)
-send "msg..." -- send a message at startup (after patches are loaded)
-rt or -realtime -- use real-time priority (needs root privilege)
-nrt -- don't use real-time priority
-nosleep -- never relinquish CPU (only for multiprocessors!)
</PRE>
<P>Here are some details on some of the audio, MIDI, and scheduler options (but
see also the next section on file management.)
<H4> multiple devices. </H4>
<P> You can specify multiple MIDI input and output devices. For example,
"pd -midiindev 3 -midioutdev 4,2" asks for the third MIDI input device and the
fourth and second MIDI output device.
<P> Audio device selection is similar, except that you can also specify
channels by device: "-audioindev 1,3 -inchannels 2,8" will try to open device 1
(2 channels) and device 3 (8 channels.)
<H4> sample rate. </H4>
<P>The sample rate controls Pd's logical sample rate which need not be that of
the audio input and output devices. If Pd's sample rate is wrong, time will
flow at the wrong rate and synthetic sounds will be transposed. If the output
and input devices are running at different rates, Pd will constantly drop frames
to re-sync them, which will sound bad. You can disable input or output if this
is a problem.
<H4> audio buffer size and block size </H4>
<P>You can specify an audio buffer size in milliseconds, typically between 10 and
300, depending on how responsive your OS and drivers are. If this is set too
low there will be audio I/O errors ("data late"). The higher the value is,
on the other hand, the more throughput delay you will hear from the audio
and/or control inputs (MIDI, GUI) and the audio coming out.
<P> You can also specify the audio block size in sample frames. This is 64 by
default (except for MMIO for which it's 256), and may be 64, 128, or 256.
<H4> MIDI and sleepgrain</H4>
<P> In Linux, if you
ask for "pd -midioutdev 1" for instance, you get /dev/midi0 or /dev/midi00
(or even /dev/midi). "-midioutdev 45" would be /dev/midi44. In NT, device
number 0 is the "MIDI mapper", which is the default MIDI device you selected
from the control panel; counting from one, the device numbers are card
numbers as listed by "pd -listdev."
<P> The "sleepgrain" controls how long (in milliseconds) Pd sleeps between
periods of computation. This is normally the audio buffer divided by 4, but
no less than 0.1 and no more than 5. On most OSes, ingoing and outgoing MIDI
is quantized to this value, so if you care about MIDI timing, reduce this to 1
or less.
<H3> <A name="s5"> 3.7. How Pd searches for files </A> </H3>
<P>Pd has a search path feature; you specify the path on the command line
using the "-path" option. Paths may contain any number of files. If you
specify several files in a single "-path" option they're separated by colons
in unix or semicolons in NT.
<P> You can see and edit the path while Pd is running using the "path..."
item in the "File" menu:
<CENTER><P>
<IMG src="fig11.4.png" ALT="startup dialog">
</P></CENTER>
<P> The path must be correctly set before you load
a patch or it may fail to find abstractions, etc., that are needed to
construct the patch. When Pd searches for an abstraction or an
"extern" it uses the path to try to find the necessary file. The "read"
messages to qlists and arrays (aka tables) do this too.
<P> If ``use standard extensions" is enabled, the usual ``extras" directory
is also searched. This contains standard external objects like ``expr" and
``fiddle", and perhaps much more depending on the distribution of Pd
you're using.
<P> You may save the current settings for future Pd sessions with the
``save all settings" button; this saves not only the path but all other
settings as well.
<P> Path entries may be relative to the patch directory; for instance,
if your path has an item, "../sound", and your patch is in "my stuff/all mine",
then Pd will look in "my stuff/sound". Spaces should be OK in the path to
the patch, but not in the path entry (../sound) itself. This is useful if
you have a patch and supporting files (even a supporting snapshot of pd)
that you want to distribute or carry around together.
<P> Regardless of path, Pd should look first in the directory containing
the patch before searching down the path. Pd does not automatically look
in the <I> current directory </I> however; to enable that, include ``." in
the path. The ``extra" directory, if enabled, is searched last.
<P> Filenames in Pd are always separated by (unix-style) forward slashes, even
if you're on Windows (which uses backslashes). This is so that patches can be
ported more easily between operating systems. On the other hand, if you
specify a filename on the command line (as in "pd -path c:\pdlib") the file
separator should agree with the operating system. <BR>
<P> If a filename specified in a patch has any "/" characters in it, the "path"
is not used; thus, "../sounds/sample1.wav" causes Pd only to look relative to
the directory containing the patch. You may also invoke externs that way.
<P> As of version 0.35, there may be spaces in the path to Pd itself; also,
the "openpanel" and "savepanel" objects can handle spaces. Spaces in the
path should work as of version 0.38.
</BODY>
</HTML>

View file

@ -1,61 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML>
<HEAD>
<TITLE>Pd Documentation 4</TITLE>
<meta http-equiv="Content-Type" content="text/html">
<link rel="stylesheet" type="text/css" href="pdmanual.css" media="screen">
</HEAD>
<BODY>
<H2>Pd Documentation chapter 4: writing Pd objects in C</H2>
<P>
<A href="index.htm#s4"> back to table of contents </A>
<BR><BR>
</P>
<P>You can write your own objects that you and others can use in their Pd
applications. You can write them in C or (if you're smart and brave) in C++ or
FORTRAN.
<P> HOW EXTERNS ARE LOADED
<P> Whenever you type the name of an object
(into an "object" text box) that Pd doesn't yet know about, Pd looks for a
relocatable object file, named, for instance, "profile.pd_irix5". Pd looks
first in the directory containing the patch, then in directories in its
"path." Pd will then add whatever object is defined there to its "class list,"
which is the set of all Pd classes you can use. If all this works, Pd then
attempts again to create the object you asked for, this time perhaps
successfully. There is no difference between an object defined this way and an
object built into Pd.
<P> Once you load a new object into Pd, it's there for the duration of your Pd
session. If you load another Pd document which supplies a different version of
some Pd object, the object won't be updated. IF you're working on a new object
and decide to change it, you have to exit and re-enter Pd to get the change to
take.
<P> In the "externs" subdirectory of the documentation you
can find simple examples of "externs" with their source code and test patches;
there are many other on the web (see <a href="x1.htm#s2">section 1.2 </A>).
<P> Iohannes Zmoelnig has written an excellent guide to writing externs at
<A href="http://iem.kug.ac.at/pd/externals-HOWTO/">
http://iem.kug.ac.at/pd/externals-HOWTO/</A> .
<P> A paper by Theo Stojanov on the subject is at:
<A href="http://www.music.mcgill.ca/~theo/html/audio/pd_externs.pdf">
http://www.music.mcgill.ca/~theo/html/audio/pd_externs.pdf </A> .
<P> NT HINT: In NT, Pd is compiled using Visual C 6.0. If you have VC 5.x
your externs won't compile against Pd; you'll get an error about "disk full
or bad DLL." Simply recompile Pd under 5.x and the problem goes away. Externs
compiled under 5.x and 6.x are binary compatible; it's just the compilation
that's sensitive.
</BODY>
</HTML>

File diff suppressed because it is too large Load diff

View file

@ -1,19 +0,0 @@
This series of patches serves as a tutorial for Pd's "control" structure, as
opposed to its audio functions (covered in the next series.) These tutorials
are inspired by Chris Dobrian's Max tutorial patches.
It's probably best to look at the first section here before going on to the
audio portion, but afterward there's no reason not to browse back and forth
between the two, and even the third series on "fft" based techniques.
The relationship between "control" and "audio" is described in Pd's HTML
documentation, which is more like a reference manual than an introduction.
Also, you probably will need to look there to get Pd up and running stably so
that you can enjoy the patches here.
The patches are roughly divided as shown:
1. objects and connections
2. subpatches, tables, and organization
3. specific techniques.

View file

@ -1,16 +0,0 @@
#N canvas 9 21 600 496 12;
#X msg 204 32 hello world;
#X obj 204 105 print;
#X floatatom 321 32 0 0 0;
#X text 215 48 message;
#X text 319 49 atom;
#X text 201 123 object;
#X text 53 150 There are four types of text objects in Pd: message \, atom \, object \, and comment.;
#X text 54 187 Messages respond to mouse clicks by sending their contents to one or more destinations. The usual destination is the "outlet" at the lower left corner of the box.;
#X text 55 239 Click the message box and watch the terminal window Pd was started in. You should see the "hello world" message appear.;
#X text 55 278 Atoms respond to "Dragging" up and down with the mouse \, by changing their contents and sending the result out their outlets. You can also type at an atom after clicking on it \; hit "enter" to output the number or click anywhere else to cancel.;
#X text 52 359 Objects \, like "print" above \, may have all sorts of functions depending on what's typed into them. The "print" object simply prints out every message it receives.;
#X text 53 415 To get help on an object \, right-click it. You should see a "help window" for the object.;
#X text 354 470 updated for release 0.33;
#X connect 0 0 1 0;
#X connect 2 0 1 0;

View file

@ -1,17 +0,0 @@
#N canvas 1 0 581 630 12;
#X msg 195 36 hello world;
#X obj 195 72 print;
#X floatatom 304 36 0 0 0;
#X text 194 15 message;
#X text 304 14 atom;
#X text 255 73 object;
#X text 34 102 When you first open a Pd document like this one \, your cursor will be an arrow. Select "edit mode" in the Edit menu and the cursor will change to the image of a hand. The patch is now in edit mode. You can move any object by dragging it.;
#X text 33 185 Select "Edit mode" again in the Edit menu and you're back to the arrow cursor which acts on objects without moving them.;
#X text 32 373 You can create new objects by duplicating existing ones using the "duplicate" menu item. You can also "cut" and "paste" them. If you duplicate several connected objects the connections will be replicated too.;
#X text 33 237 In Edit mode \, if you click on a message \, object \, or comment \, you can then retype the text. For objects this will create a new object and delete the old one. Pd will try to reconnect the newly created object in the same way as the old one.;
#X text 34 442 Edit mode also lets you make and break connections between objects. Put the "hand" cursor over a line connecting two objects: it turns into an X. Clicking will delete the connection. Hold the cursor over an outlet and it becomes a circle (a patch point). Drag to any box and release \; you will be connected to the nearest inlet.;
#X text 32 320 When you're done changing the contents of the box \, click outside the box to deselect it. This tells Pd to incorporate the new text.;
#X text 328 604 updated for Pd version 0.33;
#X text 35 544 The "put" menu creates new text items of any of the four types. You can also put a "symbol" box \, analogous to a number box but for showing and entering text strings.;
#X connect 0 0 1 0;
#X connect 2 0 1 0;

View file

@ -1,58 +0,0 @@
#N canvas 185 28 660 552 12;
#X floatatom 76 400 0 0 0 0 - - -;
#X floatatom 189 401 0 0 0 0 - - -;
#X floatatom 76 307 0 0 0 0 - - -;
#X floatatom 553 161 0 0 0 0 - - -;
#X floatatom 599 162 0 0 0 0 - - -;
#X obj 553 135 +;
#X floatatom 553 105 0 0 0 0 - - -;
#X obj 599 136 +;
#X floatatom 26 109 0 0 0 0 - - -;
#X floatatom 26 17 0 0 0 0 - - -;
#X floatatom 48 41 0 0 0 0 - - -;
#X obj 26 85 +;
#X text 3 64 hot;
#X text 53 66 cold;
#X text 232 105 Here's the downside: drag this--->;
#X text 551 180 good;
#X text 600 181 bad;
#X obj 76 376 *;
#X obj 189 377 -;
#X text 15 400 square;
#X text 229 402 first difference;
#X obj 76 330 trigger float float;
#X text 412 526 updated for Pd version 0.33;
#X text 19 433 Trigger takes any number of "bang" and "float" arguments
(among others) and copies its input to its outlets \, in the requested
forms \, in right-to-left order. Hook it to two inputs without crossing
the wires and you get the expected result. Cross the wires and you
get a memory effect.;
#X text 9 136 In Pd you must sometimes think about what order an object
is going to get its messages in. If an outlet is connected to more
than one inlet it's undefined which inlet will get the cookie first.
I've rigged this example so that the left-hand side box gets its inputs
in the good \, right-to-left order \, so that the hot inlet gets hit
when all the data are good. The "bad adder" happens to receive its
inputs in the wrong order and is perpetually doing its addition before
all the data are in. There's an object that exists solely to allow
you to control message order explicitly:;
#X text 114 16 In Pd \, most objects carry out their functions when
they get messages in their leftmost inlets \, and their other inlets
are for storing values that can modify the next action. Here \, the
"+" object does its thing only when the left-hand input changes.;
#X connect 2 0 21 0;
#X connect 5 0 3 0;
#X connect 6 0 7 0;
#X connect 6 0 7 1;
#X connect 6 0 5 1;
#X connect 6 0 5 0;
#X connect 7 0 4 0;
#X connect 9 0 11 0;
#X connect 10 0 11 1;
#X connect 11 0 8 0;
#X connect 17 0 0 0;
#X connect 18 0 1 0;
#X connect 21 0 17 0;
#X connect 21 0 18 1;
#X connect 21 1 17 1;
#X connect 21 1 18 0;

View file

@ -1,35 +0,0 @@
#N canvas 0 0 591 442 12;
#X floatatom 225 110 0 0 0;
#X floatatom 184 109 0 0 0;
#X msg 184 56 5 6;
#X floatatom 132 108 0 0 0;
#X floatatom 64 105 0 0 0;
#X text 30 21 Most Pd messages are just numbers or short lists of numbers:;
#X msg 64 55 5;
#X obj 64 80 + 9;
#X obj 132 83 +;
#X obj 184 84 unpack;
#X msg 288 55 5;
#X obj 288 107 print;
#X obj 288 81 pack 34 78;
#X msg 132 55 5 6;
#X floatatom 195 328 0 0 0;
#X obj 195 303 +;
#X msg 195 254 1.2 3.4;
#X msg 205 277 5 6;
#X text 36 206 Unlike Max \, in Pd all numbers are floating point. Numbers whose values happen to be integers are displayed without decimal points.;
#X text 31 363 For more on messages \, get help on any message box by right-clicking.;
#X text 329 409 updated for Pd release 0.33;
#X text 34 149 If you send a list to an object with more than one inlet \, the items in the list are spread out over the inlets \, as seen in the 5+6 example above.;
#X connect 2 0 9 0;
#X connect 6 0 7 0;
#X connect 7 0 4 0;
#X connect 8 0 3 0;
#X connect 9 0 1 0;
#X connect 9 1 0 0;
#X connect 10 0 12 0;
#X connect 12 0 11 0;
#X connect 13 0 8 0;
#X connect 15 0 14 0;
#X connect 16 0 15 0;
#X connect 17 0 15 0;

View file

@ -1,45 +0,0 @@
#N canvas 0 0 685 496 12;
#X floatatom 107 424 0 0 0;
#X msg 53 344 bang;
#X obj 107 399 + 1;
#X obj 376 262 + 1;
#X floatatom 152 197 0 0 0;
#X floatatom 108 245 0 0 0;
#X msg 108 196 bang;
#X floatatom 169 107 0 0 0;
#X msg 112 58 bang;
#X obj 169 82 + 1;
#X text 31 21 Here's a simple counter. Click repeatedly on the "bang
message to see it:;
#X text 422 263 to its cold inlet.;
#X text 25 284 The incremented value is stored for the next "bang"
to spit out.;
#X text 28 322 Here's a timed counter. Hit the "bang" to start it...
;
#X obj 53 373 metro 500;
#X msg 99 344 stop;
#X obj 112 83 float;
#X text 28 132 The "float" box is a storage element holding one floating-point
number. The cold inlet (i.e. \, the one on the right) stores numbers.
Sending the message "bang" to the hot inlet gets the number back out:
;
#X obj 108 221 float;
#X obj 53 399 float;
#X text 25 263 Float's outlet above is connected via;
#X text 384 462 updated for Pd version 0.34;
#X text 142 373 <-- new object: metronome. The "500" means every 500
milliseconds--i.e. \, twice a second.;
#X connect 1 0 14 0;
#X connect 2 0 0 0;
#X connect 2 0 19 1;
#X connect 4 0 18 1;
#X connect 6 0 18 0;
#X connect 8 0 16 0;
#X connect 9 0 7 0;
#X connect 9 0 16 1;
#X connect 14 0 19 0;
#X connect 15 0 14 0;
#X connect 15 0 14 0;
#X connect 16 0 9 0;
#X connect 18 0 5 0;
#X connect 19 0 2 0;

Some files were not shown because too many files have changed in this diff Show more