Я пытаюсь использовать библиотеку NAudio для преобразования InLine некоторых звуковых эффектов для воспроизведения с моим приложением, использующим Media Soundplayer для реального воспроизведения. (Я считаю, что воспроизведение NAudio немного нервное для прямого воспроизведения, следовательно, преобразование)
Я действительно не хочу извлекать файлы на диск для воспроизведения, вместо этого я бы хотел преобразовать их в WAV в памяти, используя memoryStream.
Глядя на источник NAudio, выясняется, что он не записывает некоторые данные в Stream до тех пор, пока он не будет удален, но это делает недействительным 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: заголовок волны поврежден.
в System.Media.SoundPlayer.ValidateSoundData (данные байта [])
в System.Media.SoundPlayer.LoadAndPlay (флаги Int32)
в System.Media.SoundPlayer.PlaySync ()
в NAudioConvert.ConvertAudio.Playfile (поток мс) в C: \ Development \ Spikes \ NAudioConvert \ ConvertAudio.vb: строка 78
Какие-нибудь советы по этому поводу? или, может быть, подойдет другая библиотека, которую я могу использовать для преобразования очень маленьких файлов MP3 в формат WAV для воспроизведения.