Я использую NAudio 1.7 после того, как я отказался от WaveIn p/invoke ... во всяком случае, я делаю приложение VoIP, а пример кода, который я нашел, использовал WaveFileWriter для вывода на диск, Не хочу этого, поэтому вместо этого я использовал перегрузку memoryStream.Naudio Запись и воспроизведение звука
Проблема заключается в том, что я пытаюсь воспроизвести поток после того, как прекратил запись с помощью класса SoundPlayer, он просто не воспроизводит и продолжает код, но если я сохраню его, как показано ниже, я могу воспроизвести его в VLC , но если я попытаюсь загрузить его из самого файла, он тоже не воспроизводится, на этот раз, когда «поврежден Wav-заголовок» или что-то еще, это вызывает поток, если я не устанавливаю его также в позицию 0.
Устанавливает ли Windows заголовок файла wav, когда я его сохраняю? Почему VLC может проигрывать его, а SoundPlayer не может даже, если я его сохраню?
Private waveFile As WaveFileWriter
Private newWave As New NAudio.Wave.WaveIn
Private memstream As New MemoryStream
Public Sub StartRecording()
newWave.WaveFormat = New WaveFormat(44100, 1)
waveFile = New WaveFileWriter(memstream, newWave.WaveFormat)
AddHandler newWave.DataAvailable, AddressOf RecordedDataAvailable
AddHandler newWave.RecordingStopped, AddressOf RecordingStopped
newWave.StartRecording()
End Sub
Private Sub RecordedDataAvailable(sender As Object, e As NAudio.Wave.WaveInEventArgs)
If waveFile IsNot Nothing Then
waveFile.Write(e.Buffer, 0, e.BytesRecorded)
waveFile.Flush()
End If
End Sub
Private Sub RecordingStopped(sender As Object, e As NAudio.Wave.StoppedEventArgs)
Dim fileName As String = Application.StartupPath & "\Test"
File.WriteAllBytes(fileName & ".wav", memstream.GetBuffer)
memstream.Position = 0
Dim player As New SoundPlayer(memstream)
player.Play()
End Sub