【发布时间】:2010-09-29 14:37:47
【问题描述】:
我正在尝试使用 NAudio 库对某些音效进行内联转换,以便在我的应用程序中使用 Media Soundplayer 进行实际播放。 (我发现 NAudio 播放对于直接播放来说有点紧张,因此转换)
我真的不想将文件提取到磁盘进行播放,而是我想使用 memoryStream 将它们转换为内存中的 WAV。
查看 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() 在 C:\Development\Spikes\NAudioConvert\ConvertAudio.vb:line 78 中的 NAudioConvert.ConvertAudio.Playfile(Stream ms) 处
对此有什么建议吗?或者我可以使用另一个库将一些非常小的 MP3 文件转换为 WAV 进行播放会很棒。
【问题讨论】: