在我的 VB.NET 应用程序中播放作为资源嵌入的 wav 文件(0.034 秒长)时,我遇到了一个奇怪的问题。
我的应用程序应该在按下按钮时异步循环声音,并在释放按钮时停止声音。
问题是按钮被快速按下和释放时似乎有延迟,尤其是在连续多次单击的情况下。
这种延迟使音频听起来断断续续,它还会挂起应用程序,直到对 play() 和 stop() 的调用队列结束。
但是,我注意到如果在运行我的应用程序时同时运行音频播放器(播放声音文件或暂停,而不是停止),延迟或延迟就消失了。
我测试过的播放器有:Windows Media Player、Windows Media Player Classic - Home Cinema、Foobar2000 和 QuickTime。
这是代码:
Option Explicit On
Option Strict On
Public Class frmMain
Private btnPlayPressed As Boolean
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
btnPlayPressed = False
End Sub
Private Sub btnPlay_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles btnPlay.MouseDown
If Not btnPlayPressed Then
My.Computer.Audio.Play(My.Resources.Beep, AudioPlayMode.BackgroundLoop)
btnPlayPressed = True
End If
End Sub
Private Sub btnPlay_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles btnPlay.MouseUp
If btnPlayPressed Then
My.Computer.Audio.Stop()
btnPlayPressed = False
End If
End Sub
Private Sub btnPlay_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles btnPlay.KeyDown
If e.KeyCode.Equals(Keys.Space) Then
btnPlay_MouseDown(sender, Nothing)
End If
End Sub
Private Sub btnPlay_KeyUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles btnPlay.KeyUp
If e.KeyCode.Equals(Keys.Space) Then
btnPlay_MouseUp(sender, Nothing)
End If
End Sub
End Class
我还使用了 VB.NET 中提供的各种其他音频功能,它们都有这个问题,但我坚持使用 My.Computer.Audio,因为它简单易读。
为什么运行音频播放器会消除 My.Computer.Audio.play 的延迟?
有没有办法从我的代码中消除延迟?
其他详细信息:
IDE:Visual Studio 2010 Express
操作系统:Vista sp2 x86/Windows 7 x64