Software für das Zusammenfassen und Projizieren auf Leinwand mehrerer Netzkunstarbeiten (REUPLOAD der Repository von ende 2019)
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

3 år sedan
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. }