Есть ли способ остановить возникновение исключения «WaveStillPlaying, вызывающего waveOutWrite»?
Я пытаюсь создать музыкальный проигрыватель с такими визуализациями, как представление волн, представление спектра и т. д. При отладке программы я получаю исключение «WaveStillPlaying Calling waveOutWrite».
Я проверил весь код на наличие «MusicList_SelectedIndexChanged». Пытался остановить воспроизведение WaveOut и удалил его. Затем определил AudioFileReader, инициализировал с его помощью WaveOut и начал воспроизведение. Но все равно выбрасываю то же исключение. Как я могу избежать возникновения исключения?
Это код для инициализации и воспроизведения WaveStream:
wO.Stop()
MeteringProvider = Nothing
SampleProvider = Nothing
wO.Dispose()
Try
Dim file As TagLib.File = TagLib.File.Create(MusicPaths(MusicList.SelectedIndex))
If (file.Tag.Pictures.Length > 0) Then
Dim bin = CType(file.Tag.Pictures(0).Data.Data, Byte())
Dim img As Drawing.Bitmap = System.Drawing.Bitmap.FromStream(New System.IO.MemoryStream(bin)).GetThumbnailImage(2500, 2500, Nothing, IntPtr.Zero)
Dim ico As Icon = System.Drawing.Icon.FromHandle(img.GetHicon())
Me.Icon = ico
Else
Me.Icon = My.Resources.ICON
End If
Me.Text = "Music Player - " & MusicList.SelectedItem.ToString
Catch ex As Exception
Me.Icon = My.Resources.ICON
Me.Text = "Music Player - " & MusicList.SelectedItem.ToString
End Try
If (MusicPaths(MusicList.SelectedIndex).EndsWith(".mp3")) Then
afr = New Mp3FileReader(MusicPaths(MusicList.SelectedIndex))
ElseIf (MusicPaths(MusicList.SelectedIndex).EndsWith(".wav")) Then
afr = New WaveFileReader(MusicPaths(MusicList.SelectedIndex))
ElseIf (MusicPaths(MusicList.SelectedIndex).EndsWith(".aiff")) Then
afr = New AiffFileReader(MusicPaths(MusicList.SelectedIndex))
End If
MiniPlayerMode.Visible = True
MiniPlayerMode.Enabled = True
wO = New WaveOut()
SampleRate = afr.WaveFormat.SampleRate
MusicController1.MusicNumber = MusicList.SelectedIndex + 1
MusicController1.ControlCalled = "Playback_PLAY"
MusicController1.PlayPause.Text = ";"
MusicController1.AudioStream = afr
Minipanel.WaveStream = rawWave
If (MusicList.SelectedItem.ToString().Length < 56) Then
MusicName.Text = MusicList.SelectedItem
Minipanel.MusicName = MusicName.Text
Else
Dim str As String = ""
For C As Int32 = 0 To MusicList.SelectedItem.ToString.Length
If (C < 56) Then
str += MusicList.SelectedItem.ToString(C)
End If
Next
MusicName.Text = str & "..."
End If
Minipanel.MusicName = MusicName.Text
rawWave = New RawSourceWaveStream(New IO.MemoryStream(waveData0), afr.WaveFormat) 'Using RawSourceWaveStream To Change SampleRate
SampleProvider = New NAudio.Wave.SampleProviders.SampleChannel(rawWave)
MeteringProvider = New NAudio.Wave.SampleProviders.MeteringSampleProvider(SampleProvider)
wO.Init(rawWave)
If (Spectrum_Viewer1.WaveStream IsNot Nothing) Then Spectrum_Viewer1.WaveStream.Dispose()
Spectrum_Viewer1.WaveStream = rawWave
Spectrum_Viewer1.StreamPosition = 0
rawWave.Position = 0
bfr = 0
TrackBar1.Value = 0
wO.Play()