naudio enregistrer le son du microphone puis enregistrer
Je vais avoir quelques problèmes avec naudio et d'économie d'enregistrements sonores. Le code que j'ai actuellement les œuvres, au point où il enregistre le fichier wav, mais quand je l'ouvre, Windows Media Player affiche un message d'erreur: "le Lecteur Windows Media a rencontré un problème lors de la lecture du fichier"
J'ai deux boutons, un bouton "Enregistrer", qui se transforme en bouton d'arrêt après elle est enfoncée. Et j'ai un bouton "Enregistrer" qui lorsqu'il est cliqué, sauvegarde l'enregistrement de 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;
}
source d'informationauteur Spencer | 2013-07-31
Vous devez vous connecter pour publier un commentaire.
Votre
recordButton_Click
code n'est pas de l'enregistrement, c'est la tuyauterie de données à partir d'unWaveIn
à unWaveOut
qui va lire les données provenant de votre source audio (microphone) directement à la sortie (haut-parleurs). Il ne conserve que les données pour les utiliser plus tard, il a juste des tuyaux de l'un à l'autre. Si vous souhaitez par la suite enregistrer que les données sur le disque, vous avez besoin de tampon de vous-même.La
saveResponse_Click
sur l'autre main est de départ l'enregistrement direct des données à partir du microphone à une vague de fichier sur le disque. Si vous cliquez sur votreSave Response
bouton, attendez un peu, puis cliquez sur votreStop
bouton, vous devriez obtenir un enregistrement de fichier wave.Si vous souhaitez enregistrer directement sur le disque, c'est très bien. Si vous souhaitez enregistrer dans la mémoire, puis vous pouvez également écrire sur le disque, alors vous avez besoin pour enregistrer les données comme il vient. Peut-être utiliser un flux de mémoire pour stocker les données pendant l'enregistrement, puis d'écrire que de la
WaveFileWriter
quand vient le temps d'enregistrer le fichier.Voici le code que j'ai utilisé pour le test direct à l'enregistrement d'un fichier wav sur le disque dur: