WaveIn p/invoke를 포기한 후 NAudio 1.7을 사용하고 있습니다 ... 어쨌든 VoIP 응용 프로그램을 만들고 샘플 코드에서 WaveFileWriter를 사용하여 디스크로 출력했는데 필요 없기 때문에 대신 memoryStream 오버로드를 사용했습니다.Naudio 녹음 및 재생 오디오
SoundPlayer 클래스로 녹음을 중지 한 후 스트림을 재생하려고하면 문제가 발생합니다. 단지 재생되지 않고 코드가 계속되지만 아래에 표시된대로 저장하면 VLC에서 재생할 수 있습니다. ,하지만 파일 자체에서로드하려고하면 "Wav 헤더가 손상된"던지거나 이번에도 재생되지 않습니다.이 경우에도 Position 0으로 설정하지 않으면 스트림에서 throw됩니다.
저장시 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