我正在尝试编写Java代码,在其中可以选择多个音频文件,并让脚本通过音乐可视化器按选择的顺序播放文件。
我目前可以选择多个文件,但只能循环播放第一个文件。
这是我的代码:
import ddf.minim.*;
import ddf.minim.analysis.*;
import javax.swing.JFileChooser;
import processing.pdf.*;
PImage mouseCursor;
Minim minim;
AudioPlayer player;
AudioMetaData meta;
BeatDetect beat;
FFT fft;
int w;
float rad = 70;
int r = 2000;
void setup() {
beginRecord(PDF, "/Users/Luke/Desktop/Processing Projects and Files/f.pdf");
fullScreen();
JFileChooser chooser = new JFileChooser();
chooser.setMultiSelectionEnabled(true);
chooser.setFileFilter(chooser.getAcceptAllFileFilter());
//chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
int returnVal = chooser.showOpenDialog(null);
minim = new Minim(this);
player = minim.loadFile(chooser.getSelectedFile().getAbsolutePath());
meta = player.getMetaData();
beat = new BeatDetect();
player.loop();
//player.isLooping();
fft = new FFT(player.bufferSize(), player.sampleRate());
fft.logAverages(60, 7);
noStroke();
w = width/fft.avgSize();
background(0);
}
void draw() {
noCursor();
background(0);
fill(255);
fft.forward(player.mix);
//stroke(255);
stroke(random(255), random(255), random(255));
for (int i = 0; i < fft.avgSize(); i++) {
line((i * w) + (w / 2), height, (i * w) + (w / 2), height - fft.getAvg(i) * 4);
strokeWeight(20);
}
beat.detect(player.mix);
fill(0, 20);
noStroke();
rect(0, 0, width, height);
//translate(width/1, height/50);
noFill();
fill(-1, 0);
if (beat.isOnset()) rad = rad * 0.9f;
else rad = 70;
ellipse(0, 0, 2 * rad, 2 * rad);
strokeCap(PROJECT);
stroke(-1, 30);
int bsize = player.bufferSize();
for (int i = 0; i < bsize - 1; i += 5) {
float x = 4 * (r)*cos(i*2*PI/bsize);
float y = 4 * (r)*sin(i*2*PI/bsize);
float x2 = 4 * (r + player.left.get(i)*100)*cos(i*2*PI/bsize);
float y2 = 4 * (r + player.left.get(i)*100)*sin(i*2*PI/bsize);
line(x, y, x2, y2);
}
}
void keyPressed() {
if (key==' ')exit();
if (key=='s' || key=='S')endRecord();
}
目前,它只播放一个文件并循环播放
非常感谢您的帮助
ķ
最佳答案
您需要break your problem down into smaller steps,一次只专注于其中一个步骤。
例如,您可能应该创建一个单独的草图,该草图使用JFileChooser
允许用户选择多个文件。不必担心如何播放它们,只需将其名称打印到控制台即可。您应该阅读the Java API以获取有用的功能。
当您使它完美运行时,您可以考虑获得点击顺序。这是更高级的方法,但是Google是您的 friend ,而here是一个有一些有希望的答案的问题。同样,您应该在自己的小示例草图中执行此操作。不用担心播放音频文件。只需将它们打印到控制台即可。
与此分开,创建一个草图,该草图使用音频文件的硬编码数组或ArrayList
并按顺序播放。使该工作与文件选择逻辑分开进行。
当您让它们全部独立工作时,将它们组合成一个草图会容易得多。而且,如果您被困在某个特定步骤上,则可以在该步骤上发布的MCVE,然后我们从那里开始。祝好运。
关于java - 尝试按选择顺序播放Java/Processing中的多个选定文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43124843/