Stoppen Sie Audio-Recorder auf seinem eigenen nach Zeitverzögerung in c # (mit NAudio)
-
25-09-2019 - |
Frage
Ich bin eine Audio mit NAudio in C # aufgezeichnet und ich brauche die Stopp-Taste verwendet entfernen und einfach die Aufnahme stoppen auf seinem eigenen nach einiger Zeitverzögerung.
Der Code für das Protokoll Ereignis
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);
}
Die Stopptaste ist gegeben als
private void cmbStop_Click(object sender, EventArgs e)
{
waveInStream.StopRecording();
waveInStream.Dispose();
waveInStream = null;
writer.Close();
writer = null;
cmbRecord.Enabled = true;
cmbStop.Enabled = false;
}
Ich brauche die Aufnahme automatisch in dem cmbRecord_Click Ereignisse zu stoppen. Vielen Dank im Voraus.
Lösung
Verwenden Sie einen Timer , stellen die Interval
und kopieren Sie den Code in cmbStop_Click
Ereignis über OnTick
Ereignis des Timer. Aktivieren Sie den Timer in der mbRecord_Click
Ereignis und & erinnere mich an den Timer in cmbStop_Click
Ereignis deaktivieren
Edit:
Erstellen Sie einen neuen Timer und setzen Sie den Wert
// setzen Sie diese Zeile in dem Formular Klassenstufe
System.Windows.Forms.Timer mytimer=new System.Windows.Forms.Timer(); //create a new Timer
// diese beiden in das Formular Konstruktor setzen kurz nach InitializeComponent()
;
mytimer.Interval=1000; //set the interval to 1 second.
mytimer.Tick += new EventHandler(mytimer_Tick);
Aktivieren Sie den Timer im mbRecord_Click Ereignisse
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;
}
Halten Sie die Aufnahme nach 1 Sekunde ..
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;
}
Andere Tipps
Eine Sache, Sie können im Auge behalten wollen - es wird eine DataAvailable
Rückruf nach der Anruf an StopRecording
(oder während auf dem Callback-Modell abhängig verwendet), so dass Sie Verzögerung Schließen mögen vielleicht die WaveFileWriter bis Sie geschrieben haben alles.
Haben Sie einen Blick auf die Voicerecorder Beispielprojekt, das NAudio verwendet und stoppt nach 60 Sekunden der Aufnahme. Ich erkläre in diesem Artikel wie die Aufnahme automatisch ist gestoppt.
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();