【发布时间】:2017-03-30 17:40:44
【问题描述】:
我正在尝试编写 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();
}
目前它只播放一个文件并循环播放
非常感谢您的帮助
K
【问题讨论】:
标签: java audio processing