【问题标题】:Audio Loop Processing.org (Java/Minim sound Library)Audio Loop Processing.org(Java/Minim 声音库)
【发布时间】:2012-01-24 17:17:47
【问题描述】:

我正在尝试创建一段很长的音频,它是录制的音频剪辑的集合,这些剪辑及时合并成一个大的声音拼贴画。我正在使用 Minim 声音库,但目前我很难让它工作。这与我的编程技能相当基本相同,但我认为这将是一项非常容易的任务!我:ant 它与 Minim 的示例文件夹中的“RecordAndPlayback”完全相同,但要让点击触发的事件自动完成。

这是我目前的代码:

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

欢迎任何帮助,因为这让我发疯!

谢谢

丹尼尔

【问题讨论】:

    标签: java audio processing minim


    【解决方案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();
    }
    

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2014-05-28
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 2013-01-03
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多