C#での遅延時間の後に、独自のオーディオレコーダーを停止します(NAudioを使用して)
-
25-09-2019 - |
質問
私はC#でNAudioを使用して録音した音声を作っていると私は使用停止ボタンを削除し、単にいくつかの時間遅延の後、独自に録音を停止する必要があります。
レコードイベントのコードがある
private void cmbRecord_Click(object sender, EventArgs e)
{
outputFilename = "file address";
waveInStream = new WaveIn(44100,2);
writer = new WaveFileWriter(outputFilename, waveInStream.WaveFormat);
waveInStream.DataAvailable += new EventHandler<WaveInEventArgs>(waveInStream_DataAvailable);
waveInStream.StartRecording();
// Just controling the objects on the screen.
cmbRecord.Enabled = false;
cmbStop.Enabled = true;
}
void waveInStream_DataAvailable(object sender, WaveInEventArgs e)
{
writer.WriteData(e.Buffer, 0, e.BytesRecorded);
int secondsRecorded = (int)(writer.Length / writer.WaveFormat.AverageBytesPerSecond);
}
ストップボタンが
のように与えられます。 private void cmbStop_Click(object sender, EventArgs e)
{
waveInStream.StopRecording();
waveInStream.Dispose();
waveInStream = null;
writer.Close();
writer = null;
cmbRecord.Enabled = true;
cmbStop.Enabled = false;
}
私はcmbRecord_Clickイベント内で自動的に録画を停止する必要があります。 事前に感謝します。
解決
セット
使用A タイマーに、 Interval
とは、タイマーのcmbStop_Click
イベントに上OnTick
イベントのコードをコピーします。 mbRecord_Click
イベントでタイマーを有効にして、&cmbStop_Click
イベントでタイマーを無効にすることを忘れないでください。
の編集の
新しいタイマーを作成し、その値を設定
//フォームのクラスレベルでこの行を置く。
System.Windows.Forms.Timer mytimer=new System.Windows.Forms.Timer(); //create a new Timer
//はちょうどInitializeComponent()
後、フォームのコンストラクタにこれら二つを置きます。
mytimer.Interval=1000; //set the interval to 1 second.
mytimer.Tick += new EventHandler(mytimer_Tick);
mbRecord_Clickイベントでタイマーを有効にします。
private void cmbRecord_Click(object sender, EventArgs e)
{
outputFilename = "file address";
waveInStream = new WaveIn(44100,2);
writer = new WaveFileWriter(outputFilename, waveInStream.WaveFormat);
waveInStream.DataAvailable += new EventHandler<WaveInEventArgs>(waveInStream_DataAvailable);
waveInStream.StartRecording();
// Just controling the objects on the screen.
cmbRecord.Enabled = false;
cmbStop.Enabled = true;
//Enable the timer to fire
mytimer.Enabled = true;
}
停止1秒後に記録..
void mytimer_Tick(object sender, EventArgs e)
{
waveInStream.StopRecording();
waveInStream.Dispose();
waveInStream = null;
writer.Close();
writer = null;
cmbRecord.Enabled = true;
cmbStop.Enabled = false;
//disable the timer here so it won't fire again...
mytimer.Enabled = false;
}
他のヒント
あなたが遅延閉鎖する場合がありますので、
DataAvailable
へのコール(コールバックモデルに応じて、または時には、使用)の後StopRecording
コールバックのがあるでしょう - あなたの心に留めてよいでしょう。一つのことWaveFileWriterあなたはすべてを書いたまで。
NAudioを使用し、60秒後に録画を停止 VoiceRecorder のサンプルプロジェクトを見てください。記録が自動的にどのように私はこの記事を説明します停止します。
long maxFileLength = this.recordingFormat.AverageBytesPerSecond * 60;
int toWrite = (int)Math.Min(maxFileLength - writer.Length, bytesRecorded);
if (toWrite > 0)
writer.WriteData(buffer, 0, bytesRecorded);
else
Stop();
所属していません StackOverflow