シナリオ:
私は 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
メモリ ストリームは、wave ファイル全体を解析し、サウンドのリストに含める関数に渡されます。
問題
上記の関数は、wave データの長さがバイト位置 42 から 45 であることを想定しています。残念ながら、これは常に 0 のようです。したがって、長さは返されません。
質問:
WaveFileWriter がこの情報を MemoryStream に書き込んでいることを確認するにはどうすればよいですか? それとも、ファイルへの書き込み時にのみそれを行いますか?
同じ目標に到達するための別の方法があるのではないでしょうか?
アップデート:
ファイルに直接書き込む場合、WaveFileWriter にはウェーブ データの長さが含まれます。