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

时间:2014-03-25 19:02:48

标签: button import processing minim

我正在努力创建一个功能导入按钮,我的意思是我点击按钮,弹出文件浏览器,我可以点击一首歌然后玩家可以播放它。就像任何其他音乐播放器一样。这是我的代码到目前为止的基本视图,不包括类:

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);

  }
}

1 个答案:

答案 0 :(得分:1)

这里有一些东西可以帮助你:

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变为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); } } } } 。现在,您必须调整此代码才能使用多个文件。这只是一个例子。

更新2:执行与您的歌曲类合作的代码

waveform()

你看到闪烁的红色然后没有设置代码的原因是因为它读取for方法并快速通过draw()循环然后继续其余的操作就像播放这首歌一样。像我一样把它放在{{1}}中可以帮助你避免这种情况。