Hello! This script only requires a bunch of .mp4s in the data folder. You'll see a collage of 9 videos (or duplicates) in different positions and transparencies. The thing runs ok but even pre-loading the videos at the beginning every time there's a change/swap in one of the videos (around every 4 seconds) the whole thing freezes for a sec, sometimes (try to use mp4s of different sizes).
I tried to use the thread() command in the switching of the videos but nothing happened. I put a println to see the thread but alway show the main thread, I really don't know if I'm doing this ok..
Thanks a LOT for any help!
import processing.video.*;
File path;
String[] files;
int numfiles = 0;
int timer = -5000;
int tcontrol= 2000;
int numVideos=9;
VideoM[] v = new VideoM[numVideos];
Movie[] vv;
void setup(){
size(1920, 1080, P2D);
frameRate(60);
files = files();
numfiles = files.length;
if (numfiles>11) numfiles=11;
loadvideos();
for(int i = 0;i < numVideos;i++){
v[i] = new VideoM();
}
}
void draw() {
background(0);
for(int i = 0; i <numVideos; i++){
v[i].display();
}
if ((millis() - timer) > tcontrol) {
thread("newvideo");
timer = millis();
tcontrol= int(random(2,6))*1000;
}
}
void loadvideos(){
String video;
vv = new Movie[numfiles];
for (int i=0; i<numfiles; i++){
video= files[int(random(numfiles))];
vv[i] = new Movie(this, video);
println ("Loading ", video);
}
}
class VideoM {
Movie m;
String video;
int x;
int y;
int w;
int h;
int alpha;
int alphai;
int fadeout=0;
VideoM() {
genera();
println(numfiles);
m = vv[int(random(numfiles)) ];
m.loop();
// m.volume(random(0.4,0.6));
// m.speed(random(0.6,1.0));
m.jump(random(m.duration()));
//m.play();
}
void genera(){
x=int(random(50, width/2+width/4));
y=int(random(50, height/2+height/4));
w=int(random(280,820));
h=int(w/1.88);
alpha=int(random(100,255));
alphai=0;
}
void display(){
tint(255, alphai);
if (fadeout==0) {
alphai++; if (alphai>alpha) alphai=alpha;
} else { alphai--; if (alphai<0) {alphai=0;fadeout=0;this.newvid();}
}
if (frameCount > 1) { image(m, x, y, w, h); }
}
void cambiavid(){
fadeout=1;
}
void newvid() {
m=null;
int j=int(random(numfiles));
println("cambio: ", j);
m = vv[j];
m.loop();
genera();
m.jump(random(m.duration()));
println(Thread.currentThread());
}
}
void newset(){
for(int i = 0;i < numVideos;i++){
println(i);
v[i].newvid();
}
}
void newvideo(){
int i = int(random(numVideos));
//v[i].nuevovid(this);
v[i].cambiavid();
}
void movieEvent(Movie m) {
m.read();
}
boolean bStop,bColor=true;
boolean bSave=false,bVidO=false;
void keyPressed()
{
int k = keyCode;
// reset all videos
if (key == 'n' || key == 'N') {
newset();
}
}
// load files in data
String[] files(){
// The data path of the folder to look in (write your own)
java.io.File folder = new java.io.File(dataPath(""));
// let's set a filter (which returns true if file's extension is .jpg)
java.io.FilenameFilter pngFilter = new java.io.FilenameFilter() {
public boolean accept(File dir, String name) {
return name.toLowerCase().endsWith(".mp4");
}
};
// list all the folders inside the main directory
String[] listFolders = folder.list(new java.io.FilenameFilter() {
public boolean accept(File current, String name) {
return new File(current, name).isDirectory();
}
});
// list the files in the data folder, passing the filter as parameter
String[] filenames = folder.list(pngFilter);
return(filenames);
}