Software für das Zusammenfassen und Projizieren auf Leinwand mehrerer Netzkunstarbeiten (REUPLOAD der Repository von ende 2019)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

sketch.pde 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520
  1. import processing.video.*;
  2. import ddf.minim.*;
  3. PGraphics tram, street, keymaker, ste, deaths1, deaths2, gender, overdose;
  4. PImage tram_ph, street_ph, keymaker_ph, ste_ph, deaths1_ph, deaths2_ph, gender_ph, overdose_ph;
  5. PImage[] imgs = new PImage[3575];
  6. PImage[] gender_imgs = new PImage[12];
  7. //PImage[] imgs = new PImage[8];
  8. String[] listFileNames(String dir) {
  9. File file = new File(dir);
  10. if (file.isDirectory()) {
  11. String names[] = file.list();
  12. return names;
  13. } else {
  14. return null;
  15. }
  16. }
  17. String[] imagenames;
  18. boolean earthSaved;
  19. String earthText = "Click\nto Save\nthe Earth";
  20. PImage ste_frame;
  21. Minim m;
  22. AudioPlayer s1, s2;
  23. int overdoseTime = 150;
  24. Movie ste_mov;
  25. Movie street_mov, street_loop, keymaker_mov, tram_mov;
  26. Movie gender_mov;
  27. Projection[] projections = new Projection[8];
  28. int activeProjection;
  29. int resetTimer;
  30. int resetTime = 240000; //5 minutes in MS
  31. void startEnd() {
  32. if (millis() > resetTimer + resetTime) {
  33. reset();
  34. resetTimer = millis();
  35. }
  36. }
  37. void reset() {
  38. m.stop();
  39. m = new Minim(this);
  40. s1 = m.loadFile(dataPath("")+"/ste/sound.mp3", 1024);
  41. s2 = m.loadFile(dataPath("")+"/street/mwen_meer.mp3", 1024);
  42. tram_mov.stop();
  43. street_mov.stop();
  44. street_loop.stop();
  45. //gender_mov.stop();
  46. keymaker_mov.stop();
  47. keymaker_mov.play();
  48. keymaker_mov.jump(0);
  49. keymaker_mov.pause();
  50. streetLevel = 1;
  51. tramLife = true;
  52. overDoseLife = true;
  53. for (int i = 0; i < projections.length; i++) {
  54. projections[i].invisibility = 255;
  55. }
  56. earthSaved = false;
  57. earthText = "Click\nto Save\nthe Earth";
  58. projections[2].activate();
  59. level = 1;
  60. }
  61. int level = 0;
  62. int streetLevel = 1;
  63. void mouseClicked() {
  64. //projections[activeProjection].activate();
  65. }
  66. void mousePressed() {
  67. switch(level) {
  68. case(0):
  69. keymaker_mov.play();
  70. keymaker_mov.pause();
  71. projections[2].activate();
  72. level++;
  73. break;
  74. case(1):
  75. keymaker_mov.play();
  76. break;
  77. case(2):
  78. level++;
  79. break;
  80. case(3):
  81. s1.play();
  82. earthText = "Earth Saved";
  83. earthSaved = true;
  84. level++;
  85. break;
  86. case(4):
  87. projections[3].deactivate();
  88. street_mov.play();
  89. //street_mov.jump(50);
  90. projections[1].activate();
  91. s2.loop();
  92. level++;
  93. break;
  94. case(6):
  95. street_mov.play();
  96. break;
  97. case(7):
  98. projections[1].deactivate();
  99. s2.setVolume(0.8);
  100. level+=2;
  101. projections[4].activate();
  102. projections[5].activate();
  103. break;
  104. //case(8):
  105. //level++;
  106. //break;
  107. case(9):
  108. level++;
  109. projections[4].deactivate();
  110. projections[5].deactivate();
  111. tram_mov.play();
  112. tram_mov.pause();
  113. projections[0].activate();
  114. break;
  115. case(10):
  116. tram_mov.play();
  117. break;
  118. case(12):
  119. keymaker_mov.play();
  120. keymaker_mov.jump(0);
  121. keymaker_mov.pause();
  122. for (int i = 0; i < projections.length; i++) {
  123. projections[i].activate();
  124. }
  125. level++;
  126. break;
  127. case(13):
  128. reset();
  129. break;
  130. default:
  131. break;
  132. }
  133. resetTimer = millis();
  134. }
  135. void mouseReleased() {
  136. switch(level) {
  137. case(1):
  138. keymaker_mov.pause();
  139. if (keymaker_mov.time()>9.4) {
  140. keymaker_mov.stop();
  141. level+=2;
  142. projections[3].activate();
  143. ste_mov.loop();
  144. }
  145. break;
  146. case(6):
  147. if (street_mov.time() < 62.8) {
  148. street_mov.pause();
  149. } else {
  150. street_mov.stop();
  151. street_loop.loop();
  152. streetLevel = 2;
  153. level++;
  154. }
  155. break;
  156. case(10):
  157. if (!playTram) tram_mov.pause();
  158. break;
  159. default:
  160. break;
  161. }
  162. resetTimer = millis();
  163. }
  164. //VideoControl tramControl, streetControl, keymakerControl;
  165. //Projection tram, street, keymaker;
  166. void setup() {
  167. //size(1920, 1080);
  168. fullScreen();
  169. //pg_tram = createGraphics(540, 540);
  170. m = new Minim(this);
  171. imagenames = listFileNames(dataPath("") + "/ich");
  172. for (int i = 0; i < imgs.length; i++) {
  173. imgs[i] = loadImage(dataPath("") + "/ich/" + imagenames[i]);
  174. }
  175. street = createGraphics(540, 540);
  176. street_mov = new Movie(this, dataPath("") + "/street.mp4");
  177. street_loop = new Movie(this, dataPath("") + "/streetloop.mp4");
  178. s2 = m.loadFile(dataPath("")+"/street/mwen_meer.mp3", 1024);
  179. //street_mov.loop();
  180. keymaker = createGraphics(540, 540);
  181. keymaker_mov = new Movie(this, dataPath("") + "/keymaker.mp4");
  182. //street_mov.loop();
  183. tram = createGraphics(540, 540);
  184. tram_mov = new Movie(this, dataPath("") + "/tram.mp4");
  185. ste = createGraphics(540, 540);
  186. ste.beginDraw();
  187. ste.textAlign(CENTER);
  188. ste.imageMode(CENTER);
  189. ste.textSize(ste.width/7);
  190. ste.endDraw();
  191. s1 = m.loadFile(dataPath("")+"/ste/sound.mp3", 1024);
  192. ste_frame = loadImage(dataPath("") + "/ste/Golden-Round-Frame-PNG.png");
  193. ste_mov = new Movie(this, dataPath("") + "/ste/video.mp4");
  194. deaths1 = createGraphics(270, 270);
  195. deaths1.beginDraw();
  196. deaths1.noStroke();
  197. deaths1.endDraw();
  198. deaths2 = createGraphics(270, 270);
  199. deaths2.beginDraw();
  200. deaths2.noStroke();
  201. deaths2.endDraw();
  202. gender = createGraphics(270, 270);
  203. //gender_mov = new Movie(this, dataPath("") + "/gender.mp4");
  204. for (int i = 0; i < gender_imgs.length; i++) {
  205. gender_imgs[i] = loadImage(dataPath("") + "/gender/" + i + ".png");
  206. }
  207. overdose = createGraphics(270, 270);
  208. overdose.beginDraw();
  209. overdose.imageMode(CENTER);
  210. overdose.endDraw();
  211. projections[0] = new Projection(0, 0, 0, 540, 540, tram);
  212. projections[1] = new Projection(1, 540, 0, 540, 540, street);
  213. projections[2] = new Projection(2, 1080, 0, 540, 540, keymaker);
  214. projections[3] = new Projection(3, 0, 540, 540, 540, ste);
  215. projections[4] = new Projection(4, 540, 540, 270, 270, deaths1);
  216. projections[5] = new Projection(5, 810, 540, 270, 270, deaths2);
  217. projections[6] = new Projection(6, 540, 810, 270, 270, gender);
  218. projections[7] = new Projection(7, 810, 810, 270, 270, overdose);
  219. //tram_ph = loadImage(dataPath("") + "/placeholders/tram.png");
  220. //street_ph = loadImage(dataPath("") + "/placeholders/tram.png");
  221. //keymaker_ph = loadImage(dataPath("") + "/placeholders/keymaker.png");
  222. //ste_ph = loadImage(dataPath("") + "/placeholders/ste.png");
  223. deaths1_ph = loadImage(dataPath("") + "/placeholders/deaths1.png");
  224. deaths2_ph = loadImage(dataPath("") + "/placeholders/deaths2.png");
  225. gender_ph = loadImage(dataPath("") + "/placeholders/gender.png");
  226. overdose_ph = loadImage(dataPath("") + "/placeholders/overdose.png");
  227. //projections[3].activate();
  228. for (int i = 0; i < stars.length; i ++) {
  229. stars[i] = new Star(deaths1);
  230. stars2[i] = new Star(deaths2);
  231. }
  232. frameRate(30);
  233. keymaker_mov.play();
  234. keymaker_mov.pause();
  235. projections[2].activate();
  236. level++;
  237. }
  238. boolean pauseStreet;
  239. boolean playTram;
  240. boolean tramLife = true;
  241. double tramWait;
  242. boolean playOverDose;
  243. boolean overDoseLife = true;
  244. double overDoseWait;
  245. void overDoseCooldown() {
  246. if (overDoseLife) {
  247. overDoseWait = millis();
  248. overDoseLife = false;
  249. }
  250. if (millis() > overDoseWait + 15000) {
  251. playOverDose = false;
  252. level++;
  253. projections[7].deactivate();
  254. projections[6].activate();
  255. //gender_mov.play();
  256. //gender_mov.pause();
  257. }
  258. }
  259. void tramCooldown() {
  260. if (tramLife) {
  261. tramWait = millis();
  262. tramLife = false;
  263. }
  264. if (millis() > tramWait + 7000) {
  265. playTram = false;
  266. level++;
  267. projections[0].deactivate();
  268. projections[7].activate();
  269. playOverDose = true;
  270. }
  271. }
  272. void movieEvent(Movie m) {
  273. m.read();
  274. if (m == street_mov && m.time() > 53 && level == 5) {
  275. pauseStreet = true;
  276. }
  277. if (m == tram_mov && m.time() > 4 && level == 10) {
  278. playTram = true;
  279. }
  280. }
  281. /*
  282. if(level==5){
  283. if(street_mov.time() > 59){
  284. street_mov.pause();
  285. }
  286. }
  287. */
  288. float rotator;
  289. int randImgNo;
  290. int lag, previous;
  291. float imgSizeRatio = 0.0;
  292. int mousePrevious;
  293. void draw() {
  294. /*
  295. if (level == 12 || level == 13) {
  296. if (mouseX / 100 != mousePrevious) {
  297. float genderPos = map(mouseX, 0, width, 0, gender_mov.duration());
  298. gender_mov.play();
  299. gender_mov.jump(genderPos);
  300. gender_mov.pause();
  301. }
  302. mousePrevious = mouseX / 100;
  303. }
  304. */
  305. if (playTram) {
  306. tramCooldown();
  307. }
  308. if (playOverDose) {
  309. overDoseCooldown();
  310. }
  311. if (pauseStreet) {
  312. street_mov.jump(59.1);
  313. street_mov.pause();
  314. level++;
  315. pauseStreet = false;
  316. }
  317. background(0);
  318. // TRAM
  319. tram.beginDraw();
  320. tram.image(tram_mov, 0, 0, tram.width, tram.height);
  321. tram.endDraw();
  322. // STREET
  323. street.beginDraw();
  324. if (streetLevel == 1)
  325. street.image(street_mov, 0, 0, street.width, street.height);
  326. else if (streetLevel == 2)
  327. street.image(street_loop, 0, 0, street.width, street.height);
  328. street.endDraw();
  329. // KEYMAKER
  330. keymaker.beginDraw();
  331. keymaker.image(keymaker_mov, 0, 0, keymaker.width, keymaker.height);
  332. keymaker.endDraw();
  333. // SAVE THE EARTH
  334. ste.beginDraw();
  335. ste.clear();
  336. ste.image(ste_mov, ste.width/2, ste.height/2, ste.width/1.777, ste.height/1.777);
  337. ste.fill(255);
  338. if (earthSaved) {
  339. ste.pushMatrix();
  340. ste.translate(ste.width/2, ste.height/2);
  341. ste.rotate(rotator);
  342. ste.image(ste_frame, 0, 0, ste.width, ste.height);
  343. ste.popMatrix();
  344. rotator+=0.01;
  345. }
  346. int steY = ste.height/2-int(!earthSaved)*100;
  347. for (int x = -1; x < 2; x++) {
  348. ste.text(earthText, ste.width/2+x, steY);
  349. ste.text(earthText, ste.width/2, steY);
  350. }
  351. if (earthSaved) {
  352. ste.fill(250, 230, 80);
  353. }
  354. ste.text(earthText, ste.width/2, steY);
  355. //ste.text(earthText, ste.width/2, ste.height/2-int(!earthSaved)*100);
  356. ste.endDraw();
  357. // DEATHS 1
  358. deaths1.beginDraw();
  359. deaths1.background(255, 165, 15);
  360. paintStars();
  361. deaths1.endDraw();
  362. // DEATHS 2
  363. deaths2.beginDraw();
  364. deaths2.background(255, 165, 15);
  365. paintStars2();
  366. deaths2.endDraw();
  367. // GENDER
  368. gender.beginDraw();
  369. //gender.image(gender_mov, 0, 0, gender.width, gender.height);
  370. gender.image(gender_imgs[int(map(mouseX,0,width,0,gender_imgs.length))], 0, 0, gender.width, gender.height);
  371. gender.endDraw();
  372. // OVERDOSE
  373. int current = millis();
  374. int ellapsed = current - previous;
  375. previous = current;
  376. lag += ellapsed;
  377. while (lag >= overdoseTime) {
  378. randImgNo = (int)(Math.random()*imgs.length);
  379. lag -= overdoseTime;
  380. float minSize = min(imgs[randImgNo].width, imgs[randImgNo].height);
  381. imgSizeRatio = 270.0/minSize;
  382. }
  383. overdose.beginDraw();
  384. overdose.image(imgs[randImgNo], overdose.width/2, overdose.height/2, imgs[randImgNo].width*imgSizeRatio, imgs[randImgNo].height*imgSizeRatio);
  385. overdose.endDraw();
  386. // PROJECTION OVERLAYS
  387. for (int i = 0; i < projections.length; i++) {
  388. projections[i].update();
  389. projections[i].display();
  390. }
  391. startEnd();
  392. }
  393. int currentProjection;
  394. int activationTimer = 2000;
  395. class Projection {
  396. int id, x, y, w, h;
  397. boolean active;
  398. boolean deactivating;
  399. boolean wasActive;
  400. boolean spawned, activating;
  401. int flashBrightness = 255;
  402. int invisibility = 255;
  403. double activationTime;
  404. PGraphics pg;
  405. Projection(int id_, int x_, int y_, int w_, int h_, PGraphics pg_) {
  406. id = id_;
  407. x = x_;
  408. y = y_;
  409. w = w_;
  410. h = h_;
  411. pg = pg_;
  412. }
  413. void activate() {
  414. /*
  415. for (int i = id-1; i >= 0; i--) {
  416. projections[i].deactivate();
  417. }
  418. activeProjection++;
  419. if (activeProjection >= projections.length) {
  420. activeProjection = 0;
  421. }
  422. */
  423. activationTime = millis();
  424. flashBrightness = 255;
  425. activating = true;
  426. active = true;
  427. invisibility = 0;
  428. }
  429. void deactivate() {
  430. active = false;
  431. activating = false;
  432. deactivating = true;
  433. }
  434. void update() {
  435. if (activating) {
  436. flashBrightness -= 10;
  437. if (millis() > activationTime + activationTimer) {
  438. activating = false;
  439. }
  440. }
  441. if (deactivating) {
  442. invisibility +=5;
  443. if (invisibility >= 127) {
  444. deactivating = false;
  445. }
  446. }
  447. }
  448. void display() {
  449. //tint(255);
  450. image(pg, x, y, w, h);
  451. if (activating) {
  452. fill(255, flashBrightness);
  453. } else {
  454. fill(0, invisibility);
  455. }
  456. rect(x, y, w, h);
  457. }
  458. }