- 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.
|
@ -42,9 +42,10 @@ If you have troubles, or you are in another distro, you can try compiling from t
|
||||||
$./configure
|
$./configure
|
||||||
$make
|
$make
|
||||||
|
|
||||||
2. Building ola
|
2. Install ola and ola-dev
|
||||||
$./configure
|
|
||||||
$make
|
Add the repository apt.openlighting.org
|
||||||
|
apt-get install ola ola-dev
|
||||||
|
|
||||||
3. Building pd externals
|
3. Building pd externals
|
||||||
|
|
||||||
|
@ -109,9 +110,6 @@ echo "export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/include" >> ~/.bashrc
|
||||||
- the pd executable
|
- 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.
|
- 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.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
..........
|
..........
|
||||||
|
|
||||||
|
|
|
@ -1,125 +1,4 @@
|
||||||
#N canvas 738 162 611 318 10;
|
#N canvas 734 140 611 350 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 59 348 240 272 fondo 0;
|
#N canvas 59 348 240 272 fondo 0;
|
||||||
#X obj -452 -118 color 0 0 0;
|
#X obj -452 -118 color 0 0 0;
|
||||||
#X obj -452 -150 alpha;
|
#X obj -452 -150 alpha;
|
||||||
|
@ -136,100 +15,62 @@
|
||||||
#X connect 5 0 7 0;
|
#X connect 5 0 7 0;
|
||||||
#X connect 7 0 4 3;
|
#X connect 7 0 4 3;
|
||||||
#X restore -309 -438 pd fondo;
|
#X restore -309 -438 pd fondo;
|
||||||
#N canvas 59 381 1134 358 receive 0;
|
#N canvas 6 214 1351 525 receive 0;
|
||||||
#X obj 22 -242 s winposx;
|
#X obj 656 -238 s winposx;
|
||||||
#X obj 90 -242 s winposy;
|
#X obj 724 -238 s winposy;
|
||||||
#X obj 158 -242 s winsizex;
|
#X obj 792 -238 s winsizex;
|
||||||
#X obj 233 -242 s winsizey;
|
#X obj 867 -238 s winsizey;
|
||||||
#X obj 22 -266 float;
|
#X obj 595 -238 s window;
|
||||||
#X obj 90 -266 float;
|
#X obj 943 -236 s previewswitch;
|
||||||
#X obj 158 -266 float;
|
#X obj 1061 -236 s fps;
|
||||||
#X obj 233 -266 float;
|
#X obj 207 -486 udserver;
|
||||||
#X obj 323 -241 s layer1;
|
#X floatatom 260 -466 5 0 0 0 - - -;
|
||||||
#X obj 382 -241 s layer2;
|
#X obj 781 -339 route 101 102 103 104 105 122 123;
|
||||||
#X obj 442 -241 s layer3;
|
#X obj 207 -451 route 1 2 3 4 5 6 7 8;
|
||||||
#X obj 503 -241 s layer4;
|
#X obj 412 -371 route 201 202 203 204 205 206 207 208;
|
||||||
#X obj 563 -241 s layer5;
|
#X obj -197 -369 send dmx1;
|
||||||
#X obj 624 -241 s layer6;
|
#X obj 332 -369 send dmx8;
|
||||||
#X obj 685 -241 s layer7;
|
#X obj 259 -369 send dmx7;
|
||||||
#X obj 746 -241 s layer8;
|
#X obj 183 -369 send dmx6;
|
||||||
#X obj 323 -265 float;
|
#X obj 110 -369 send dmx5;
|
||||||
#X obj 382 -265 float;
|
#X obj 25 -369 send dmx4;
|
||||||
#X obj 442 -265 float;
|
#X obj -48 -369 send dmx3;
|
||||||
#X obj 503 -265 float;
|
#X obj -124 -369 send dmx2;
|
||||||
#X obj 746 -265 float;
|
#X obj 118 -280 s file1;
|
||||||
#X obj 563 -265 float;
|
#X obj 178 -280 s file2;
|
||||||
#X obj 624 -265 float;
|
#X obj 240 -280 s file3;
|
||||||
#X obj 685 -265 float;
|
#X obj 300 -280 s file4;
|
||||||
#X obj 807 -266 float;
|
#X obj 358 -281 s file5;
|
||||||
#X obj 807 -241 s ola;
|
#X obj 418 -281 s file6;
|
||||||
#X obj 847 -265 float;
|
#X obj 480 -281 s file7;
|
||||||
#X obj 847 -241 s universe;
|
#X obj 540 -281 s file8;
|
||||||
#X obj 902 -406 s path;
|
#X connect 7 0 10 0;
|
||||||
#X obj -39 -265 float;
|
#X connect 7 1 8 0;
|
||||||
#X obj 787 -449 unpack f f s;
|
#X connect 9 0 4 0;
|
||||||
#X obj 787 -477 netreceive 9195;
|
#X connect 9 1 0 0;
|
||||||
#X obj -39 -242 s window;
|
#X connect 9 2 1 0;
|
||||||
#X obj 922 -264 float;
|
#X connect 9 3 2 0;
|
||||||
#X obj 922 -242 s previewswitch;
|
#X connect 9 4 3 0;
|
||||||
#X obj -39 -408 select 1 2 3 4 5 11 12 13 14 15 16 17 18 20 21 22 23
|
#X connect 9 5 5 0;
|
||||||
;
|
#X connect 9 6 6 0;
|
||||||
#X obj 1040 -263 float;
|
#X connect 10 0 12 0;
|
||||||
#X obj 1040 -241 s fps;
|
#X connect 10 1 19 0;
|
||||||
#X connect 4 0 0 0;
|
#X connect 10 2 18 0;
|
||||||
#X connect 5 0 1 0;
|
#X connect 10 3 17 0;
|
||||||
#X connect 6 0 2 0;
|
#X connect 10 4 16 0;
|
||||||
#X connect 7 0 3 0;
|
#X connect 10 5 15 0;
|
||||||
#X connect 16 0 8 0;
|
#X connect 10 6 14 0;
|
||||||
#X connect 17 0 9 0;
|
#X connect 10 7 13 0;
|
||||||
#X connect 18 0 10 0;
|
#X connect 10 8 11 0;
|
||||||
#X connect 19 0 11 0;
|
#X connect 11 0 20 0;
|
||||||
#X connect 20 0 15 0;
|
#X connect 11 1 21 0;
|
||||||
#X connect 21 0 12 0;
|
#X connect 11 2 22 0;
|
||||||
#X connect 22 0 13 0;
|
#X connect 11 3 23 0;
|
||||||
#X connect 23 0 14 0;
|
#X connect 11 4 24 0;
|
||||||
#X connect 24 0 25 0;
|
#X connect 11 5 25 0;
|
||||||
#X connect 26 0 27 0;
|
#X connect 11 6 26 0;
|
||||||
#X connect 29 0 32 0;
|
#X connect 11 7 27 0;
|
||||||
#X connect 30 0 35 0;
|
#X connect 11 8 9 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;
|
|
||||||
#X restore -249 -438 pd receive;
|
#X restore -249 -438 pd receive;
|
||||||
#N canvas 816 198 450 333 window 0;
|
#N canvas 816 198 450 333 window 0;
|
||||||
#X msg 809 -348 color 0 0 0;
|
#X msg 809 -348 color 0 0 0;
|
||||||
|
@ -297,7 +138,7 @@
|
||||||
#X connect 27 0 24 0;
|
#X connect 27 0 24 0;
|
||||||
#X connect 28 0 27 0;
|
#X connect 28 0 27 0;
|
||||||
#X restore -175 -438 pd window;
|
#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 -209 -32 1;
|
||||||
#X msg -262 -33 0;
|
#X msg -262 -33 0;
|
||||||
#X obj -262 -55 select 0;
|
#X obj -262 -55 select 0;
|
||||||
|
@ -306,14 +147,12 @@
|
||||||
#X msg -196 34 0;
|
#X msg -196 34 0;
|
||||||
#X msg -192 3 1;
|
#X msg -192 3 1;
|
||||||
#X obj -254 56 t b;
|
#X obj -254 56 t b;
|
||||||
#X obj -338 32 s textgui;
|
|
||||||
#X obj -114 148 s preview;
|
#X obj -114 148 s preview;
|
||||||
#X obj -338 -81 r dmx5;
|
#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 msg -320 112 layerimage 15;
|
||||||
#X obj -191 -107 delay 500;
|
#X obj -191 -107 delay 500;
|
||||||
#X obj -191 -128 r metro;
|
#X obj -191 -128 r metro;
|
||||||
|
#X obj -262 -97 r file5;
|
||||||
#X obj -338 -28 layer;
|
#X obj -338 -28 layer;
|
||||||
#X connect 0 0 3 1;
|
#X connect 0 0 3 1;
|
||||||
#X connect 1 0 3 1;
|
#X connect 1 0 3 1;
|
||||||
|
@ -321,25 +160,22 @@
|
||||||
#X connect 2 1 0 0;
|
#X connect 2 1 0 0;
|
||||||
#X connect 3 0 4 0;
|
#X connect 3 0 4 0;
|
||||||
#X connect 4 0 7 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 5 0 4 1;
|
||||||
#X connect 6 0 4 1;
|
#X connect 6 0 4 1;
|
||||||
#X connect 7 0 5 0;
|
#X connect 7 0 5 0;
|
||||||
#X connect 7 0 9 0;
|
#X connect 7 0 8 0;
|
||||||
#X connect 7 0 13 0;
|
#X connect 7 0 10 0;
|
||||||
#X connect 10 0 16 0;
|
#X connect 9 0 14 0;
|
||||||
#X connect 11 0 2 0;
|
#X connect 10 0 8 0;
|
||||||
#X connect 11 0 16 1;
|
#X connect 11 0 6 0;
|
||||||
#X connect 12 0 8 0;
|
#X connect 12 0 11 0;
|
||||||
#X connect 13 0 9 0;
|
#X connect 13 0 14 1;
|
||||||
#X connect 14 0 6 0;
|
#X connect 14 0 3 0;
|
||||||
#X connect 15 0 14 0;
|
|
||||||
#X connect 16 0 12 0;
|
|
||||||
#X connect 16 1 3 0;
|
|
||||||
#X restore -176 -379 pd layer_5;
|
#X restore -176 -379 pd layer_5;
|
||||||
#X obj -298 -336 loadbang;
|
#X obj -298 -336 loadbang;
|
||||||
#X obj -127 -269 print togui;
|
#X obj -48 -231 print togui;
|
||||||
#N canvas 803 211 450 300 layer_6 0;
|
#N canvas 801 221 450 300 layer_6 0;
|
||||||
#X msg -124 -32 1;
|
#X msg -124 -32 1;
|
||||||
#X msg -177 -33 0;
|
#X msg -177 -33 0;
|
||||||
#X obj -177 -55 select 0;
|
#X obj -177 -55 select 0;
|
||||||
|
@ -348,14 +184,12 @@
|
||||||
#X msg -111 34 0;
|
#X msg -111 34 0;
|
||||||
#X msg -107 3 1;
|
#X msg -107 3 1;
|
||||||
#X obj -169 56 t b;
|
#X obj -169 56 t b;
|
||||||
#X obj -253 32 s textgui;
|
|
||||||
#X obj -29 148 s preview;
|
#X obj -29 148 s preview;
|
||||||
#X obj -253 -81 r dmx6;
|
#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 msg -242 116 layerimage 16;
|
||||||
#X obj -106 -120 r metro;
|
#X obj -106 -120 r metro;
|
||||||
#X obj -106 -97 delay 600;
|
#X obj -106 -97 delay 600;
|
||||||
|
#X obj -175 -103 r file6;
|
||||||
#X obj -253 -28 layer;
|
#X obj -253 -28 layer;
|
||||||
#X connect 0 0 3 1;
|
#X connect 0 0 3 1;
|
||||||
#X connect 1 0 3 1;
|
#X connect 1 0 3 1;
|
||||||
|
@ -363,23 +197,20 @@
|
||||||
#X connect 2 1 0 0;
|
#X connect 2 1 0 0;
|
||||||
#X connect 3 0 4 0;
|
#X connect 3 0 4 0;
|
||||||
#X connect 4 0 7 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 5 0 4 1;
|
||||||
#X connect 6 0 4 1;
|
#X connect 6 0 4 1;
|
||||||
#X connect 7 0 5 0;
|
#X connect 7 0 5 0;
|
||||||
#X connect 7 0 13 0;
|
#X connect 7 0 10 0;
|
||||||
#X connect 7 0 9 0;
|
#X connect 7 0 8 0;
|
||||||
#X connect 10 0 16 0;
|
#X connect 9 0 14 0;
|
||||||
#X connect 11 0 2 0;
|
#X connect 10 0 8 0;
|
||||||
#X connect 11 0 16 1;
|
#X connect 11 0 12 0;
|
||||||
#X connect 12 0 8 0;
|
#X connect 12 0 6 0;
|
||||||
#X connect 13 0 9 0;
|
#X connect 13 0 14 1;
|
||||||
#X connect 14 0 15 0;
|
#X connect 14 0 3 0;
|
||||||
#X connect 15 0 6 0;
|
|
||||||
#X connect 16 0 12 0;
|
|
||||||
#X connect 16 1 3 0;
|
|
||||||
#X restore -102 -379 pd layer_6;
|
#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 -124 -32 1;
|
||||||
#X msg -177 -33 0;
|
#X msg -177 -33 0;
|
||||||
#X obj -177 -55 select 0;
|
#X obj -177 -55 select 0;
|
||||||
|
@ -388,14 +219,12 @@
|
||||||
#X msg -111 34 0;
|
#X msg -111 34 0;
|
||||||
#X msg -107 3 1;
|
#X msg -107 3 1;
|
||||||
#X obj -169 56 t b;
|
#X obj -169 56 t b;
|
||||||
#X obj -253 32 s textgui;
|
|
||||||
#X obj -29 148 s preview;
|
#X obj -29 148 s preview;
|
||||||
#X obj -253 -81 r dmx7;
|
#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 msg -244 117 layerimage 17;
|
||||||
#X obj -106 -97 delay 700;
|
#X obj -106 -97 delay 700;
|
||||||
#X obj -106 -120 r metro;
|
#X obj -106 -120 r metro;
|
||||||
|
#X obj -177 -101 r file7;
|
||||||
#X obj -253 -28 layer;
|
#X obj -253 -28 layer;
|
||||||
#X connect 0 0 3 1;
|
#X connect 0 0 3 1;
|
||||||
#X connect 1 0 3 1;
|
#X connect 1 0 3 1;
|
||||||
|
@ -403,23 +232,20 @@
|
||||||
#X connect 2 1 0 0;
|
#X connect 2 1 0 0;
|
||||||
#X connect 3 0 4 0;
|
#X connect 3 0 4 0;
|
||||||
#X connect 4 0 7 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 5 0 4 1;
|
||||||
#X connect 6 0 4 1;
|
#X connect 6 0 4 1;
|
||||||
#X connect 7 0 5 0;
|
#X connect 7 0 5 0;
|
||||||
#X connect 7 0 13 0;
|
#X connect 7 0 10 0;
|
||||||
#X connect 7 0 9 0;
|
#X connect 7 0 8 0;
|
||||||
#X connect 10 0 16 0;
|
#X connect 9 0 14 0;
|
||||||
#X connect 11 0 2 0;
|
#X connect 10 0 8 0;
|
||||||
#X connect 11 0 16 1;
|
#X connect 11 0 6 0;
|
||||||
#X connect 12 0 8 0;
|
#X connect 12 0 11 0;
|
||||||
#X connect 13 0 9 0;
|
#X connect 13 0 14 1;
|
||||||
#X connect 14 0 6 0;
|
#X connect 14 0 3 0;
|
||||||
#X connect 15 0 14 0;
|
|
||||||
#X connect 16 0 12 0;
|
|
||||||
#X connect 16 1 3 0;
|
|
||||||
#X restore -28 -379 pd layer_7;
|
#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 -124 -41 1;
|
||||||
#X msg -177 -42 0;
|
#X msg -177 -42 0;
|
||||||
#X obj -177 -64 select 0;
|
#X obj -177 -64 select 0;
|
||||||
|
@ -428,14 +254,12 @@
|
||||||
#X msg -84 11 0;
|
#X msg -84 11 0;
|
||||||
#X msg -84 -12 1;
|
#X msg -84 -12 1;
|
||||||
#X obj -169 47 t b;
|
#X obj -169 47 t b;
|
||||||
#X obj -253 23 s textgui;
|
|
||||||
#X obj -29 148 s preview;
|
#X obj -29 148 s preview;
|
||||||
#X obj -253 -90 r dmx8;
|
#X obj -253 -90 r dmx8;
|
||||||
#X msg -261 103 layerimage 18;
|
#X msg -261 103 layerimage 18;
|
||||||
#X msg -253 1 8 \$1;
|
|
||||||
#X obj -84 -81 delay 800;
|
#X obj -84 -81 delay 800;
|
||||||
#X obj -84 -112 r metro;
|
#X obj -84 -112 r metro;
|
||||||
#X obj -177 -89 r layer8;
|
#X obj -203 -92 r file8;
|
||||||
#X obj -253 -37 layer;
|
#X obj -253 -37 layer;
|
||||||
#X connect 0 0 3 1;
|
#X connect 0 0 3 1;
|
||||||
#X connect 1 0 3 1;
|
#X connect 1 0 3 1;
|
||||||
|
@ -443,23 +267,20 @@
|
||||||
#X connect 2 1 0 0;
|
#X connect 2 1 0 0;
|
||||||
#X connect 3 0 4 0;
|
#X connect 3 0 4 0;
|
||||||
#X connect 4 0 7 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 5 0 4 1;
|
||||||
#X connect 6 0 4 1;
|
#X connect 6 0 4 1;
|
||||||
#X connect 7 0 5 0;
|
#X connect 7 0 5 0;
|
||||||
#X connect 7 0 11 0;
|
#X connect 7 0 10 0;
|
||||||
#X connect 7 0 9 0;
|
#X connect 7 0 8 0;
|
||||||
#X connect 10 0 16 0;
|
#X connect 9 0 14 0;
|
||||||
#X connect 11 0 9 0;
|
#X connect 10 0 8 0;
|
||||||
#X connect 12 0 8 0;
|
#X connect 11 0 6 0;
|
||||||
#X connect 13 0 6 0;
|
#X connect 12 0 11 0;
|
||||||
#X connect 14 0 13 0;
|
#X connect 13 0 14 1;
|
||||||
#X connect 15 0 2 0;
|
#X connect 14 0 3 0;
|
||||||
#X connect 15 0 16 1;
|
|
||||||
#X connect 16 0 12 0;
|
|
||||||
#X connect 16 1 3 0;
|
|
||||||
#X restore 46 -379 pd layer_8;
|
#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 -124 -32 1;
|
||||||
#X msg -177 -33 0;
|
#X msg -177 -33 0;
|
||||||
#X obj -177 -55 select 0;
|
#X obj -177 -55 select 0;
|
||||||
|
@ -468,14 +289,12 @@
|
||||||
#X msg -104 30 0;
|
#X msg -104 30 0;
|
||||||
#X msg -107 3 1;
|
#X msg -107 3 1;
|
||||||
#X obj -169 56 t b;
|
#X obj -169 56 t b;
|
||||||
#X obj -253 32 s textgui;
|
|
||||||
#X obj -29 148 s preview;
|
#X obj -29 148 s preview;
|
||||||
#X obj -253 -81 r dmx4;
|
#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 msg -231 104 layerimage 14;
|
||||||
#X obj -106 -88 delay 400;
|
#X obj -106 -88 delay 400;
|
||||||
#X obj -106 -116 r metro;
|
#X obj -106 -116 r metro;
|
||||||
|
#X obj -179 -92 r file4;
|
||||||
#X obj -253 -28 layer;
|
#X obj -253 -28 layer;
|
||||||
#X connect 0 0 3 1;
|
#X connect 0 0 3 1;
|
||||||
#X connect 1 0 3 1;
|
#X connect 1 0 3 1;
|
||||||
|
@ -483,23 +302,20 @@
|
||||||
#X connect 2 1 0 0;
|
#X connect 2 1 0 0;
|
||||||
#X connect 3 0 4 0;
|
#X connect 3 0 4 0;
|
||||||
#X connect 4 0 7 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 5 0 4 1;
|
||||||
#X connect 6 0 4 1;
|
#X connect 6 0 4 1;
|
||||||
#X connect 7 0 5 0;
|
#X connect 7 0 5 0;
|
||||||
#X connect 7 0 13 0;
|
#X connect 7 0 10 0;
|
||||||
#X connect 7 0 9 0;
|
#X connect 7 0 8 0;
|
||||||
#X connect 10 0 16 0;
|
#X connect 9 0 14 0;
|
||||||
#X connect 11 0 2 0;
|
#X connect 10 0 8 0;
|
||||||
#X connect 11 0 16 1;
|
#X connect 11 0 6 0;
|
||||||
#X connect 12 0 8 0;
|
#X connect 12 0 11 0;
|
||||||
#X connect 13 0 9 0;
|
#X connect 13 0 14 1;
|
||||||
#X connect 14 0 6 0;
|
#X connect 14 0 3 0;
|
||||||
#X connect 15 0 14 0;
|
|
||||||
#X connect 16 0 12 0;
|
|
||||||
#X connect 16 1 3 0;
|
|
||||||
#X restore -250 -379 pd layer_4;
|
#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 -124 -32 1;
|
||||||
#X msg -177 -33 0;
|
#X msg -177 -33 0;
|
||||||
#X obj -177 -55 select 0;
|
#X obj -177 -55 select 0;
|
||||||
|
@ -509,121 +325,106 @@
|
||||||
#X msg -61 31 0;
|
#X msg -61 31 0;
|
||||||
#X msg -107 3 1;
|
#X msg -107 3 1;
|
||||||
#X obj -223 69 t b;
|
#X obj -223 69 t b;
|
||||||
#X obj -253 32 s textgui;
|
|
||||||
#X obj -29 148 s preview;
|
#X obj -29 148 s preview;
|
||||||
#X obj -177 -80 r layer3;
|
|
||||||
#X obj -253 -81 r dmx3;
|
#X obj -253 -81 r dmx3;
|
||||||
#X msg -327 95 layerimage 13;
|
#X msg -327 95 layerimage 13;
|
||||||
#X obj -106 -81 delay 300;
|
#X obj -106 -81 delay 300;
|
||||||
#X msg -253 10 3 \$1;
|
#X obj -177 -100 r file3;
|
||||||
#X obj -253 -28 layer;
|
#X obj -253 -28 layer;
|
||||||
#X connect 0 0 3 1;
|
#X connect 0 0 3 1;
|
||||||
#X connect 1 0 3 1;
|
#X connect 1 0 3 1;
|
||||||
#X connect 2 0 1 0;
|
#X connect 2 0 1 0;
|
||||||
#X connect 2 1 0 0;
|
#X connect 2 1 0 0;
|
||||||
#X connect 3 0 5 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 8 0;
|
||||||
#X connect 5 0 10 0;
|
#X connect 5 0 9 0;
|
||||||
#X connect 6 0 5 1;
|
#X connect 6 0 5 1;
|
||||||
#X connect 7 0 5 1;
|
#X connect 7 0 5 1;
|
||||||
#X connect 8 0 6 0;
|
#X connect 8 0 6 0;
|
||||||
#X connect 8 0 13 0;
|
#X connect 8 0 11 0;
|
||||||
#X connect 8 0 10 0;
|
#X connect 8 0 9 0;
|
||||||
#X connect 11 0 2 0;
|
#X connect 10 0 14 0;
|
||||||
#X connect 11 0 16 1;
|
#X connect 11 0 9 0;
|
||||||
#X connect 12 0 16 0;
|
#X connect 12 0 7 0;
|
||||||
#X connect 13 0 10 0;
|
#X connect 13 0 14 1;
|
||||||
#X connect 14 0 7 0;
|
#X connect 14 0 3 0;
|
||||||
#X connect 15 0 9 0;
|
|
||||||
#X connect 16 0 15 0;
|
|
||||||
#X connect 16 1 3 0;
|
|
||||||
#X restore -323 -379 pd layer_3;
|
#X restore -323 -379 pd layer_3;
|
||||||
#N canvas 38 329 450 300 layer_2 0;
|
#N canvas 883 217 450 300 layer_2 0;
|
||||||
#X msg -124 -32 1;
|
#X msg -86 -22 1;
|
||||||
#X msg -177 -33 0;
|
#X msg -139 -23 0;
|
||||||
#X obj -177 -55 select 0;
|
#X obj -139 -45 select 0;
|
||||||
#X obj -169 4 spigot;
|
#X obj -131 14 spigot;
|
||||||
#X obj -65 -111 r metro;
|
#X obj -65 -111 r metro;
|
||||||
#X obj -169 34 spigot;
|
#X obj -131 44 spigot;
|
||||||
#X msg -26 39 0;
|
#X msg 12 49 0;
|
||||||
#X msg -107 3 1;
|
#X msg -69 13 1;
|
||||||
#X obj -169 56 t b;
|
#X obj -131 66 t b;
|
||||||
#X obj -253 32 s textgui;
|
#X obj 9 158 s preview;
|
||||||
#X obj -29 148 s preview;
|
|
||||||
#X obj -253 -81 r dmx2;
|
#X obj -253 -81 r dmx2;
|
||||||
#X obj -177 -80 r layer2;
|
#X msg -197 122 layerimage 12;
|
||||||
#X msg -253 10 2 \$1;
|
|
||||||
#X msg -235 112 layerimage 12;
|
|
||||||
#X msg -65 -86 delay 100;
|
#X msg -65 -86 delay 100;
|
||||||
|
#X obj -177 -80 r file2;
|
||||||
#X obj -253 -28 layer;
|
#X obj -253 -28 layer;
|
||||||
#X connect 0 0 3 1;
|
#X connect 0 0 3 1;
|
||||||
#X connect 1 0 3 1;
|
#X connect 1 0 3 1;
|
||||||
#X connect 2 0 1 0;
|
#X connect 2 0 1 0;
|
||||||
#X connect 2 1 0 0;
|
#X connect 2 1 0 0;
|
||||||
#X connect 3 0 5 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 8 0;
|
||||||
#X connect 5 0 10 0;
|
#X connect 5 0 9 0;
|
||||||
#X connect 6 0 5 1;
|
#X connect 6 0 5 1;
|
||||||
#X connect 7 0 5 1;
|
#X connect 7 0 5 1;
|
||||||
#X connect 8 0 6 0;
|
#X connect 8 0 6 0;
|
||||||
#X connect 8 0 14 0;
|
#X connect 8 0 11 0;
|
||||||
#X connect 8 0 10 0;
|
#X connect 8 0 9 0;
|
||||||
#X connect 11 0 16 0;
|
#X connect 10 0 14 0;
|
||||||
#X connect 12 0 2 0;
|
#X connect 11 0 9 0;
|
||||||
#X connect 12 0 16 1;
|
#X connect 12 0 7 0;
|
||||||
#X connect 13 0 9 0;
|
#X connect 13 0 14 1;
|
||||||
#X connect 14 0 10 0;
|
#X connect 14 0 3 0;
|
||||||
#X connect 15 0 7 0;
|
|
||||||
#X connect 16 0 13 0;
|
|
||||||
#X connect 16 1 3 0;
|
|
||||||
#X restore -396 -379 pd layer_2;
|
#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 obj -253 -28 layer;
|
||||||
#X msg -124 -32 1;
|
#X msg -61 -33 1;
|
||||||
#X msg -177 -33 0;
|
#X msg -114 -34 0;
|
||||||
#X obj -177 -55 select 0;
|
#X obj -106 3 spigot;
|
||||||
#X obj -169 4 spigot;
|
#X obj 29 -93 r metro;
|
||||||
#X obj -106 -124 r metro;
|
#X obj -106 33 spigot;
|
||||||
#X obj -169 34 spigot;
|
#X msg 45 32 0;
|
||||||
#X msg -18 33 0;
|
#X msg -44 2 1;
|
||||||
#X msg -107 3 1;
|
#X obj -106 55 t b;
|
||||||
#X obj -169 56 t b;
|
|
||||||
#X obj -253 -81 r dmx1;
|
#X obj -253 -81 r dmx1;
|
||||||
#X obj -177 -80 r layer1;
|
#X msg -193 109 layerimage 11;
|
||||||
#X msg -253 10 1 \$1;
|
|
||||||
#X msg -235 92 layerimage 11;
|
|
||||||
#X obj -253 32 s textgui;
|
|
||||||
#X obj -29 148 s preview;
|
#X obj -29 148 s preview;
|
||||||
#X connect 0 0 12 0;
|
#X obj -197 -81 r file1;
|
||||||
#X connect 0 1 4 0;
|
#X obj -114 -56 select 0;
|
||||||
#X connect 1 0 4 1;
|
#X connect 0 0 3 0;
|
||||||
#X connect 2 0 4 1;
|
#X connect 1 0 3 1;
|
||||||
#X connect 3 0 2 0;
|
#X connect 2 0 3 1;
|
||||||
#X connect 3 1 1 0;
|
#X connect 3 0 5 0;
|
||||||
#X connect 4 0 6 0;
|
#X connect 4 0 7 0;
|
||||||
#X connect 5 0 8 0;
|
#X connect 5 0 8 0;
|
||||||
#X connect 6 0 9 0;
|
#X connect 5 0 11 0;
|
||||||
#X connect 6 0 15 0;
|
#X connect 6 0 5 1;
|
||||||
#X connect 7 0 6 1;
|
#X connect 7 0 5 1;
|
||||||
#X connect 8 0 6 1;
|
#X connect 8 0 6 0;
|
||||||
#X connect 9 0 7 0;
|
#X connect 8 0 10 0;
|
||||||
#X connect 9 0 13 0;
|
#X connect 8 0 11 0;
|
||||||
#X connect 9 0 15 0;
|
#X connect 9 0 0 0;
|
||||||
#X connect 10 0 0 0;
|
#X connect 10 0 11 0;
|
||||||
#X connect 11 0 3 0;
|
#X connect 12 0 0 1;
|
||||||
#X connect 11 0 0 1;
|
#X connect 13 0 2 0;
|
||||||
#X connect 12 0 14 0;
|
#X connect 13 1 1 0;
|
||||||
#X connect 13 0 15 0;
|
|
||||||
#X restore -469 -379 pd layer_1;
|
#X restore -469 -379 pd layer_1;
|
||||||
#X obj -298 -271 metro 1000;
|
#X obj -298 -271 metro 1000;
|
||||||
#X obj -298 -237 s metro;
|
#X obj -298 -237 s metro;
|
||||||
#X msg -298 -305 1;
|
#X msg -298 -305 1;
|
||||||
#X obj -85 -304 r textgui;
|
#X obj -124 -263 r textgui;
|
||||||
#X obj -476 -294 r preview;
|
#X obj -476 -294 r preview;
|
||||||
#X msg -127 -301 0;
|
#X msg -48 -263 0;
|
||||||
#X obj -476 -236 pix2jpg;
|
#X obj -476 -272 pix2jpg;
|
||||||
#X text -384 -470 (c) 2012-2013 Santi Noreña libremediaserver@gmail.com
|
#X text -384 -470 (c) 2012-2013 Santi Noreña libremediaserver@gmail.com
|
||||||
GPL License;
|
GPL License;
|
||||||
#X obj -418 -336 r previewswitch;
|
#X obj -418 -336 r previewswitch;
|
||||||
|
@ -662,14 +463,14 @@ GPL License;
|
||||||
#X connect 13 0 9 0;
|
#X connect 13 0 9 0;
|
||||||
#X connect 15 0 11 1;
|
#X connect 15 0 11 1;
|
||||||
#X restore -107 -438 pd fps;
|
#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;
|
GUI http://libremediaserver.googlecode.com;
|
||||||
#X connect 5 0 16 0;
|
#X connect 4 0 15 0;
|
||||||
#X connect 5 0 19 0;
|
#X connect 4 0 18 0;
|
||||||
#X connect 14 0 15 0;
|
#X connect 13 0 14 0;
|
||||||
#X connect 16 0 14 0;
|
#X connect 15 0 13 0;
|
||||||
#X connect 17 0 6 0;
|
#X connect 16 0 5 0;
|
||||||
#X connect 18 0 20 0;
|
#X connect 17 0 19 0;
|
||||||
#X connect 19 0 6 0;
|
#X connect 18 0 5 0;
|
||||||
#X connect 22 0 14 0;
|
#X connect 21 0 13 0;
|
||||||
#X coords 0 0 1 1 85 60 0;
|
#X coords 0 0 1 1 85 60 0;
|
||||||
|
|
|
@ -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
|
|
|
@ -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
|
|
|
@ -1,2 +0,0 @@
|
||||||
xrandr --output VGA-0 --off
|
|
||||||
|
|
|
@ -64,6 +64,7 @@ AC_CONFIG_FILES([plugins/videoVLC/Makefile])
|
||||||
#AC_CONFIG_FILES([extra/pix_fiducialtrack/Makefile])
|
#AC_CONFIG_FILES([extra/pix_fiducialtrack/Makefile])
|
||||||
#AC_CONFIG_FILES([extra/pix_hit/Makefile])
|
#AC_CONFIG_FILES([extra/pix_hit/Makefile])
|
||||||
AC_CONFIG_FILES([extra/pix2jpg/Makefile])
|
AC_CONFIG_FILES([extra/pix2jpg/Makefile])
|
||||||
|
AC_CONFIG_FILES([extra/udserver/Makefile])
|
||||||
# other stuff
|
# other stuff
|
||||||
AC_CONFIG_FILES([build/Makefile Gem.pc Gem-meta.pd])
|
AC_CONFIG_FILES([build/Makefile Gem.pc Gem-meta.pd])
|
||||||
|
|
||||||
|
|
|
@ -9,5 +9,6 @@ SUBDIRS =
|
||||||
#SUBDIRS += pix_fiducialtrack
|
#SUBDIRS += pix_fiducialtrack
|
||||||
#SUBDIRS += pix_hit
|
#SUBDIRS += pix_hit
|
||||||
SUBDIRS += pix2jpg
|
SUBDIRS += pix2jpg
|
||||||
|
SUBDIRS += udserver
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
README-EXTRA.txt
|
README-EXTRA.txt
|
||||||
|
|
|
@ -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
|
// External for Gem and Pure Data to convert an image to jpg and send it
|
||||||
// via Unix Domain Sockets.
|
// via Unix Domain Sockets.
|
||||||
//
|
//
|
||||||
|
@ -29,7 +29,7 @@ pix2jpg :: pix2jpg(t_symbol *s)
|
||||||
m_layer(0)
|
m_layer(0)
|
||||||
{
|
{
|
||||||
// post("pix2jpg 2012-2013 Santi Noreña libremediaserver@gmail.com");
|
// 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
|
// Init the Unix Socket
|
||||||
socket_fd = socket(PF_UNIX, SOCK_STREAM, 0);
|
socket_fd = socket(PF_UNIX, SOCK_STREAM, 0);
|
||||||
if(socket_fd < 0)
|
if(socket_fd < 0)
|
||||||
|
@ -53,7 +53,7 @@ pix2jpg :: pix2jpg(t_symbol *s)
|
||||||
/////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////
|
||||||
pix2jpg :: ~pix2jpg()
|
pix2jpg :: ~pix2jpg()
|
||||||
{
|
{
|
||||||
outlet_free(outlet1);
|
// outlet_free(outlet1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////
|
||||||
|
@ -68,7 +68,7 @@ void pix2jpg :: processImage(imageStruct &image)
|
||||||
int counter = 0;
|
int counter = 0;
|
||||||
Image imagem(image.xsize, image.ysize, "RGBA", CharPixel, image.data);
|
Image imagem(image.xsize, image.ysize, "RGBA", CharPixel, image.data);
|
||||||
imagem.resize("64x46");
|
imagem.resize("64x46");
|
||||||
// Write to BLOB in png format
|
// Write to BLOB in jpg format
|
||||||
Blob blob;
|
Blob blob;
|
||||||
imagem.magick( "jpg" ); // Set JPEG output format
|
imagem.magick( "jpg" ); // Set JPEG output format
|
||||||
imagem.write( &blob );
|
imagem.write( &blob );
|
||||||
|
|
|
@ -82,12 +82,11 @@ class GEM_EXPORT pix2jpg : public GemPixObj
|
||||||
|
|
||||||
int m_layer;
|
int m_layer;
|
||||||
|
|
||||||
t_outlet *outlet1; // outlet pointer
|
// t_outlet *outlet1; // outlet pointer
|
||||||
|
|
||||||
struct sockaddr_un address;
|
struct sockaddr_un address;
|
||||||
int socket_fd, nbytes;
|
int socket_fd, nbytes;
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
//////////
|
//////////
|
||||||
|
@ -96,6 +95,5 @@ class GEM_EXPORT pix2jpg : public GemPixObj
|
||||||
static void stopMessCallback(void *data);
|
static void stopMessCallback(void *data);
|
||||||
static void bangMessCallback(void *data);
|
static void bangMessCallback(void *data);
|
||||||
static void layerimageMessCallback(void *data, t_float f);
|
static void layerimageMessCallback(void *data, t_float f);
|
||||||
|
|
||||||
};
|
};
|
||||||
#endif // for header file
|
#endif // for header file
|
||||||
|
|
|
@ -18,15 +18,12 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "PacketCreator.h"
|
#include "PacketCreator.h"
|
||||||
//#include "PureMediaServer.h"
|
|
||||||
//#include "MediaServer.h"
|
|
||||||
#include "CITPDefines.h"
|
#include "CITPDefines.h"
|
||||||
#include "MSEXDefines.h"
|
#include "MSEXDefines.h"
|
||||||
|
|
||||||
#include <QtDebug>
|
#include <QtDebug>
|
||||||
#include <QFileInfo>
|
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QDir>
|
|
||||||
|
|
||||||
PacketCreator::PacketCreator(QObject *parent)
|
PacketCreator::PacketCreator(QObject *parent)
|
||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
|
@ -42,7 +39,7 @@ unsigned char * PacketCreator::createPLocPacket(
|
||||||
const QString &state,
|
const QString &state,
|
||||||
int &bufferLen)
|
int &bufferLen)
|
||||||
{
|
{
|
||||||
qDebug() << "createPLOC" << name << state;
|
qDebug() << "Packet|Creator" << "createPLOC" << name << state;
|
||||||
QString plocType = "MediaServer";
|
QString plocType = "MediaServer";
|
||||||
// figure out the packet size, all strings need to be NULL terminated
|
// 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;
|
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;
|
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
|
// Vemos el tamaño total de la estructurta
|
||||||
|
QByteArray data;
|
||||||
|
QDataStream stream(&data, QIODevice::WriteOnly);
|
||||||
MediaLibrary mediai;
|
MediaLibrary mediai;
|
||||||
int medialen = 0;
|
int medialen = 0;
|
||||||
int size = 0;
|
int size = 0;
|
||||||
int i;
|
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);
|
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);
|
int offset = sizeof(struct CITP_MSEX_ELIn);
|
||||||
bufferLen = offset + medialen;
|
bufferLen = offset + medialen;
|
||||||
|
@ -225,14 +224,14 @@ unsigned char * PacketCreator::createELINPacket(QList <MediaLibrary> medialib, i
|
||||||
|
|
||||||
// ELin Content
|
// ELin Content
|
||||||
packet->LibraryType = 0x01;
|
packet->LibraryType = 0x01;
|
||||||
packet->LibraryCount = medialib.size();
|
packet->LibraryCount = medialib->size();
|
||||||
// Element Library Information
|
// Element Library Information
|
||||||
unsigned char *buffer2 = new unsigned char[medialen];
|
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);
|
memset(buffer2, 0, medialen);
|
||||||
int offset2 = 0;
|
int offset2 = 0;
|
||||||
mediai = medialib.at(i);
|
mediai = medialib->at(i);
|
||||||
memcpy (buffer2, &mediai.m_Id, 1);
|
memcpy (buffer2, &mediai.m_Id, 1);
|
||||||
offset2++;
|
offset2++;
|
||||||
memcpy ((buffer2+offset2), &mediai.m_DMXRangeMin,1);
|
memcpy ((buffer2+offset2), &mediai.m_DMXRangeMin,1);
|
||||||
|
@ -322,34 +321,18 @@ unsigned char * PacketCreator::createMEINPacket(MediaLibrary medialib, int &buff
|
||||||
return buffer;
|
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);
|
QString thumbname = medialib.m_Name;
|
||||||
QFileInfo fileInfo;
|
thumbname.append("/thumbs/");
|
||||||
QFileInfoList filelist;
|
QString filename;
|
||||||
if (medialib.m_Name == "image"){
|
filename = medialib.m_MediaInformation.at(elementnumber).MediaName;
|
||||||
dir.setFilter(QDir::Files);
|
int index = filename.count("/");
|
||||||
dir.cd("image");
|
thumbname.append(filename.section("/", index, index));
|
||||||
}
|
thumbname.append(".jpg");
|
||||||
else {
|
QFile file(thumbname);
|
||||||
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());
|
|
||||||
if (!file.open(QIODevice::ReadOnly)){
|
if (!file.open(QIODevice::ReadOnly)){
|
||||||
qDebug() << "Cannot open the file"<<fileInfo.filePath();
|
qDebug() << "PacketCreator|" << "Cannot open the file" << thumbname ;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
unsigned char * bufferthumb = new unsigned char[file.size()];
|
unsigned char * bufferthumb = new unsigned char[file.size()];
|
||||||
|
|
|
@ -48,9 +48,9 @@ public:
|
||||||
static unsigned char * createSINFPacket(int &bufferLen);
|
static unsigned char * createSINFPacket(int &bufferLen);
|
||||||
static unsigned char * createLSTAPacket(layerList layerp, int &bufferLen);
|
static unsigned char * createLSTAPacket(layerList layerp, int &bufferLen);
|
||||||
static unsigned char * createNACKPacket(quint32 cookie, 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 * 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 * createVSRCPacket(int &bufferLen);
|
||||||
// static const char * createFrame(uchar *frame, int &bufferLen);
|
// static const char * createFrame(uchar *frame, int &bufferLen);
|
||||||
|
|
||||||
|
|
|
@ -30,10 +30,8 @@ THE SOFTWARE.
|
||||||
#include "CITPDefines.h"
|
#include "CITPDefines.h"
|
||||||
#include "PacketCreator.h"
|
#include "PacketCreator.h"
|
||||||
|
|
||||||
|
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <QtDebug>
|
#include <QtDebug>
|
||||||
#include <QNetworkInterface>
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
@ -75,7 +73,7 @@ bool PeerInformationSocket::init(const QString &name, const QString &state, quin
|
||||||
address.setAddress(ipadd);
|
address.setAddress(ipadd);
|
||||||
if (!bind(address, CITP_PINF_MULTICAST_PORT, ShareAddress | ReuseAddressHint))
|
if (!bind(address, CITP_PINF_MULTICAST_PORT, ShareAddress | ReuseAddressHint))
|
||||||
{
|
{
|
||||||
qDebug() << "Multicast bind failed";
|
qDebug() << tr("PeerInformationSocket|") << "Multicast bind failed";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,7 +84,7 @@ bool PeerInformationSocket::init(const QString &name, const QString &state, quin
|
||||||
(const char *)&mreq, sizeof(struct ip_mreq));
|
(const char *)&mreq, sizeof(struct ip_mreq));
|
||||||
if (0 != r)
|
if (0 != r)
|
||||||
{
|
{
|
||||||
qDebug() << "setsockopt failed, r:" << r;
|
qDebug() << tr("PeerInformationSocket|") << "setsockopt failed, r:" << r;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
delete m_packetBuffer;
|
delete m_packetBuffer;
|
||||||
|
|
|
@ -30,7 +30,7 @@ THE SOFTWARE.
|
||||||
#ifndef _PEERINFORMATIONSOCKET_H_
|
#ifndef _PEERINFORMATIONSOCKET_H_
|
||||||
#define _PEERINFORMATIONSOCKET_H_
|
#define _PEERINFORMATIONSOCKET_H_
|
||||||
|
|
||||||
#include <QUdpSocket>
|
#include <QtNetwork/QUdpSocket>
|
||||||
|
|
||||||
class QTimer;
|
class QTimer;
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
THE SOFTWARE.
|
THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
#include "citp-lib.h"
|
#include "citp-lib.h"
|
||||||
|
|
||||||
#include <QtDebug>
|
#include <QtDebug>
|
||||||
|
|
||||||
#include "CITPDefines.h"
|
#include "CITPDefines.h"
|
||||||
|
|
|
@ -37,14 +37,14 @@ THE SOFTWARE.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QScriptable>
|
//#include <QScriptable>
|
||||||
#include <QHostAddress>
|
#include <QtNetwork/QHostAddress>
|
||||||
#include <QNetworkInterface>
|
#include <QtNetwork/QNetworkInterface>
|
||||||
|
|
||||||
class PeerInformationSocket;
|
class PeerInformationSocket;
|
||||||
class MediaServer;
|
class MediaServer;
|
||||||
|
|
||||||
class CITPLIB_EXPORT CITPLib : public QObject, public QScriptable
|
class CITPLIB_EXPORT CITPLib : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -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;
|
|
|
@ -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;
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
|
|
|
@ -38,17 +38,21 @@
|
||||||
#include "CITPDefines.h"
|
#include "CITPDefines.h"
|
||||||
#include "MSEXDefines.h"
|
#include "MSEXDefines.h"
|
||||||
#include "ui_libremediaserver.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 COPYRIGHT "(C) 2012-2013 Santi Norena libremediaserver@gmail.com"
|
||||||
#define LICENSE "GPL 3 License. See LICENSE.txt and credits.txt for details"
|
#define LICENSE "GPL 3 License. See LICENSE.txt and credits.txt for details"
|
||||||
|
|
||||||
class msex;
|
|
||||||
class QMenu;
|
class QMenu;
|
||||||
class QProcess;
|
class QProcess;
|
||||||
|
class olaInterface;
|
||||||
|
|
||||||
class libreMediaServer : public QMainWindow
|
class libreMediaServer : public QMainWindow
|
||||||
{
|
{
|
||||||
|
|
||||||
|
friend class olaInterface;
|
||||||
|
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -61,33 +65,23 @@ public:
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
QString m_pathmedia; // Path to Medias
|
QString m_pathmedia; // Path to Medias
|
||||||
msex *m_msex; // MSEx
|
olaInterface *m_olaInterface;
|
||||||
QProcess *m_ola; // OLA daemon process
|
QProcess *m_ola; // OLA daemon process
|
||||||
QProcess *m_pd_video; // Pure Data process for video
|
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
|
// Video Unix Local Sockets
|
||||||
QLocalServer *m_server_vid;
|
QLocalServer *m_server_vid;
|
||||||
QLocalSocket *m_read_vid;
|
QLocalSocket *m_read_vid;
|
||||||
// Audio TCP Sockets
|
QLocalSocket *m_write_video;
|
||||||
QTcpSocket *m_pd_write_audio;
|
|
||||||
QTcpServer *m_pd_read_audio;
|
|
||||||
QTcpSocket *m_tcpsocket_audio;
|
|
||||||
QTimer *m_preview; // Timer for the preview screen
|
|
||||||
int m_startvideo; // Counter starts video engine. Debugging purpose
|
int m_startvideo; // Counter starts video engine. Debugging purpose
|
||||||
int m_startaudio; // Counter starts audio engine. Debugging purpose
|
|
||||||
bool m_gui;
|
bool m_gui;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
bool sendPacket(const char *buffer, int bufferLen);
|
|
||||||
void pdstart();
|
|
||||||
void errorsending();
|
void errorsending();
|
||||||
bool sendPacket_audio(const char *buffer, int bufferLen);
|
void pdstart();
|
||||||
void pdstart_audio();
|
|
||||||
void errorsending_audio();
|
|
||||||
void open_start();
|
void open_start();
|
||||||
void save_finish();
|
void save_finish();
|
||||||
void open(QFile *file);
|
void open(QFile *file);
|
||||||
|
@ -97,6 +91,9 @@ private:
|
||||||
public slots:
|
public slots:
|
||||||
|
|
||||||
void sendFrame();
|
void sendFrame();
|
||||||
|
bool sendPacket(const char *buffer, int bufferLen);
|
||||||
|
void sendPacket(int layer, int channel, int value);
|
||||||
|
bool newFile(QString file);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
|
||||||
|
@ -111,7 +108,6 @@ private slots:
|
||||||
void on_winpositiony_valueChanged();
|
void on_winpositiony_valueChanged();
|
||||||
void on_winsizex_valueChanged();
|
void on_winsizex_valueChanged();
|
||||||
void on_winsizey_valueChanged();
|
void on_winsizey_valueChanged();
|
||||||
void on_readDMX_stateChanged(int state);
|
|
||||||
void on_layer1Add_valueChanged();
|
void on_layer1Add_valueChanged();
|
||||||
void on_layer1Check_stateChanged (int state);
|
void on_layer1Check_stateChanged (int state);
|
||||||
void on_layer2Add_valueChanged();
|
void on_layer2Add_valueChanged();
|
||||||
|
@ -131,44 +127,13 @@ private slots:
|
||||||
void on_fpsRate_valueChanged();
|
void on_fpsRate_valueChanged();
|
||||||
void pdrestart();
|
void pdrestart();
|
||||||
void stdout();
|
void stdout();
|
||||||
void on_video_stateChanged(int state);
|
|
||||||
void on_previewMaster_stateChanged(int state);
|
void on_previewMaster_stateChanged(int state);
|
||||||
void on_previewLayer_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
|
// Menu File
|
||||||
void openFile();
|
void openFile();
|
||||||
void saveFile();
|
void saveFile();
|
||||||
void ChangeMediaPath();// Change the path to medias
|
void ChangeMediaPath();// Change the path to medias
|
||||||
// Menu CITP/MSEx
|
|
||||||
void initMSEX(); // Init the CITP/MSEx protocol
|
|
||||||
// void setIPAdd();
|
|
||||||
void makeThumbs();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // LIBREMEDIASERVER_H
|
#endif // LIBREMEDIASERVER_H
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
TEMPLATE = app
|
TEMPLATE = app
|
||||||
TARGET = libremediaserver
|
TARGET = libremediaserver
|
||||||
QT += network script webkit
|
QT += network script webkit
|
||||||
CONFIG += release
|
CONFIG += debug
|
||||||
DESTDIR = ./debug
|
DESTDIR = ./debug
|
||||||
|
|
||||||
HEADERS += libremediaserver.h \
|
HEADERS += libremediaserver.h \
|
||||||
|
@ -10,14 +10,16 @@ HEADERS += libremediaserver.h \
|
||||||
PeerInformationSocket.h \
|
PeerInformationSocket.h \
|
||||||
msex.h \
|
msex.h \
|
||||||
CITPDefines.h \
|
CITPDefines.h \
|
||||||
MSEXDefines.h
|
MSEXDefines.h \
|
||||||
|
olainterface.h
|
||||||
|
|
||||||
SOURCES += main.cpp \
|
SOURCES += main.cpp \
|
||||||
libremediaserver.cpp \
|
libremediaserver.cpp \
|
||||||
citp-lib.cpp \
|
citp-lib.cpp \
|
||||||
PacketCreator.cpp \
|
PacketCreator.cpp \
|
||||||
PeerInformationSocket.cpp \
|
PeerInformationSocket.cpp \
|
||||||
msex.cpp
|
msex.cpp \
|
||||||
|
olainterface.cpp
|
||||||
|
|
||||||
FORMS += \
|
FORMS += \
|
||||||
libremediaserver.ui
|
libremediaserver.ui
|
||||||
|
@ -25,6 +27,7 @@ FORMS += \
|
||||||
#INCLUDEPATH += ./
|
#INCLUDEPATH += ./
|
||||||
|
|
||||||
LIBS += -L./debug
|
LIBS += -L./debug
|
||||||
|
LIBS += -lola -lolacommon
|
||||||
|
|
||||||
#win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../debug/release/ -lcitp
|
#win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../debug/release/ -lcitp
|
||||||
#else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../debug/debug/ -lcitp
|
#else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../debug/debug/ -lcitp
|
||||||
|
@ -47,4 +50,5 @@ OTHER_FILES += \
|
||||||
../instalacion.txt \
|
../instalacion.txt \
|
||||||
../credits.txt \
|
../credits.txt \
|
||||||
../compiling.txt \
|
../compiling.txt \
|
||||||
../changelog.txt
|
../changelog.txt \
|
||||||
|
dmx.xlm
|
||||||
|
|
|
@ -100,41 +100,6 @@
|
||||||
<number>5000</number>
|
<number>5000</number>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</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">
|
<widget class="QLabel" name="winsizeLabel">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
|
@ -252,19 +217,6 @@
|
||||||
<string>Window Position</string>
|
<string>Window Position</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</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">
|
<widget class="QCheckBox" name="layer1Check">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
|
@ -330,29 +282,6 @@
|
||||||
<string>Layer 7</string>
|
<string>Layer 7</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</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">
|
<widget class="QSpinBox" name="winsizey">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
|
@ -366,19 +295,6 @@
|
||||||
<number>5000</number>
|
<number>5000</number>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</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">
|
<widget class="QCheckBox" name="layer5Check">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
|
@ -392,35 +308,6 @@
|
||||||
<string>Layer 5</string>
|
<string>Layer 5</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</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">
|
<widget class="QCheckBox" name="layer3Check">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
|
@ -447,25 +334,6 @@
|
||||||
<number>5000</number>
|
<number>5000</number>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</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">
|
<widget class="QSpinBox" name="layer4Add">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
|
@ -754,8 +622,6 @@
|
||||||
<zorder>layer5Add</zorder>
|
<zorder>layer5Add</zorder>
|
||||||
<zorder>layer6Check</zorder>
|
<zorder>layer6Check</zorder>
|
||||||
<zorder>winsizex</zorder>
|
<zorder>winsizex</zorder>
|
||||||
<zorder>ipAddress2</zorder>
|
|
||||||
<zorder>ipAddress4</zorder>
|
|
||||||
<zorder>winsizeLabel</zorder>
|
<zorder>winsizeLabel</zorder>
|
||||||
<zorder>layer6Add</zorder>
|
<zorder>layer6Add</zorder>
|
||||||
<zorder>window</zorder>
|
<zorder>window</zorder>
|
||||||
|
@ -765,19 +631,12 @@
|
||||||
<zorder>layer2Add</zorder>
|
<zorder>layer2Add</zorder>
|
||||||
<zorder>layer4Check</zorder>
|
<zorder>layer4Check</zorder>
|
||||||
<zorder>winposLabel</zorder>
|
<zorder>winposLabel</zorder>
|
||||||
<zorder>readDMX</zorder>
|
|
||||||
<zorder>layer1Check</zorder>
|
<zorder>layer1Check</zorder>
|
||||||
<zorder>layer1Add</zorder>
|
<zorder>layer1Add</zorder>
|
||||||
<zorder>layer8Add</zorder>
|
<zorder>layer8Add</zorder>
|
||||||
<zorder>winpositiony</zorder>
|
<zorder>winpositiony</zorder>
|
||||||
<zorder>universe</zorder>
|
|
||||||
<zorder>video</zorder>
|
|
||||||
<zorder>winsizey</zorder>
|
<zorder>winsizey</zorder>
|
||||||
<zorder>universeLabel</zorder>
|
|
||||||
<zorder>CITPaddress_label</zorder>
|
|
||||||
<zorder>ipAddress3</zorder>
|
|
||||||
<zorder>winpositionx</zorder>
|
<zorder>winpositionx</zorder>
|
||||||
<zorder>ipAddress1</zorder>
|
|
||||||
<zorder>layer4Add</zorder>
|
<zorder>layer4Add</zorder>
|
||||||
<zorder>layer1Preview</zorder>
|
<zorder>layer1Preview</zorder>
|
||||||
<zorder>layer2Preview</zorder>
|
<zorder>layer2Preview</zorder>
|
||||||
|
@ -794,400 +653,6 @@
|
||||||
<zorder>fpsLabel</zorder>
|
<zorder>fpsLabel</zorder>
|
||||||
<zorder>fpsRate</zorder>
|
<zorder>fpsRate</zorder>
|
||||||
</widget>
|
</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>
|
||||||
<widget class="QPlainTextEdit" name="textEdit">
|
<widget class="QPlainTextEdit" name="textEdit">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
|
@ -1226,16 +691,7 @@
|
||||||
<addaction name="actionChange_Media_Path"/>
|
<addaction name="actionChange_Media_Path"/>
|
||||||
<addaction name="actionLaunch_OLA_Setup"/>
|
<addaction name="actionLaunch_OLA_Setup"/>
|
||||||
</widget>
|
</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="menuFile"/>
|
||||||
<addaction name="menuCITP_MSEx"/>
|
|
||||||
</widget>
|
</widget>
|
||||||
<action name="actionExit">
|
<action name="actionExit">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
|
248
src/msex.cpp
|
@ -17,26 +17,17 @@
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
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 "msex.h"
|
||||||
#include "MSEXDefines.h"
|
|
||||||
#include "PacketCreator.h"
|
|
||||||
#include "citp-lib.h"
|
|
||||||
|
|
||||||
msex::msex(QObject *parent)
|
|
||||||
|
msex::msex(olaInterface *parent)
|
||||||
: QObject(parent),
|
: QObject(parent),
|
||||||
m_peerState(STATE),
|
m_peerState(STATE),
|
||||||
m_peerName(NAME),
|
m_peerName(NAME),
|
||||||
m_listeningPort(LISTENTCPPORT),
|
m_listeningPort(LISTENTCPPORT),
|
||||||
m_tcpSocket(NULL)
|
m_tcpSocket(NULL)
|
||||||
{
|
{
|
||||||
// Iniciamos la lista de estatus de layer
|
/* // Iniciamos la lista de estatus de layer
|
||||||
LayerStatus layermodel;
|
LayerStatus layermodel;
|
||||||
m_layers.clear();
|
m_layers.clear();
|
||||||
int i;
|
int i;
|
||||||
|
@ -54,24 +45,29 @@ msex::msex(QObject *parent)
|
||||||
}
|
}
|
||||||
// Variables para el buffer de LSTA
|
// Variables para el buffer de LSTA
|
||||||
m_bufferLen = 0x00;
|
m_bufferLen = 0x00;
|
||||||
m_buffer = NULL;
|
m_buffer = NULL;*/
|
||||||
m_pathmedia.clear();
|
// Timer for frame preview
|
||||||
|
m_timer = new QTimer(this);
|
||||||
|
Q_CHECK_PTR(m_timer);
|
||||||
|
m_timer->setInterval(250);
|
||||||
// Inicio del TCP Server
|
// Inicio del TCP Server
|
||||||
m_tcpServer = new QTcpServer(this);
|
m_tcpServer = new QTcpServer(this);
|
||||||
Q_CHECK_PTR(m_tcpServer);
|
Q_CHECK_PTR(m_tcpServer);
|
||||||
|
m_media = parent->m_media;
|
||||||
if (!m_tcpServer)
|
if (!m_tcpServer)
|
||||||
qWarning("error TCP Server no creado");
|
qWarning("error TCP Server no creado");
|
||||||
if (!m_tcpServer->listen(QHostAddress::Any, LISTENTCPPORT))
|
if (!m_tcpServer->listen(QHostAddress::Any, LISTENTCPPORT))
|
||||||
{
|
{
|
||||||
qWarning("error creando tcpServer");
|
qWarning("error creando tcpServer");
|
||||||
}
|
}
|
||||||
connect(m_tcpServer, SIGNAL(newConnection()),
|
connect(m_tcpServer, SIGNAL(newConnection()),this, SLOT(newPeer()));
|
||||||
this, SLOT(newPeer()));
|
m_citp = new CITPLib(this);
|
||||||
// Timer for frame preview
|
Q_CHECK_PTR(m_citp);
|
||||||
n_timer = new QTimer(this);
|
if (!m_citp->createPeerInformationSocket(NAME, STATE, 0x000000))
|
||||||
Q_CHECK_PTR(n_timer);
|
{
|
||||||
|
qWarning() << tr("msex|") << "CreatePeerInformationSocket failed" ;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Propiedades de clase
|
// Propiedades de clase
|
||||||
|
|
||||||
msex::~msex()
|
msex::~msex()
|
||||||
|
@ -79,7 +75,7 @@ msex::~msex()
|
||||||
if (m_tcpServer)
|
if (m_tcpServer)
|
||||||
m_tcpServer->close();
|
m_tcpServer->close();
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
QString msex::peerName() const
|
QString msex::peerName() const
|
||||||
{
|
{
|
||||||
return m_peerName;
|
return m_peerName;
|
||||||
|
@ -99,7 +95,7 @@ quint16 msex::peerListeningPort() const
|
||||||
{
|
{
|
||||||
return m_listeningPort;
|
return m_listeningPort;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
void msex::newPeer()
|
void msex::newPeer()
|
||||||
{
|
{
|
||||||
if (m_tcpSocket != NULL) {return;}
|
if (m_tcpSocket != NULL) {return;}
|
||||||
|
@ -107,21 +103,21 @@ void msex::newPeer()
|
||||||
connect(m_tcpSocket, SIGNAL(readyRead()),
|
connect(m_tcpSocket, SIGNAL(readyRead()),
|
||||||
this, SLOT(handleReadyRead()));
|
this, SLOT(handleReadyRead()));
|
||||||
// Ahora tenemos que mandar un Sinf para MSEX 1.1 y 1.0
|
// 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);
|
int bufferLen = sizeof(struct CITP_MSEX_10_SINF);
|
||||||
unsigned char * buffer = PacketCreator::createSINFPacket(bufferLen);
|
unsigned char * buffer = PacketCreator::createSINFPacket(bufferLen);
|
||||||
if (!buffer)
|
if (!buffer)
|
||||||
{
|
{
|
||||||
qDebug() << "msex::new peer:createSINFPacket() failed";
|
qDebug() << "msex::new peer| CreateSINFPacket() failed";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Mandamos el paquete
|
// Mandamos el paquete
|
||||||
if (!msex::sendPacket(buffer, bufferLen))
|
if (!msex::sendPacket(buffer, bufferLen))
|
||||||
{
|
{
|
||||||
qDebug() << "msex::new peer: Send SInf Message failed";
|
qDebug() << "msex::new peer| Send SInf Message failed";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
qDebug() << "msex::new peer: SInf Sent...";
|
qDebug() << "msex| SInf Sent";*/
|
||||||
return;
|
return;
|
||||||
/* Iniciamos el layer Status
|
/* Iniciamos el layer Status
|
||||||
// Creamos un paquete LSTA
|
// Creamos un paquete LSTA
|
||||||
|
@ -203,12 +199,12 @@ bool msex::sendPacket(const unsigned char *buffer, int bufferLen)
|
||||||
}
|
}
|
||||||
if (QAbstractSocket::ConnectedState != m_tcpSocket->state())
|
if (QAbstractSocket::ConnectedState != m_tcpSocket->state())
|
||||||
{
|
{
|
||||||
qDebug() << "msex::sendPacket() - Socket not connected";
|
qDebug() << tr("msex::sendPacket|") << "Socket not connected";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (bufferLen != m_tcpSocket->write((const char*)buffer, bufferLen))
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
delete buffer;
|
delete buffer;
|
||||||
|
@ -350,25 +346,29 @@ void msex::parseGELIPacket(const QByteArray &byteArray)
|
||||||
struct CITP_MSEX_11_GELI *geliPacket = (struct CITP_MSEX_11_GELI*)data;
|
struct CITP_MSEX_11_GELI *geliPacket = (struct CITP_MSEX_11_GELI*)data;
|
||||||
if (geliPacket->LibraryType != 0x01)
|
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;
|
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
|
// Creamos un paquete ELin
|
||||||
int bufferLen = sizeof(struct CITP_MSEX_ELIn);
|
int bufferLen = sizeof(struct CITP_MSEX_ELIn);
|
||||||
unsigned char * buffer = PacketCreator::createELINPacket(m_media, bufferLen);
|
unsigned char * buffer = PacketCreator::createELINPacket(m_media, bufferLen);
|
||||||
if (!buffer)
|
if (!buffer)
|
||||||
{
|
{
|
||||||
qDebug() << "parseGELIPacket:createELINPacket() failed";
|
qWarning() << "msex|"<< "createELINPacket failed";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mandamos el paquete
|
// Mandamos el paquete
|
||||||
if (!msex::sendPacket(buffer, bufferLen))
|
if (!msex::sendPacket(buffer, bufferLen))
|
||||||
{
|
{
|
||||||
qDebug() << "parseGELIPacket: Send ELin Message failed";
|
qWarning() << "msex:parseGELIPacket|" << "Send ELin Message failed";
|
||||||
return;
|
} else { qDebug() << "msex|" << "parseGELIPacket finish ok. ELin Sent";
|
||||||
}
|
}
|
||||||
qDebug() << "parseGELIPacket finish ok. ELin Sent...";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void msex::parseGEINPacket(const QByteArray &byteArray)
|
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;
|
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;
|
qDebug() << "GEIn arrives: Elemet count:" << geinPacket->ElementCount << "Libray Id:" << geinPacket->LibraryId << "Library Type:" << geinPacket->LibraryType;
|
||||||
int bufferLen = sizeof (struct CITP_MSEX_10_MEIn);
|
int bufferLen = sizeof (struct CITP_MSEX_10_MEIn);
|
||||||
if (!(geinPacket->LibraryId < m_media.size())) {
|
if (!(geinPacket->LibraryId < m_media->size())) {
|
||||||
qDebug() << "Library ID exceeds size list";
|
qDebug() << "msex|" << "Library ID exceeds size list";
|
||||||
/*unsigned char * buffer = PacketCreator::createMEINPacket(m_media.at(geinPacket->LibraryId),bufferLen);
|
/*unsigned char * buffer = PacketCreator::createMEINPacket(m_media.at(geinPacket->LibraryId),bufferLen);
|
||||||
if (!buffer)
|
if (!buffer)
|
||||||
{
|
{
|
||||||
|
@ -395,16 +395,16 @@ void msex::parseGEINPacket(const QByteArray &byteArray)
|
||||||
}
|
}
|
||||||
|
|
||||||
else {
|
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)
|
if (!buffer)
|
||||||
{
|
{
|
||||||
qDebug() << "parseGEINPacket:createMEINPacket() failed";
|
qWarning() << "msex|" << "parseGEINPacket:createMEINPacket() failed";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Mandamos el paquete
|
// Mandamos el paquete
|
||||||
if (!msex::sendPacket(buffer, bufferLen))
|
if (!msex::sendPacket(buffer, bufferLen))
|
||||||
{
|
{
|
||||||
qDebug() << "parseGEINPacket: Send MEIn Message failed";
|
qWarning() << "msex|" << "parseGEINPacket: Send MEIn Message failed";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -421,28 +421,28 @@ void msex::parseGETHPacket(const QByteArray &byteArray)
|
||||||
{
|
{
|
||||||
const char *data = byteArray.constData();
|
const char *data = byteArray.constData();
|
||||||
struct CITP_MSEX_10_GETh *gethPacket = (struct CITP_MSEX_10_GETh*)data;
|
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() << "msex|" << "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|" << "Library Number:"<<gethPacket->LibraryNumber<<"Element COunt:"<<gethPacket->ElementCount<<"ElementNumber:"<<gethPacket->ElementNumber;
|
||||||
int bufferLen = sizeof (struct CITP_MSEX_10_ETHN);
|
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";
|
qDebug() << "Library ID exceeds size list";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
MediaLibrary mediai = m_media.at(gethPacket->LibraryNumber);
|
MediaLibrary mediai = m_media->at(gethPacket->LibraryNumber);
|
||||||
if (mediai.m_ElementCount <= gethPacket->ElementNumber){
|
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;
|
return;
|
||||||
}
|
}
|
||||||
unsigned char * buffer = PacketCreator::createETHNPacket(m_pathmedia, mediai, gethPacket->ElementNumber, bufferLen);
|
unsigned char * buffer = PacketCreator::createETHNPacket(mediai, gethPacket->ElementNumber, bufferLen);
|
||||||
if (!buffer)
|
if (!buffer)
|
||||||
{
|
{
|
||||||
qDebug() << "parseGETHPacket:createETHNPacket() failed";
|
qWarning() << "msex|"<< "parseGETHPacket:createETHNPacket() failed";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Mandamos el paquete
|
// Mandamos el paquete
|
||||||
if (!msex::sendPacket(buffer, bufferLen))
|
if (!msex::sendPacket(buffer, bufferLen))
|
||||||
{
|
{
|
||||||
qDebug() << "parseGETHPacket: Send ETHN Message failed";
|
qWarning() << "msex|" <<"parseGETHPacket: Send ETHN Message failed";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -454,13 +454,13 @@ void msex::parseGVSRPacket()
|
||||||
const char * buffer = PacketCreator::createVSRCPacket(bufferLen);
|
const char * buffer = PacketCreator::createVSRCPacket(bufferLen);
|
||||||
if (!buffer)
|
if (!buffer)
|
||||||
{
|
{
|
||||||
qDebug() << "parseGVSRacket:createVSRCPacket() failed";
|
qWarning() << "msex|"<<"parseGVSRacket:createVSRCPacket() failed";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Mandamos el paquete
|
// Mandamos el paquete
|
||||||
if (!msex::sendPacket(buffer, bufferLen))
|
if (!msex::sendPacket(buffer, bufferLen))
|
||||||
{
|
{
|
||||||
qDebug() << "parseGVSRPacket: Send VRSC Message failed";
|
qWarning() << "msex|"<<"parseGVSRPacket: Send VRSC Message failed";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
delete buffer;
|
delete buffer;
|
||||||
|
@ -472,9 +472,9 @@ void msex::parseRQSTPacket(const QByteArray &byteArray)
|
||||||
struct CITP_MSEX_RqSt *Packet = (struct CITP_MSEX_RqSt*)data;
|
struct CITP_MSEX_RqSt *Packet = (struct CITP_MSEX_RqSt*)data;
|
||||||
// Here we need start the streaming MagicQ 88x64 RGB8 1 FPS
|
// Here we need start the streaming MagicQ 88x64 RGB8 1 FPS
|
||||||
// Iniciamos el timer
|
// Iniciamos el timer
|
||||||
if (!n_timer->isActive()) {
|
if (!m_timer->isActive()) {
|
||||||
n_timer->setInterval(1000 * Packet->fps);
|
m_timer->setInterval(1000 * Packet->fps);
|
||||||
n_timer->start();
|
m_timer->start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -490,7 +490,7 @@ bool msex::sendNACK(quint32 header)
|
||||||
|
|
||||||
if (!sendPacket(buffer, bufferLen))
|
if (!sendPacket(buffer, bufferLen))
|
||||||
{
|
{
|
||||||
qDebug() << "sendNACK failed";
|
qWarning() << "msex|"<< "sendNACK failed";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -498,111 +498,51 @@ bool msex::sendNACK(quint32 header)
|
||||||
|
|
||||||
// Fin de mensajes MSEX
|
// Fin de mensajes MSEX
|
||||||
|
|
||||||
bool msex::updatemedia()
|
void msex::sendFrame(QImage image){
|
||||||
{
|
m_timer->stop();
|
||||||
qDebug()<<"Actualizando biblioteca de medias en " << m_pathmedia;
|
if (!image.byteCount()) {
|
||||||
QDir dir;
|
qWarning()<<"msex|" << "sendFrame: Can not capture FrameBuffer";
|
||||||
dir.cd(m_pathmedia);
|
return;
|
||||||
m_media.clear();
|
|
||||||
// Miramos cuantas librerías tenemos en /video
|
|
||||||
if (!dir.cd("video"))
|
|
||||||
{ qWarning("Cannot cd to the video directory");
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
dir.setFilter(QDir::Dirs | QDir::NoSymLinks | QDir::NoDotAndDotDot);
|
int bufferLen = image.byteCount();
|
||||||
QFileInfoList filelist = dir.entryInfoList();
|
int bufferLenTot = sizeof(struct CITP_MSEX_10_StFr ) + bufferLen;
|
||||||
dir.setFilter(QDir::Files);
|
uchar * buffer = new uchar[bufferLenTot];
|
||||||
QFileInfo fileInfo;
|
memset(buffer, 0, bufferLenTot);
|
||||||
struct MediaLibrary mediai;
|
CITP_MSEX_10_StFr *packet = (CITP_MSEX_10_StFr *)buffer;
|
||||||
int i;
|
// CITP header
|
||||||
for (i = 0; i < filelist.size(); ++i) {
|
packet->CITPMSEXHeader.CITPHeader.Cookie = COOKIE_CITP;
|
||||||
fileInfo = filelist.at(i);
|
packet->CITPMSEXHeader.CITPHeader.VersionMajor = 0x01;
|
||||||
QString name = fileInfo.baseName();
|
packet->CITPMSEXHeader.CITPHeader.VersionMinor = 0x00;
|
||||||
dir.cd(fileInfo.baseName());
|
packet->CITPMSEXHeader.CITPHeader.Reserved[0] = 0x00;
|
||||||
mediai.m_Id = i;
|
packet->CITPMSEXHeader.CITPHeader.Reserved[1] = 0x00;
|
||||||
mediai.m_DMXRangeMax = i;
|
packet->CITPMSEXHeader.CITPHeader.MessageSize = bufferLenTot;
|
||||||
mediai.m_DMXRangeMin = i;
|
packet->CITPMSEXHeader.CITPHeader.MessagePartCount = 0x01;
|
||||||
mediai.m_Name = name;
|
packet->CITPMSEXHeader.CITPHeader.MessagePart = 0x00; // XXX - doc says 0-based?
|
||||||
// mediai.m_LibraryCount = 0; msex 1.2
|
packet->CITPMSEXHeader.CITPHeader.ContentType = COOKIE_MSEX;
|
||||||
mediai.m_ElementCount = dir.count();
|
// MSEX header
|
||||||
mediai.m_MediaInformation = getMediaInformation(dir);
|
packet->CITPMSEXHeader.ContentType = COOKIE_MSEX_STFR;
|
||||||
dir.cdUp();
|
packet->CITPMSEXHeader.VersionMajor = 0x01;
|
||||||
m_media.append(mediai);
|
packet->CITPMSEXHeader.VersionMinor = 0x00;
|
||||||
}
|
//STFR Content
|
||||||
/*
|
packet->FrameBufferSize = bufferLen;
|
||||||
// Miramos las librerías en /imagenes
|
packet->FrameFormat = 943867730;
|
||||||
i++;
|
packet->FrameHeight = 64;
|
||||||
dir.cd(m_pathmedia);
|
packet->FrameWidth = 88;
|
||||||
if (!dir.cd("image"))
|
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");
|
qWarning() << "msex|" << "sendFrame:create packet failed";
|
||||||
return false;
|
return;
|
||||||
}
|
}
|
||||||
mediai.m_Id = i;
|
// Mandamos el paquete
|
||||||
mediai.m_DMXRangeMax = i;
|
if (!sendPacket(buffer, bufferLenTot))
|
||||||
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))
|
|
||||||
{
|
{
|
||||||
qDebug()<<("CreatePeerInformationSocket failed");
|
qWarning() << "msex|" <<"sendFrame: send packet failed";
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
m_timer->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
48
src/msex.h
|
@ -22,43 +22,37 @@
|
||||||
#define MSEX_H
|
#define MSEX_H
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QHostAddress>
|
#include <QtNetwork/QHostAddress>
|
||||||
|
#include <QtNetwork/QTcpServer>
|
||||||
|
#include <QtNetwork/QTcpSocket>
|
||||||
|
#include <QtDebug>
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
#include "MSEXDefines.h"
|
#include "MSEXDefines.h"
|
||||||
|
#include "olainterface.h"
|
||||||
|
#include "citp-lib.h"
|
||||||
|
#include "libremediaserver.h"
|
||||||
|
#include "PacketCreator.h"
|
||||||
|
|
||||||
class QTimer;
|
//class olaInterface;
|
||||||
class QTcpSocket;
|
|
||||||
class QTcpServer;
|
|
||||||
class QDir;
|
|
||||||
class CITPLib;
|
|
||||||
|
|
||||||
class msex : public QObject
|
class msex : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
msex(QObject *parent);
|
msex(olaInterface * parent);
|
||||||
virtual ~msex();
|
virtual ~msex();
|
||||||
// virtual QString peerName() const;
|
|
||||||
// virtual QString peerState() const;
|
|
||||||
// virtual QString peerHost() const;
|
|
||||||
// virtual quint16 peerListeningPort() const;
|
|
||||||
// void previewLayer1();
|
|
||||||
|
|
||||||
bool CreateMSEXSocket();
|
virtual QString peerName() const;
|
||||||
bool updatemedia();
|
virtual QString peerState() const;
|
||||||
virtual void setpath(QString path); // path to media dir
|
virtual QString peerHost() const;
|
||||||
void startCitp(quint32 ipadd); // Start the Peer Informatio Socket
|
virtual quint16 peerListeningPort() const;
|
||||||
bool sendPacket(const unsigned char *buffer, int bufferLen);
|
|
||||||
|
|
||||||
QTimer *n_timer; // Frame Request
|
QTimer *m_timer; // Frame Request
|
||||||
QList<LayerStatus> m_layers;
|
|
||||||
QList<MediaLibrary> m_media;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
CITPLib *m_citp; // CITP Peer. PLOc and frame transmit
|
CITPLib *m_citp; // CITP Peer. Ploc and frame transmit
|
||||||
QString m_pathmedia;
|
QList<MediaLibrary> * m_media; // Link to the MediaLibrary in parent.
|
||||||
unsigned char * m_buffer;
|
unsigned char * m_buffer;
|
||||||
int m_bufferLen;
|
int m_bufferLen;
|
||||||
QString m_peerState;
|
QString m_peerState;
|
||||||
|
@ -68,6 +62,9 @@ protected:
|
||||||
QTcpServer *m_tcpServer;
|
QTcpServer *m_tcpServer;
|
||||||
QTcpSocket *m_tcpSocket;
|
QTcpSocket *m_tcpSocket;
|
||||||
|
|
||||||
|
QList<LayerStatus> m_layers;
|
||||||
|
|
||||||
|
bool sendPacket(const unsigned char *buffer, int bufferLen);
|
||||||
bool sendPacket(const char *buffer, int bufferLen);
|
bool sendPacket(const char *buffer, int bufferLen);
|
||||||
bool sendNACK(quint32 header);
|
bool sendNACK(quint32 header);
|
||||||
|
|
||||||
|
@ -86,12 +83,15 @@ protected:
|
||||||
void parseGELNPacket(const QByteArray &byteArray);
|
void parseGELNPacket(const QByteArray &byteArray);
|
||||||
void parseRQSTPacket(const QByteArray &byteArray);
|
void parseRQSTPacket(const QByteArray &byteArray);
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
QList<MediaInformation> getMediaInformation(QDir dir);
|
QList<MediaInformation> getMediaInformation(QDir dir);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|
||||||
|
void sendFrame(QImage image);
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
|
|
||||||
void handleReadyRead();
|
void handleReadyRead();
|
||||||
|
|
|
@ -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>.
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
*******************************************************************************
|
|
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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;
|
|
|
@ -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
|
|
||||||
|
|
|
@ -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
|
@ -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
|
@ -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
|
||||||
|
|
|
@ -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).
|
|
|
@ -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.
|
|
|
@ -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
|
|
|
@ -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.
|
|
979
src/pd-0.44-2/aclocal.m4
vendored
|
@ -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])
|
|
|
@ -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
|
|
|
@ -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:
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
|
@ -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' )
|
|
||||||
);
|
|
||||||
|
|
20990
src/pd-0.44-2/configure
vendored
|
@ -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)])])
|
|
||||||
|
|
||||||
|
|
|
@ -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/
|
|
Before Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 1 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 6 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 2 KiB |
Before Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 5.6 KiB |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 7.2 KiB |
Before Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 7.6 KiB |
Before Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 2 KiB |
Before Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 5.1 KiB |
Before Width: | Height: | Size: 7.4 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 38 KiB |
|
@ -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>
|
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
|
|
@ -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>
|
|
|
@ -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 <n> -- 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 <n> -- specify size of audio I/O buffer in msec
|
|
||||||
-blocksize <n> -- specify audio I/O block size in sample frames
|
|
||||||
-sleepgrain <n> -- 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 <n> -- obsolete: use -audiodev
|
|
||||||
-32bit -- (probably obsolete) -- use 32 bit OSS extension
|
|
||||||
-alsaadd <dev> -- 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 <path> -- add to file search path
|
|
||||||
-nostdpath -- don't search standard ("extra") directory
|
|
||||||
-stdpath -- search standard directory (true by default)
|
|
||||||
-helppath <path> -- add to help search path
|
|
||||||
-open <file> -- open file(s) on startup
|
|
||||||
-lib <file> -- load object library(s)
|
|
||||||
-font <n> -- 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 <n> -- specify debug level
|
|
||||||
-noloadbang -- suppress all loadbangs
|
|
||||||
-stderr -- send printout to standard error instead of GUI
|
|
||||||
-nogui -- suppress starting the GUI
|
|
||||||
-guiport <n> -- 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>
|
|
||||||
|
|
||||||
|
|
|
@ -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>
|
|
|
@ -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.
|
|
||||||
|
|
|
@ -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;
|
|
|
@ -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;
|
|
|
@ -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;
|
|
|
@ -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;
|
|
|
@ -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;
|
|