NAudio ライブラリを使用して、実際の再生に Media Soundplayer を使用してアプリケーションで再生用のサウンドエフェクトをインライン変換しようとしています。(NAudio の再生は、直接再生の場合は少しぎくしゃくしているため、変換)
ファイルをディスクに抽出して再生するのではなく、memoryStream を使用してメモリ内の WAV に変換したいのです。
NAudio ソースを見ると、ストリームが破棄されるまで一部のデータがストリームに書き込まれないように見えますが、これにより MemoryStream が無効になります。私はそれを作り直す必要がありますか、それとも私はそれをすべて間違っていますか?
次のコードを使用すると、無効なヘッダーが表示されます。
コードを置き換えてファイルをディスクに書き込み、破棄してからストリームにリロードすると、すべて問題ありません(ただし、目的に反します)
Private Sub PlaySound(ByVal ms As Stream)
Dim ss As System.Media.SoundPlayer
ss = New System.Media.SoundPlayer
ss.Stream = ms
ss.Load()
Try
ss.PlaySync()
Catch ex As InvalidOperationException
Debug.Print(ex.ToString)
End Try
End Sub
Private Sub ConvertToStream()
Using reader As New Mp3FileReader("C:\KMSounds\sound12.mp3")
Using convertedStream As WaveStream = WaveFormatConversionStream.CreatePcmStream(reader)
'File.Delete("c:\test2.wav")
'Using ms As New FileStream("c:\test2.wav", FileMode.Create)
Using ms As New MemoryStream
Using w As New WaveFileWriter(ms, convertedStream.WaveFormat)
Dim buffer() As Byte = CType(Array.CreateInstance(GetType(Byte), convertedStream.GetReadSize(4000)), Byte())
While True
Dim bytesRead As Integer = convertedStream.Read(buffer, 0, buffer.Length)
If (bytesRead = 0) Then
w.Flush()
Exit While
Else
w.WriteData(buffer, 0, bytesRead)
End If
End While
PlaySound(ms)
End Using
End Using
End Using
End Using
End Sub
System.InvalidOperationException: ウェーブ ヘッダーが破損しています。C:\ Development\Spikes\NAudioConvert\ConvertAudio.vb:78行目
これに関するヒントはありますか?または、非常に小さな MP3 ファイルを再生用に WAV に変換するために使用できる別のライブラリがあれば素晴らしいでしょう。