如何在NAudio中循环播放? (VB.NET)

问题描述 投票:0回答:2

我尝试从资源加载 mp3,它成功了。但我想要循环播放 我四处搜寻,却一无所获…… 这是代码:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim mp3 As MemoryStream = New MemoryStream(My.Resources.RequiemAtDusk)
        Dim read As Mp3FileReader = New Mp3FileReader(mp3)
        Dim waveOut As WaveOut = New WaveOut
        waveOut.Init(read)
        waveOut.Play()
    End Sub
vb.net naudio
2个回答
1
投票

所以我做到了:

Public Class LoopStream
        Inherits WaveStream

        Private sourceStream As WaveStream

        Public Sub New(ByVal sourceStream As WaveStream)
            Me.sourceStream = sourceStream
            Me.EnableLooping = True
        End Sub

        Public Property EnableLooping As Boolean

        Public Overrides ReadOnly Property WaveFormat As WaveFormat
            Get
                Return sourceStream.WaveFormat
            End Get
        End Property

        Public Overrides ReadOnly Property Length As Long
            Get
                Return sourceStream.Length
            End Get
        End Property

        Public Overrides Property Position As Long
            Get
                Return sourceStream.Position
            End Get
            Set(ByVal value As Long)
                sourceStream.Position = value
            End Set
        End Property

        Public Overrides Function Read(ByVal buffer As Byte(), ByVal offset As Integer, ByVal count As Integer) As Integer
            Dim totalBytesRead As Integer = 0

            While totalBytesRead < count
                Dim bytesRead As Integer = sourceStream.Read(buffer, offset + totalBytesRead, count - totalBytesRead)

                If bytesRead = 0 Then

                    If sourceStream.Position = 0 OrElse Not EnableLooping Then
                        Exit While
                    End If

                    sourceStream.Position = 0
                End If

                totalBytesRead += bytesRead
            End While

            Return totalBytesRead
        End Function
    End Class

从资源时间循环播放 MP3!

Private waveOut As WaveOut

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If waveOut Is Nothing Then
            Dim mp3file As MemoryStream = New MemoryStream(My.Resources.RequiemAtDusk) '' You can use your MP3 file here
            Dim reader As Mp3FileReader = New Mp3FileReader(mp3file)
            Dim [loop] As LoopStream = New LoopStream(reader)
            waveOut = New WaveOut()
            waveOut.Init([loop])
            waveOut.Play()
        Else
            waveOut.[Stop]()
            waveOut.Dispose()
            waveOut = Nothing
        End If
    End Sub

0
投票

这对我有用:)

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) 处理 MyBase.Load

定时器1.间隔= 1000 定时器1.开始

结束子

将 WaveOut 调暗为 WaveOut = 新 WaveOut

函数soundtrack()

        Dim mp3file As MemoryStream = New MemoryStream(My.Resources.RequiemAtDusk) '' You can use your MP3 file here
        Dim reader As Mp3FileReader = New Mp3FileReader(mp3file)

 
        waveOut.Init([reader)
        waveOut.Play()
  
 End Function

私有子 Timer1_Tick(发送者作为对象,e 作为 EventArgs)Handless Timer1.Tick

如果 waveout.PlaybackState = 0 那么 原声带() 结束如果

结束子

© www.soinside.com 2019 - 2024. All rights reserved.