为音乐播放器添加导入按钮



我正在尝试制作一个功能导入按钮,我的意思是我点击按钮,文件浏览器弹出,我可以点击一首歌,然后播放器可以播放它。就像其他音乐播放器一样。下面是到目前为止我的代码的基本视图,不包括类:

import ddf.minim.spi.*;
import ddf.minim.*; 
import ddf.minim.signals.*;
import ddf.minim.analysis.*;
import ddf.minim.effects.*;
import ddf.minim.ugens.*;
boolean play;
boolean repeat;
int k;
String filename;//
Minim minim;
AudioPlayer player;
Pics p;
Mechs m;
Importbt b;
ArrayList<Songs> s;
int i=0;
void setup() {
size(600, 400);
b=new Importbt();
m=new Mechs();
p=new Pics();
p.Thepics();
minim=new Minim(this);
s = new ArrayList();
s.add(new Songs(player, "SONG 1", "SONG 1"));
s.add(new Songs(player, "SONG 2", "SONG 2"));
s.add(new Songs(player, "SONG 3", "SONG 3"));
s.add(new Songs(player, "SONG 4", "SONG 4"));
k = s.size()-1;
}
void draw() {
background(0);
p.getFunction();
}
void fileSelected(File selection) {
if (selection == null) {
} 
else {
filename = selection.getAbsolutePath();
player = minim.loadFile(filename);//loads the file
// s.add(k, new Songs(player, filename, "a song"));
//s.get(k).playmusic();
s.add(new Songs(player, filename, "ftyu"));
s.get(k).waveform();//function from my songs class
player.play();//plays the file

至于我的类,如果它需要

class Songs {
AudioPlayer song; 
String directory;
String songName;
Songs(AudioPlayer song, String directory, String songName) {
song=minim.loadFile(directory);
this.song=song;
this.songName=songName;
}
void waveform() {
for (int j = 1; j < song.bufferSize() - 1; j++)
{
  if (j>0) {
    line(j, 214  + song.left.get(j)*50, j+1, 214 + song.left.get(j+1)*50);
    //waves from the left.
    stroke( 255, 0, 0 );  //this is the colour of the first line (red)
    line(j, 214 + song.right.get(j)*50, j+1, 214 + song.right.get(j+1)*50);
    //waves from the right.
    stroke(255, 255, 0);
  }
}

这里有一些东西可以让你开始:

import ddf.minim.spi.*;
import ddf.minim.signals.*;
import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.ugens.*;
import ddf.minim.effects.*;
float buttonX;
float buttonY;
float buttonW;
float buttonH;
Minim minim;
AudioPlayer player;
String filename;
void setup() {
  textSize(24);
  frame.setResizable(false);
  background(255);
  size(600, 200);
  fill(0);
  stroke(0);
  noFill();
  buttonW = 200;
  buttonH = 50;
  buttonX = width - width/2 - buttonW/2;
  buttonY = height/2 - buttonH/2;
  // Minim stuff
  minim = new Minim(this);
}
void draw() {
  background(255);
  fill(0);
  rectMode(CORNER);
  rect(buttonX, buttonY, buttonW, buttonH);
  fill(255);
  textAlign(LEFT);
  text("Import File", buttonX+35, buttonY+30);
}
void mouseClicked() {
  if (mouseX>buttonX && mouseX < buttonX+buttonW && mouseY > buttonY && mouseY < buttonY+buttonH) {
    selectInput("Import music file", "fileSelected");
  }
}
/* Taken from Processing.org */
void fileSelected(File selection) {
  if (selection == null) {
    println("Window was closed or user hit cancel");
  } else {
    filename = selection.getAbsolutePath();
    player = minim.loadFile(filename);
    player.play();
    println("User selected " + filename);
  }
}
// stop minim and the player.
void stop() {
  player.close();
  minim.stop();
  super.stop();
}

这是一个非常简单的例子。所有这些都是为MinimAudioPlayer创建对象,然后使用文件选择机制将文件的路径和名称提供给loadFile(filename)。然后,如果文件是一个合法的音频文件(我只测试了一个.wav文件),那么它播放它。完成后,播放器停止播放。

请记住,这并不做任何错误检查或任何事情,所以如果你选择一个.jpeg文件,例如,它将抛出异常。你应该尝试这些东西,看看你可以如何精简你的播放器。

你应该试着理解的一件事是,这一切都很简单。文件名是一个简单的String,没有什么特别复杂的。

您可以在这里找到Minim的教程:http://artandtech.aalto.fi/wp-content/uploads/2012/06/minim.pdf

更新:正弦波与选定的歌曲

我已经更新了我在这里提供的代码,以便与您正在进行的wave事情一起工作。我添加了一个boolean,当一个文件被选中时,它变成了true。现在您必须调整这段代码以处理多个文件。这只是一个例子。

更新2:实现了与歌曲类

一起工作的代码
import ddf.minim.spi.*;
import ddf.minim.signals.*;
import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.ugens.*;
import ddf.minim.effects.*;
float buttonX;
float buttonY;
float buttonW;
float buttonH;
Minim minim;
AudioPlayer player;
ArrayList<Songs> s;
int k;
String filename;
boolean isSelected = false;
void setup() {
  s = new ArrayList();
  textSize(24);
  frame.setResizable(false);
  background(255);
  size(600, 600);
  fill(0);
  stroke(0);
  noFill();
  buttonW = 200;
  buttonH = 50;
  buttonX = width - width/2 - buttonW/2;
  buttonY = height/2 - buttonH/2;
  // Minim stuff
  minim = new Minim(this);
}
void draw() {
  background(255);
  fill(0);
  rectMode(CORNER);
  rect(buttonX, buttonY, buttonW, buttonH);
  fill(255);
  textAlign(LEFT);
  text("Import File", buttonX+35, buttonY+30);
  if (isSelected) {
    s.get(k).waveform();
  }
}
void mouseClicked() {
  if (mouseX>buttonX && mouseX < buttonX+buttonW && mouseY > buttonY && mouseY < buttonY+buttonH) {
    selectInput("Import music file", "fileSelected");
  }
}
/* Taken from Processing.org */
void fileSelected(File selection) {
  if (selection == null) {
    println("Window was closed or user hit cancel");
  } 
  else {
    filename = selection.getAbsolutePath();
    s.add(new Songs(player, filename, "Filename"));
    isSelected = true;
  }
}
// stop minim and the player.
void stop() {
  player.close();
  minim.stop();
  super.stop();
}
class Songs {
  AudioPlayer song; 
  String directory;
  String songName;
  Songs(AudioPlayer song, String directory, String songName) {
    song=minim.loadFile(directory);    
    this.song=song;
    this.songName=songName;
    song.play();
  }
  void waveform() {
    for (int j = 1; j < song.bufferSize() - 1; j++)
    {
      if (j>0) {
        line(j, 214  + song.left.get(j)*50, j+1, 214 + song.left.get(j+1)*50);
        //waves from the left.
        stroke( 255, 0, 0 );  //this is the colour of the first line (red)
        line(j, 214 + song.right.get(j)*50, j+1, 214 + song.right.get(j+1)*50);
        //waves from the right.
        stroke(255, 255, 0);
      }
    }
  }
}

你看到一闪红色,然后什么也没看到的原因是因为它读取了waveform()方法,并快速地完成了for循环,然后继续进行其他操作,比如播放歌曲。像我一样把它放在draw()中可以避免这种情况

相关内容

  • 没有找到相关文章

最新更新