[英]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.