在循环中播放PDE文件?

时间:2017-03-08 19:36:17

标签: processing

我还是比较新的Processing。我们正在考虑在一个小型展览的循环中展示我们的加工工作。有没有办法在循环中播放多个PDE?我知道我可以导出为帧然后将它们组装成一个更长的循环Quicktime文件,但我想知道是否有任何方法可以自己播放和循环文件?

此外,对于交互式偏微分方式,呈现它们的最佳方式是什么?我们正在考虑在Processing中运行几台带有PDE的计算机,但是让文件运行20分钟然后打开另一个文件20分钟会很不错。

提前致谢!

1 个答案:

答案 0 :(得分:3)

您应该能够组合使用processing-java command line executable的shell /批处理脚本。

您应该可以通过工具>进行设置。安装"处理-java"

Install processing-java menu item

如果您对bash / batch脚本无法轻松,您甚至可以编写启动处理草图的处理草图

whoa!

使用selectFolder()exec()对此进行了粗略的处理:

final int SKETCH_RUN_TIME = 10000;//10 seconds for each sketch, feel free to change
ArrayList<File> sketches = new ArrayList<File>();

int sketchIndex = 0;

void setup(){
  selectFolder("Select a folder containing Processing sketches:", "folderSelected");
}

void draw(){

}
void nextSketch(){
  //run sketch
  String sketchPath = sketches.get(sketchIndex).getAbsolutePath();
  println("launching",sketchPath);
  Process sketch = exec("/usr/local/bin/processing-java",
       "--sketch="+sketchPath,
       "--present");
  //increment sketch index for next time around (checking the index is still valid, otherwise go back to 0)
  sketchIndex++;
  if(sketchIndex >= sketches.size()){
    sketchIndex = 0;
  }
  //delay is deprecated so you shouldn't use this a lot, but as a proof concept this will do
  delay(SKETCH_RUN_TIME);
  nextSketch();
}

void folderSelected(File selection) {
  if (selection == null) {
    println("No folder ? Ok, maybe another time. Bye! :)");
    exit();
  } else {
    File[] files = selection.listFiles();
    //filter just Processing sketches
    for(int i = 0; i < files.length; i++){
      if(files[i].isDirectory()){
        String folderName = files[i].getName();
        File[] sketchFiles = files[i].listFiles();
        boolean isValidSketch = false;
        //search for a .pde file with the same folder name to check if it's a valid sketch
        for(File f : sketchFiles){
          if(f.getName().equals(folderName+".pde")){
            isValidSketch = true;
            break;
          }
        }
        if(isValidSketch) {
          sketches.add(files[i]);
        }else{
          System.out.println(files[i]+" is not a valid Processing sketch");
        }
      }
    }
    println("sketches found:",sketches);
    nextSketch();
  }
}

对代码进行了评论,因此希望它易于阅读和遵循。 系统将提示您选择包含要运行的草图的文件夹。

注1:我已在我的计算机上使用processing-java路径(/usr/local/bin/processing-java)。如果你在Windows上,这可能会有所不同,你需要改变它。

注2: processing-java命令启动另一个Process,这使得在运行下一个草图之前关闭上一个草图变得棘手。作为一种解决方法,您可以在需要的时间后在每个草图上调用exit()

注3:代码不会递归遍历包含草图的选定文件夹,因此只会执行第一级草图,应忽略更深层次的草图。