簡體   English   中英

最小化處理-來自麥克風的錄音,但無法關閉並進行新錄音

[英]minim in processing - record from mic but cannot close and make new recording

使用來自processing.org(在Win8上)的示例文件,我得到了“來自mic的錄音”,並且play()聲音正常。 我只需要一次記錄10到30秒。 但是現在找不到關閉現有記錄並記錄新記錄的任何方法。
我已經嘗試過各種方法。 我希望能夠按下另一個鍵,再按一次“ r”並記錄另外幾秒鍾,例如語言詞匯練習等。
我正在使用來自partitional.net/minim的最小示例代碼。 官方文檔只列出了beginRecord / endRecord,但是沒有關閉現有記錄並開始另一個記錄的方法。 沒有諸如recorder.close()或.reset / restart等之類的東西。

 import ddf.minim.*;
import ddf.minim.ugens.*;
Minim minim;
// for recording
   AudioInput in;
   AudioRecorder recorder;
   boolean recorded;
 // for playing back
AudioOutput out;
FilePlayer player;
void setup()
{   size(512, 200, P3D);
    minim = new Minim(this);
    in = minim.getLineIn(Minim.STEREO, 2048);
  // create an AudioRecorder
  recorder = minim.createRecorder(in, "myrecording.wav");
    // get an output
  out = minim.getLineOut( Minim.STEREO );
  textFont(createFont("Arial", 24));
}
void draw()
{   background(255,240,128); 
     stroke(32);
  if ( recorder.isRecording() )
  {   text("Now recording, press the r key to stop recording.", 5, 15);   }
  else if ( !recorded )
  {   text("Press the R key to start recording.", 5, 15);     }
  else
  {  text("Press the S key to save the recording to disk and play it back in the sketch.", 5, 15);    }
} 
//end draw
void keyReleased()
{
     if ( !recorded && key == 'r' ) 
     {   // to indicate that you want to start or stop capturing audio data, 
           if ( recorder.isRecording()    ) 
           {    recorder.endRecord();
                 recorded = true;             }
    else 
    {  recorder.beginRecord();       }
  }
  if ( recorded && key == 's' )
  {  // now write it to file
    // case of buffered recording, will freeze sketch for a bit if buffer is large
    // case of streamed recording, will not freeze all that is being done
    // all that is being done is closing the file.
    // save returns the recorded audio in an AudioRecordingStream, 
    // which we can then play with a FilePlayer
    if ( player != null )
        {    player.unpatch( out );
              player.close();           }
    player = new FilePlayer( recorder.save() );
    player.patch( out );
    player.play();
   }
  //  my addition — this works for play-again
  if ( recorded && key == 'p' )
  {  player.rewind();
     player.play();
  }

我嘗試關閉最小值並重新啟動它,但隨后它抱怨“未使用本地變量xxx”:無效。

  if ( key == 'x' )
  { minim.stop();
    minim = new Minim(this);   
    AudioInput in;
    AudioRecorder recorder;  
    AudioOutput out;
    FilePlayer player;    }

您只需重新初始化記錄器就可以擺脫:

recorder = minim.createRecorder(in, "myrecording.wav");

我建議使用時間戳或文件計數器,以免覆蓋以前的錄音。

這是一個經過最小調整的“ 創建AudioRecorder”示例(也出現在“ 示例”>“ Contributed Libraries”>“ Minim”>“基礎”>“ RecordAudioInput”中 ):

/**
  * This sketch demonstrates how to an <code>AudioRecorder</code> to record audio to disk. 
  * To use this sketch you need to have something plugged into the line-in on your computer, 
  * or else be working on a laptop with an active built-in microphone. 
  * <p>
  * Press 'r' to toggle recording on and off and the press 's' to save to disk. 
  * The recorded file will be placed in the sketch folder of the sketch.
  * <p>
  * For more information about Minim and additional features, 
  * visit http://code.compartmental.net/minim/
  */

import ddf.minim.*;

Minim minim;
AudioInput in;
AudioRecorder recorder;

void setup()
{
  size(512, 200, P3D);

  minim = new Minim(this);

  in = minim.getLineIn();
  // create a recorder that will record from the input to the filename specified
  // the file will be located in the sketch's root folder.
  recorder = minim.createRecorder(in, "myrecording - "+new java.util.Date()+".wav");

  textFont(createFont("Arial", 12));
}

void draw()
{
  background(0); 
  stroke(255);
  // draw the waveforms
  // the values returned by left.get() and right.get() will be between -1 and 1,
  // so we need to scale them up to see the waveform
  for(int i = 0; i < in.bufferSize() - 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' ) 
  {
    // to indicate that you want to start or stop capturing audio data, you must call
    // beginRecord() and endRecord() on the AudioRecorder object. You can start and stop
    // as many times as you like, the audio data will be appended to the end of the buffer 
    // (in the case of buffered recording) or to the end of the file (in the case of streamed recording). 
    if ( recorder.isRecording() ) 
    {
      recorder.endRecord();
    }
    else 
    {
      recorder = minim.createRecorder(in, "myrecording - "+new java.util.Date()+".wav");
      recorder.beginRecord();
    }
  }
  if ( key == 's' )
  {
    // we've filled the file out buffer, 
    // now write it to the file we specified in createRecorder
    // in the case of buffered recording, if the buffer is large, 
    // this will appear to freeze the sketch for sometime
    // in the case of streamed recording, 
    // it will not freeze as the data is already in the file and all that is being done
    // is closing the file.
    // the method returns the recorded audio as an AudioRecording, 
    // see the example  AudioRecorder >> RecordAndPlayback for more about that
    recorder.save();
    println("Done saving.");
  }
}

另外,如果您想使用保存對話框而不是為.wav文件生成唯一名稱,則可能需要檢出selectInput()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM