Вы, кажется, обрабатываете только один файл, и вы не загружаете то, что записываете.
Если вы хотите включить или выключить запись, вы можете использовать логическое значение для отслеживания, затем сохранить то, что было записано.
Вот базовый эскиз с использованием измененного образца:
import ddf.minim.*;
Minim minim;
AudioInput in;
AudioRecorder recorder;
AudioPlayer player;
boolean isRecording;//are we recording ?
void setup(){
size(512, 200);
minim = new Minim(this);
in = minim.getLineIn(Minim.STEREO, 512);
recorder = minim.createRecorder(in, "rec.wav", true);
textFont(createFont("Arial", 12));
}
void draw(){
background(isRecording ? color(192,0,0) : color(0));
stroke(255);
for(int i = 0; i < in.left.size()-1; i++){
line(i, 50 + in.left.get(i)*50, i+1, 50 + in.left.get(i+1)*50);
line(i, 150 + in.right.get(i)*50, i+1, 150 + in.right.get(i+1)*50);
}
if ( recorder.isRecording() ) text("Currently recording...", 5, 15);
else text("Not recording.", 5, 15);
}
void keyReleased(){
if ( key == 'r' ){
isRecording = !isRecording;//toggle recording
if(isRecording){//if we need to record
if(player != null && player.isPlaying()) player.pause();//stop any previously playing tracks, if any
if(recorder.isRecording()) recorder.endRecord();//and the previous recording somehow wasn't ended, end it now
recorder.beginRecord();//begin recording, according to docs: "If recording was previously halted, and save() was not called, samples will be appended to the end of the material recorded so far."
}else recorder.endRecord();//stop recording
}
if ( key == 's' ){
if(recorder != null) {
recorder.save();
println("Done saving ");
player = minim.loadFile("rec.wav", 2048);
player.play();
}
}
}
void stop(){
in.close();
minim.stop();
super.stop();
}
Если по какой-то причине вы хотите сохранить каждую запись в отдельный файл, а не в один, вы можете использовать несколько целых чисел для хранения идентификатора записи и воспроизводимого семпла.
import ddf.minim.*;
Minim minim;
AudioInput in;
AudioRecorder recorder;
AudioPlayer player;
boolean isRecording;
int recID = -1;
int playID = 0;
void setup(){
size(512, 200);
minim = new Minim(this);
in = minim.getLineIn(Minim.STEREO, 512);
textFont(createFont("Arial", 12));
}
void draw(){
background(0);
stroke(255);
for(int i = 0; i < in.left.size()-1; i++){
line(i, 50 + in.left.get(i)*50, i+1, 50 + in.left.get(i+1)*50);
line(i, 150 + in.right.get(i)*50, i+1, 150 + in.right.get(i+1)*50);
}
if(recorder != null){
if ( recorder.isRecording() ) text("Currently recording...", 5, 15);
else text("Not recording.", 5, 15);
}
if(player != null && !isRecording){
println("playing: " + playID);
if(player.position() >= player.length()){
if(playID < recID){
playID++;
player = minim.loadFile("rec"+playID+".wav", 2048);
player.play();
}
}
}
}
void keyReleased(){
if ( key == 'r' ){
if(recorder != null && recorder.isRecording()) recorder.endRecord();
else{
recID++;
recorder = minim.createRecorder(in, "rec"+recID+".wav", true);
recorder.beginRecord();
}
isRecording = true;
}
if ( key == 's' ){
if(recorder != null) {
recorder.save();
println("Done saving " + recID);
player = minim.loadFile("rec"+recID+".wav", 2048);
player.play();
isRecording = false;
}
}
if ( key == 'p' ){//play all
playID = 0;
player = minim.loadFile("rec"+playID+".wav", 2048);
player.play();
}
}
void stop(){
in.close();
minim.stop();
super.stop();
}
Удачи!