我正在嘗試使用NAudio庫對播放的某些soundeffects進行一些內聯轉換,以及使用媒體Soundplayer進行實際播放的應用程序。 (我發現NAudio播放有點直接播放,因此轉換有點緊張)將Memorystream中的MP3轉換爲WAV用於播放System.Media.Soundplayer
我真的不想將文件解壓縮到磁盤播放,而是我想將它們轉換爲內存中的WAV使用MemoryStream的。
看一下NAudio源代碼,它似乎並沒有將一些數據寫入流中,直到它被丟棄,但是這會使MemoryStream無效。我應該重做還是我做錯了?
使用下面的代碼我得到一個invalidheader。
如果我更換代碼和文件寫入到磁盤和處置然後重新加載到流一切都很好(但它有點失敗的目的)
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:line 78
有關這方面的任何提示?或者也許另一個庫,我可以用來轉換一些非常小的MP3文件爲WAV播放將是偉大的。
感謝Mark,我將介紹一下如何做到這一點:-) – 2010-09-29 10:51:31