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
OS: Vista sp2 x86/ Windows 7 x64