gpt4 book ai didi

.net - 将MP3转换为Memorystream中的WAV以使用System.Media.Soundplayer进行播放

转载 作者:行者123 更新时间:2023-12-03 01:05:06 25 4
gpt4 key购买 nike

我正在尝试使用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:wave header 已损坏。
在System.Media.SoundPlayer.ValidateSoundData(Byte [] data)
在System.Media.SoundPlayer.LoadAndPlay(Int32标志)
在System.Media.SoundPlayer.PlaySync()
在NAudioConvert.ConvertAudio.Playfile(Stream ms)在C:\ Development \ Spikes \ NAudioConvert \ ConvertAudio.vb:第78行

有什么提示吗?或另一个我可以用来将一些很小的MP3文件转换为WAV进行播放的库,将是很棒的。

最佳答案

只有在处理WaveFileWriter时,它才返回到WAV header 并填写正确数量的数据字节(在每次调用WriteData时都进行保存)。但是,根据您的需要,最好制作一个自定义的WaveFileWriter,它可以使数据字节值保持最新。我正在考虑将此添加为NAudio future 版本的选项

关于.net - 将MP3转换为Memorystream中的WAV以使用System.Media.Soundplayer进行播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3810305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com