NAudio 的错误,在 MemoryStream,VB 中播放 mp3

Posted

技术标签:

【中文标题】NAudio 的错误,在 MemoryStream,VB 中播放 mp3【英文标题】:Bug with NAudio, play mp3 in MemoryStream, VB 【发布时间】:2015-06-24 17:28:52 【问题描述】:

我有一个功能可以从运行良好的资源中读取我的 mp3。

不幸的是,如果我将鼠标按在按钮上 30、40 或 50 次,最终会导致 waveOut.init 崩溃:( " AlreadyAllocated calling waveOutOpen " )

Public waveOut As WaveOut = New WaveOut

Private Sub Panel_Bouton_MouseEnter(sender As Object, e As EventArgs) Handles Panel_Bouton.MouseEnter
    Play_Sound()
End Sub

Public Sub Play_Sound()
    Dim mp3file As MemoryStream = New MemoryStream(My.Resources.Clic)
    'Clic.mp3 is in my Resources
    Dim mp3Reader As Mp3FileReader = New Mp3FileReader(mp3file)

    If waveOut.PlaybackState = PlaybackState.Playing Then
        waveOut.Stop()
        ' I tried this but no effect...
    End If

    waveOut.Init(mp3Reader)
    waveOut.Play()
End Sub

【问题讨论】:

【参考方案1】:

我建议不要在WaveOut 上不断调用 Init。相反,只需要一个(看起来你也可以只拥有一个Mp3FileReader),然后在Play_Sound 函数中,设置mp3Reader.Position = 0 并重新启动你的WaveOut 实例(如果它停止了)。 (我从您的代码 sn-p 中假设您永远不想同时播放多个声音实例)。

【讨论】:

谢谢,这样更好。

以上是关于NAudio 的错误,在 MemoryStream,VB 中播放 mp3的主要内容,如果未能解决你的问题,请参考以下文章

无法播放用 naudio 录制的音频流

PCM Wave 文件中的数据长度使用 MemoryStream 和 WaveFileWriter

记录来自 NAudio WaveIn 的输入,并将输出保存到字节数组

将 MemoryStream 文件存储到 Azure Blob

wma压缩音频文件使用Naudio抛出错误

用于多线程的 NAudio:缓冲区已在播放错误时排队