2012-01-24 39 views
0

私は長い時間オーディオを作成しようとしています。これは、時間の経過とともに1つの大きなコラージュに統合された録音されたオーディオクリップのコレクションです。私はMinimサウンドライブラリを使用していますが、現時点ではこれを動作させるのに苦労しています。これはまったく同じように機能します私のプログラミングスキルはかなり基本的ですが、私はこれが非常に簡単な作業であると考えていました!私はMinimのexamplesフォルダにある 'RecordAndPlayback'とちょうど同じように動作しますが、クリックによってトリガされるイベントは自律的に処理されます。Audio Loop Processing.org(Java/Minim sound library)

ここで私がこれまで持っているコードです:これは私が怒っ駆動であるよう

import ddf.minim.*; 
Minim minim; 
AudioInput in; 
AudioRecorder recorder; 
AudioPlayer player; 
Timer timer; 
class Timer { 

    int savedTime; // When Timer started 
    int totalTime; // How long Timer should last 

    Timer(int tempTotalTime) { 
    totalTime = tempTotalTime; 
    } 

    // Starting the timer 
    void start() { 
    // When the timer starts it stores the current time in milliseconds. 
    savedTime = millis(); 
    } 

    // The function isFinished() returns true if 5,000 ms have passed. 
    // The work of the timer is farmed out to this method. 
    boolean isFinished() { 
    // Check how much time has passed 
    int passedTime = millis()- savedTime; 
    if (passedTime > totalTime) { 
     return true; 
    } else { 
     return false; 
    } 
    } 
} 
void setup() 
{ 
    size(512, 200, P3D); 
    textMode(SCREEN); 
    minim = new Minim(this); 
    timer = new Timer(5000); 
    timer.start(); 
    in = minim.getLineIn(Minim.STEREO, 2048); 
    recorder = minim.createRecorder(in, "myrecording.wav", true); 

    textFont(createFont("Arial", 12)); 
} 
void draw() 
{ 
    background(0); 
    player = minim.loadFile("myrecording.wav"); 
    player.play(); 
    player.loop(); 
//GUI 
    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); 
    } 
    //-- end of GUI 
//recorder switching 
    if (timer.isFinished()) 
    { 
    text("not..", 5, 15); 
    if(recorder.isRecording() == true){ 
    recorder.endRecord(); 
    recorder.save(); 
    timer.start(); 
    } 
    }else 
    { 
    text("recording...", 5, 15); 
    recorder.beginRecord(); 
    println(recorder.isRecording()); 
    } 
    ///--- end recorder switching 

} 
void stop() 
{ 
    // always close Minim audio classes when you are done with them 
    in.close(); 
    if (player != null) 
    { 
    player.close(); 
    } 
    minim.stop(); 

    super.stop(); 
} 

は、任意のヘルプは非常に歓迎されるだろうしてください!

ダニエル

答えて

1

おかげで1つだけのファイルを扱えるように見えるとあなたが記録しているものをロードしていません。

録音をオンとオフに切り替えるには、より多くの情報を記録するためにブール値を使用し、記録された内容を保存します。あなたが別のファイルに各記録を保存するいくつかの理由ではなく、1のために、あなたが記録のIDを保持するために、いくつかの整数を使用することができ、場合

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

Goodluck!