.net实时应用音频幅度数据

时间:2018-07-25 16:29:31

标签: c# vb.net audio

我正在编写一个简单的应用程序(vb.net或c#),当游戏的响度达到某个阈值时,它会单击鼠标: 我需要一个可以实时更改的数字,以显示特定应用程序的输出声音的幅度,无论是否拦截音频。我经验不足,因此无法在NAudio library中找到解决方案。

代码(“”被替换为“ //”,因此它们被彩色显示为注释而不是引号):

Public Class Form1
    Public Const MOUSEEVENTF_LEFTDOWN = &H2
    Public Const MOUSEEVENTF_LEFTUP = &H4
    Declare Function apimouse_event Lib "user32.dll" Alias "mouse_event" (ByVal dwFlags As Int32, ByVal dX As Int32, ByVal dY As Int32, ByVal cButtons As Int32, ByVal dwExtraInfo As Int32) As Boolean

    Dim shouldDetect As Boolean = True

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        registerHotkey(Me, 1, "Z", KeyModifier.Alt) //Alt + Z
    End Sub

#Region "hotkey stuff"
#Region "Declarations - WinAPI, Hotkey constant and Modifier Enum"
    Private Declare Function RegisterHotKey Lib "user32" _
        (ByVal hwnd As IntPtr, ByVal id As Integer, ByVal fsModifiers As Integer, ByVal vk As Integer) As Integer

    Private Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As IntPtr, ByVal id As Integer) As Integer

    Public Const WM_HOTKEY As Integer = &H312

    Enum KeyModifier
        None = 0
        Alt = &H1
        Control = &H2
        Shift = &H4
        Winkey = &H8
    End Enum
#End Region

#Region "Hotkey registration, unregistration and handling"
    Public Shared Sub registerHotkey(ByRef sourceForm As Form, keyID As Integer, ByVal triggerKey As String, ByVal modifier As KeyModifier)
        RegisterHotKey(sourceForm.Handle, keyID, modifier, Asc(triggerKey.ToUpper))
    End Sub
    Public Shared Sub unregisterHotkeys(ByRef sourceForm As Form)
        UnregisterHotKey(sourceForm.Handle, 1)
    End Sub
    Public Shared Sub handleHotKeyEvent(ByVal hotkeyID As IntPtr)
        Select Case hotkeyID
            Case 1
                Form1.toggleActive()
        End Select
    End Sub

    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        If m.Msg = WM_HOTKEY Then
            handleHotKeyEvent(m.WParam)
        End If
        MyBase.WndProc(m)
    End Sub

    Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
        unregisterHotkeys(Me)
    End Sub
#End Region
#End Region

    Public Sub toggleActive()
        If Timer1.Enabled Then
            Timer1.Stop()
        Else
            Timer1.Start()
        End If
    End Sub

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        If shouldDetect Then
            If loudness >= 100 Then //loudness should be controlled by live audio data
                Call apimouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
                Call apimouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
                Call apimouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
                Call apimouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
                shouldDetect = False
                waitTimer.Start() //pauses audio detection because click sequence produces loud sounds
            End If
        End If
    End Sub

    Private Sub waitTimer_Tick(sender As Object, e As EventArgs) Handles waitTimer.Tick
        shouldDetect = True
        waitTimer.Stop()
    End Sub
End Class

0 个答案:

没有答案