c# VB.Net如何不重置声音调用System.Media.SoundPlayer
- sp.PlayLooping() 可以异步循环播放声音,但重新调用会导致声音重置
- sp.Play() 播放完毕后无返回
- sp.PlaySync() 会导致UI阻塞
如何才能异步循环播放声音,并且重复调用播放时不会导致声音被重置,方法就是用新线程去播放声音,用线程阻塞等待播放或者停止的命令,代码如下:
sp.SoundLocation = file
Dim tds = New Threading.ThreadStart(
Sub()
Try
Do While 是否需要关闭进程 = False
If 是否需要播放 And 是否正在播放 = False Then
sp.PlayLooping()
是否正在播放 = True
End If
播放阻塞.Reset()
播放阻塞.WaitOne()
Loop
Catch ex As Exception
MsgBox("加载声音异常:" & ex.Message & vbCrLf & "声音文件位置:" & file)
End Try
End Sub)
td = New Threading.Thread(tds)
td.Start()
利用这个思路还可以知道当前声音播放的位置,调用stop也会立刻终止声音。
完整代码传送门https://download.csdn.net/download/meiren777/16681647