设想:
我正在使用 NAudio 1.5,我正在尝试从 IWaveProvider 以 PCM、8 位、22050hz 格式记录正弦波,如下所示:
Private Sub record(ByVal waveForm As String, _
ByVal duration As Integer, _
ByVal frequency As Integer, _
ByVal amplitude As Integer, _
ByVal sampleRate As Integer)
Dim wave As IWaveProvider = _
Audio.SoundModulWaveFormProviderFactory.createWaveForm(waveForm, _
frequency, amplitude, sampleRate)
Dim memStream As New System.IO.MemoryStream()
Dim writer As New WaveFileWriter(memStream, wave.WaveFormat)
Dim numberOfBytes As Integer = writer.WaveFormat.AverageBytesPerSecond
Dim buffer(numberOfBytes) As Byte
Dim i As Integer
Dim count As Integer
For i = 1 To duration
count = wave.Read(buffer, 0, numberOfBytes)
writer.Write(buffer, 0, count)
Next
writer.Flush()
Try
Me.audioStream = New MemoryStream()
memStream.WriteTo(Me.audioStream)
Catch ex As Exception
Trace.WriteLine(ex.Message)
End Try
writer.Close()
recorded = True
End Sub
然后将内存流移交给解析整个波形文件并将其包含到声音列表中的函数。
问题
上面提到的函数期望波形数据的长度是从字节位置 42 到 45。不幸的是,这似乎总是 0。因此我没有得到任何长度。
问题:
如何确保 WaveFileWriter 正在将此信息写入 MemoryStream?还是仅在写入文件时才这样做?
也许有不同的方法可以达到相同的目标?
更新:
WaveFileWriter 在直接写入文件时确实包含波形数据长度。