2012-01-24 222 views
0

我試圖創建一個長片段的音頻,這是一個記錄音頻剪輯的集合,在時間上合併成一個大型聲音拼貼。我正在使用Minim音色庫,但目前我很難將此工作。這與我的編程技巧完全相同,但我認爲這將是一項非常簡單的任務! I:它的工作方式與Minim的示例文件夾中的'RecordAndPlayback'完全一樣,但是通過自動完成點擊觸發事件。音頻循環Processing.org(Java/Minim聲音庫)

這裏是我到目前爲止的代碼:

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

你似乎只處理一個文件,你不加載你錄製的內容。

如果您想要開啓和關閉錄音,您可以使用布爾值來跟蹤比,然後保存錄制內容。

下面是使用修改後的樣品基本素描:

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

如果由於某種原因,你要保存的每個記錄到一個單獨的文件,而不是一個,你可以使用一些整數來保存記錄的ID和遊戲樣本。

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!