1

好的,所以我在 Processing 中搞乱了一个简单的 fft 可视化,并认为每次播放不止一首歌会很有趣。最后,我手动添加了 3 首歌曲,并通过鼠标单击使用预定义的字符串在歌曲之间随机更改。我想添加其他计算机音乐,但每次我想在我的草图中添加一首新歌时,我都必须将它的名称复制并粘贴到我的草图中的字符串中。似乎有很多不必要的工作

有没有办法让处理扫描文件夹,识别里面有多少文件,并将所有文件名复制到字符串中?我找到了一个名为 sDrop 的库,用于处理 1.1,它可以让您直接将文件拖放到草图中。但是,在 Processing 的 2+ 版本中似乎不再存在。

这是我当前播放音乐的工作代码的简单版本:

import ddf.minim.spi.*;
import ddf.minim.signals.*;
import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.ugens.*;
import ddf.minim.effects.*;

AudioPlayer player;
Minim minim;

String [] songs = {
  "song1.mp3",
  "song2.mp3",
  "song3.mp3",
};

int index;


void setup() {
  size(100, 100, P3D);
  index = int(random(songs.length));  

  minim = new Minim(this);
  player = minim.loadFile(songs[index]);
  player.play();
}

void draw() {
}


void mouseClicked() {
  index = int(random(songs.length)); 

  player.pause();
  player = minim.loadFile(songs[index]);
  player.play();
}

如果有人有建议或可以指导我找到一个很好的教程,那就太好了。谢谢!

4

2 回答 2

0

假设您在 Java 模式下使用它,那么您可以使用 Java API:https ://docs.oracle.com/javase/8/docs/api/

Java API 包含一个 File 类,其中包含用于读取目录内容的多种方法:https ://docs.oracle.com/javase/8/docs/api/java/io/File.html

像这样的东西:

ArrayList<String> songs = new ArrayList<String>();
File directory = new File("path/to/song/directory/");
for(File f : directory.listFiles()){
   if(!f.isDirectory()){
      songs.add(f.getAbsolutePath());
   }
}

谷歌搜索“目录的java列表文件”将为您带来大量结果。

于 2014-11-24T13:49:35.993 回答
0

只是为了补充凯文的工人的回答:

  1. 尝试使用File.separator而不是“/”或“\”。它做同样的事情,但它会根据您为您使用的操作系统计算出正确的,因此您可以在其他计算机上移动您的草图并且仍然可以工作。
  2. 查看示例 > 主题 > 文件 IO > 目录列表中的处理附带的 Daniel Shiffman
于 2014-11-27T12:39:31.543 回答