naudio从麦克风录制声音并保存我在使用naudio和保存录音时遇到了一些问题。我目前使用的代码保存的是wav文件,但是当我打开它时,WindowsMediaPlayer返回一个错误:“WindowsMediaPlayer在播放文件时遇到问题”我有两个按钮,一个是“录音”按钮,按下会转变成停止按钮。我有一个“保存”按钮,单击该按钮会将录音保存到sample.wav。NAudio.Wave.WaveInsourceStream=null;NAudio.Wave.DirectSoundOutwaveOut=null;NAudio.Wave.WaveFileWriterwaveWriter=null;privatevoidrecordButton_Click(objectsender,EventArgse){intdeviceNumber=sourceList.SelectedItems[0].Index;sourceStream=newNAudio.Wave.WaveIn();sourceStream.DeviceNumber=deviceNumber;sourceStream.WaveFormat=newNAudio.Wave.WaveFormat(44100,NAudio.Wave.WaveIn.GetCapabilities(deviceNumber).Channels);NAudio.Wave.WaveInProviderwaveIn=newNAudio.Wave.WaveInProvider(sourceStream);waveOut=newNAudio.Wave.DirectSoundOut();waveOut.Init(waveIn);sourceStream.StartRecording();waveOut.Play();recordButton.Visible=false;stopRecord.Visible=true;}privatevoidsaveResponse_Click(objectsender,EventArgse){intdeviceNumber=sourceList.SelectedItems[0].Index;stringsaveLocation="c:\wav\sample.wav";sourceStream=newNAudio.Wave.WaveIn();sourceStream.DeviceNumber=deviceNumber;源流.WaveFormat=newNAudio.Wave.WaveFormat(44100,NAudio.Wave.WaveIn.GetCapabilities(deviceNumber).Channels);sourceStream.DataAvailable+=newEventHandler(sourceStream_DataAvailable);waveWriter=newNAudio.Wave.WaveFileWriter(saveLocation,sourceStream.WaveFormat);sourceStream.StartRecording();MessageBox.Show("录音保存成功。");}privatevoidsourceStream_DataAvailable(objectsender,NAudio.Wave.WaveInEventArgse){if(waveWriter==null)return;waveWriter.WriteData(e.Buffer,0,e.BytesRecorded);waveWriter.Flush();}privatevoidstopRecord_Click(objectsender,EventArgse){if(waveOut!=null){waveOut.Stop();waveOut.Dispose();波输出=空;}if(sourceStream!=null){sourceStream.StopRecording();sourceStream.Dispose();源流=空;}if(waveWriter!=null){waveWriter.Dispose();waveWriter=null;}recordButton.Visible=true;stopRecord.Visible=false;saveResponse.Enabled=true;您的记录按钮n_Click代码不记录,WaveIn是从WaveIn到WaveOut的数据,WaveOut会将数据从源(麦克风)直接播放到输出(扬声器),它不会保留该数据供以后使用,它只是通过管道传输从一个到另一个。如果以后要将该数据保存到磁盘,则需要自己对其进行缓冲。另一方面,saveResponse_Click开始将来自麦克风的数据直接记录到磁盘上的波形文件中。如果单击“保存响应”按钮,稍等片刻,然后单击“停止”按钮,您将获得一个录制的波形文件。如果您想直接记录到磁盘,这很好。如果要记录到内存然后选择写入磁盘,那么就需要保存数据。可能录制的时候用一个内存流来保存数据,然后在WaveFileWriter.waveFileWriter的时候用WaveFileWriter写入文件。这是我用来测试直接录到磁盘的wave文件的代码:以上是C#学习教程:naudio从麦克风录制声音,并保存全部内容以供分享。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——publicWaveInwaveSource=null;公共WaveFileWriterwaveFile=null;privatevoidStartBtn_Click(objectsender,EventArgse){StartBtn.Enabled=false;StopBtn.Enabled=true;waveSource=newWaveIn();波源。WaveFormat=newWaveFormat(44100,1);waveSource.DataAvailable+=newEventHandler(waveSource_DataAvailable);waveSource.RecordingStopped+=newEventHandler(waveSource_RecordingStopped);waveFile=newWavematFileWriter(@"C:TempTest0001.wav)Wave",;waveSource.StartRecording();}privatevoidStopBtn_Click(objectsender,EventArgse){StopBtn.Enabled=false;waveSource.StopRecording();}voidwaveSource_DataAvailable(objectsender,WaveInEventArgse){if(waveFile!=null){waveFile.Write(e.Buffer,0,e.BytesRecorded);waveFile.Flush();}}voidwaveSource_RecordingStopped(对象发送者,StoppedEventArgse){if(waveSource!=null){waveSource.Dispose();波源=空;}if(waveFile!=null){waveFile.Dispose();波文件=空;}StartBtn.Enabled=true;}本文来自网络收藏,不代表立场,如涉及侵权,请点击右侧联系管理员删除,如需转载请注明出处:
