java - 尝试按选择顺序播放Java/Processing中的多个选定文件

标签 java audio processing

我正在尝试编写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/

相关文章:

java - 有没有办法改变已经制作好的物体的颜色?

java - 关于 btrace 的代码的含义是什么

java - Volley 请求的表达式预期错误

python - 在python中的特定位置播放音频文件

java - 写入android Audio Tack的缓冲区后,音频文件播放晚

使用网络摄像头进行 Java 运动检测

audio - 使用Processing Minim库添加延迟和ADSR滤波器

java - javafx中的preferred是什么意思

java - Jersey 演示应用程序中的 MediaType.APPLICATION_XML 和 MediaType.APPLICATION_JSON

javascript - 无法使用 play() 函数在 React Typescript 中播放音频 |错误 : Property 'play' does not exist