检测音频是否已停止播放

问题描述:

是否可以确定音频文件是否已停止播放?
音频停止播放后,我需要触发Sub检测音频是否已停止播放

我发挥的音频:

My.Computer.Audio.Play(My.Resources.music, AudioPlayMode.Background) 
callSubMethodHere() 

但它触发连声音还没有完成
我试图使用方法:

My.Computer.Audio.Play(My.Resources.Second, AudioPlayMode.WaitToComplete) 
callSubMethodHere() 

是的!在执行Sub之前,它会等待音频完成播放。但它冻结了我的程序,我的客户不想要它。

有没有办法通过以下方式来确定它:If My.Computer.Audio.Stop = True还是别的?虽然在互联网上没有找到任何东西。似乎msdn也没有它。

请帮忙吗? vb.netc#会做。谢谢!

+0

通常像这样的事件与处理,例如“AudioFinishedEvent”或类似的东西。然而,快速浏览文档似乎表明没有任何事件,这是一个非常基本的功能。如果是这种情况,我会建议你找到一种替代方法来播放音频,其中一种支持事件 – musefan

+0

也许你可以[检查这个答案](https://stackoverflow.com/a/17645100/838807),它使用Windows Media Player库。我从来没有使用它,但根据答案,它似乎支持事件处理音频结束 – musefan

+0

感谢您的建议。我会尝试。 – kiLLua

使用异步/等待。延伸阅读:https://msdn.microsoft.com/en-us/library/hh191443.aspx

Class LockingWithAwait 
Public Sub Test() 
    DoSomething() 
End Sub 

Private Sub doSomething() 
    Await Task.Run(Function() PlayTheMusicWithLock()) 
    CallSubMethodHere() 
End Sub 

Private Sub PlayTheMusicWithLock() 
    My.Computer.Audio.Play(My.Resources.Second, AudioPlayMode.WaitToComplete) 
End Sub 

Private Sub CallSubMethodHere() 
    Console.WriteLine("Hello world.") 
End Sub 
End Class 
+0

这就是Await Task.Run(Function()PlayTheMusicWithLock()) 的功能。它在完成之前不会执行下面的函数。 如果他将CallSubMethodHere()放在PlayTheMusicWithLock()中,并且想要在他的Form中更改某些内容,那么他​​需要回调等。 –