2012-01-24 294 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!