Processingで音声処理with Minim

AudioPlayerクラス:ストリーミング再生

import ddf.minim.*;

Minim minim;
AudioPlayer audio;

float X,Y;

void setup(){
  size(200,200);
  colorMode(HSB,100);
  background(99);
  smooth();
  strokeCap(SQUARE);
  
  minim = new Minim(this);
  audio = minim.loadFile("01 It's My Life.mp3",2048);
  
  X = width/2;
  Y = height/2;
  
}

void draw(){
  background(99);
  stroke(60);
  strokeWeight(1);
  
  if(dist(mouseX,mouseY,X,Y) < 20 ) {
    if(mousePressed) {
      fill(90,99,99);
    } else {
      fill(90,99,99,30);
    } 
    }else {
    fill(99);
    }
    
    ellipse(X,Y,40,40);
    fill(99);
  
  
  if(audio.isPlaying()){
    rect(X-5,Y-5,10,10);
  } else {
    triangle(X-4.3,Y-5,X-4.3,Y+5,X+4.3,Y);
  }
  
  float played = float(audio.position()) / audio.length();
  
  stroke(90,99,99,30);
  strokeWeight(10);
  noFill();
  arc(X,Y,100,100,radians(-90),radians(-90 + (played * 360)) );
}

void mousePressed(){
  if(dist(mouseX,mouseY,X,Y) < 20){
    if(audio.isPlaying()){
      audio.pause();
    } else {
      audio.play();
    }
  }
}

void stop() {
  audio.close();
  minim.stop();
  super.stop();
}

AudioSampleクラス;ファイルサイズが大きくない音声ファイルを読み込み、再生、停止を行う。

import ddf.minim.*;

Minim minim;
AudioSample[] sample;

int ButtonNum = 3;
float[] X,Y;

void setup(){
  size(200,200);
  colorMode(HSB,100);
  background(99);
  smooth();
  
  minim = new Minim(this);
  
  sample = new AudioSample[ButtonNum];
  sample[0] = minim.loadSample("b_062.mp3");
  sample[1] = minim.loadSample("b_021.mp3");
  sample[2] = minim.loadSample("b_083.mp3");
  
  X = new float[ButtonNum];
  Y = new float[ButtonNum];
  
  for(int i = 0;i<ButtonNum;i++){
    X[i] = 50 + 50*i;
    Y[i] = height / 2;
  }
}

void draw(){
  background(99);
  stroke(60);
  strokeWeight(1);
  
  for(int i=0;i<ButtonNum;i++){
    updateButton(i);
  }
}

void updateButton(int i){
  if(dist(mouseX,mouseY,X[i],Y[i]) < 20 ) {
    if(mousePressed){
      fill(90,99,99);
    } else {
      fill(90,99,99,30);
    }
  } else {
    fill(99);
  }

  ellipse(X[i],Y[i],40,40);
  fill(99);


 }
void mousePressed(){
    for(int i=0;i<ButtonNum;i++){
      if(dist(mouseX,mouseY,X[i],Y[i]) < 20) {
        sample[i].trigger();
      }
    }
  }
  
  void stop(){
    for(int i = 0;i<ButtonNum;i++){
      sample[i].close();
    }
    minim.stop();
    super.stop();
  }