【发布时间】:2012-11-26 22:19:52
【问题描述】:
在播放作为资源嵌入到我的 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
【问题讨论】: