Ich habe einige Probleme mit naudio und Speichern von Tonaufnahmen. Der Code, den ich derzeit habe, funktioniert an dem Punkt, wo es die WAV-Datei speichert, aber wenn ich es öffne, gibt Windows Media Player einen Fehler zurück: "Windows Media Player hat ein Problem beim Abspielen der Datei"naudio Schall von Mikrofon aufzeichnen dann speichern
Ich habe zwei Tasten , eine "Record" -Taste, die nach dem Drücken zur Stopptaste wird. Und ich habe eine Schaltfläche "Speichern", die bei einem Klick speichert die Aufzeichnung in sample.wav
.
NAudio.Wave.WaveIn sourceStream = null;
NAudio.Wave.DirectSoundOut waveOut = null;
NAudio.Wave.WaveFileWriter waveWriter = null;
private void recordButton_Click(object sender, EventArgs e)
{
int deviceNumber = sourceList.SelectedItems[0].Index;
sourceStream = new NAudio.Wave.WaveIn();
sourceStream.DeviceNumber = deviceNumber;
sourceStream.WaveFormat = new NAudio.Wave.WaveFormat(44100, NAudio.Wave.WaveIn.GetCapabilities(deviceNumber).Channels);
NAudio.Wave.WaveInProvider waveIn = new NAudio.Wave.WaveInProvider(sourceStream);
waveOut = new NAudio.Wave.DirectSoundOut();
waveOut.Init(waveIn);
sourceStream.StartRecording();
waveOut.Play();
recordButton.Visible = false;
stopRecord.Visible = true;
}
private void saveResponse_Click(object sender, EventArgs e)
{
int deviceNumber = sourceList.SelectedItems[0].Index;
string saveLocation = "c:\\wav\\sample.wav";
sourceStream = new NAudio.Wave.WaveIn();
sourceStream.DeviceNumber = deviceNumber;
sourceStream.WaveFormat = new NAudio.Wave.WaveFormat(44100, NAudio.Wave.WaveIn.GetCapabilities(deviceNumber).Channels);
sourceStream.DataAvailable += new EventHandler<NAudio.Wave.WaveInEventArgs>(sourceStream_DataAvailable);
waveWriter = new NAudio.Wave.WaveFileWriter(saveLocation, sourceStream.WaveFormat);
sourceStream.StartRecording();
MessageBox.Show("Recording successfully saved.");
}
private void sourceStream_DataAvailable(object sender, NAudio.Wave.WaveInEventArgs e)
{
if (waveWriter == null) return;
waveWriter.WriteData(e.Buffer, 0, e.BytesRecorded);
waveWriter.Flush();
}
private void stopRecord_Click(object sender, EventArgs e)
{
if (waveOut != null)
{
waveOut.Stop();
waveOut.Dispose();
waveOut = null;
}
if (sourceStream != null)
{
sourceStream.StopRecording();
sourceStream.Dispose();
sourceStream = null;
}
if (waveWriter != null)
{
waveWriter.Dispose();
waveWriter = null;
}
recordButton.Visible = true;
stopRecord.Visible = false;
saveResponse.Enabled = true;
}
Können Sie den Code hinter dem ‚Stop‘ Aktion zeigen, bitte? Ich muss nur sehen, wie du den "waveWriter" und so weiter verschließt. – Corey
@Corey, ich habe die Aktion 'stop' zum Code hinzugefügt. Prost. – Spencer
OK, getestet mit ähnlichem Code und alles scheint für mich zu funktionieren. Stoppen Sie die Aufnahme, bevor Sie versuchen, sie in WMP abzuspielen? – Corey