Results 1 to 2 of 2

Thread: [VB6, Vista+] Core Audio - Peak Meter

  1. #1

    Thread Starter
    PowerPoster
    Join Date
    Jul 2010
    Location
    NYC
    Posts
    2,784

    [VB6, Vista+] Core Audio - Peak Meter

    Core Audio - Peak Meter
    Name:  capeaks.jpg
Views: 183
Size:  24.8 KB


    This demo is in a response to a question by Peterd51, asking if there was a way to detect if audio was playing. CoreAudio provides an easy way to watch peaks for a peak meter, so obviously if that's 0 no audio is playing, and non-zero if audio is playing.

    Here we display a Audio detected/No audio label for the yes/no answer, then also a peak meter using a ProgressBar, and a list of the raw values the program is receiving. This is basically a VB version of Microsoft's Peak Meter Example.

    The code is pretty simple,
    Code:
    Option Explicit
    Private pDevice As IMMDevice
    Private pEnum As MMDeviceEnumerator
    Private pMeterInfo As IAudioMeterInformation
    Private nCount As Long
    Private Sub Command1_Click()
    Timer1.Interval = CLng(Text1.Text)
    If (pDevice Is Nothing) Then
        Set pEnum = New MMDeviceEnumerator
        pEnum.GetDefaultAudioEndpoint eRender, eConsole, pDevice
        If (pDevice Is Nothing) = False Then
            pDevice.Activate IID_IAudioMeterInformation, CLSCTX_INPROC_SERVER Or CLSCTX_INPROC_HANDLER Or CLSCTX_LOCAL_SERVER Or CLSCTX_REMOTE_SERVER, 0&, pMeterInfo
            If (pMeterInfo Is Nothing) = False Then
                Timer1.Enabled = True
            Else
                Debug.Print "Failed to activate meter."
            End If
        Else
            Debug.Print "Failed to get default endpoint."
        End If
    Else
        Timer1.Enabled = True
    End If
    End Sub
    
    Private Sub Timer1_Timer()
    Dim snValue As Single
    If (pMeterInfo Is Nothing) = False Then
        pMeterInfo.GetPeakValue snValue
        List1.AddItem CStr(snValue * 100), 0
        ProgressBar1.Value = snValue * 100
        If snValue = 0 Then
            Label4.Caption = "No audio."
            nCount = nCount + 1
            If nCount > 5 Then
                'definitely not playing
            End If
        Else
            nCount = 0
            Label4.Caption = "Audio detected"
        End If
    End If
    End Sub
    
    Private Sub Command2_Click()
    Timer1.Enabled = False
    End Sub
    
    Private Sub Form_Unload(Cancel As Integer)
    Set pMeterInfo = Nothing
    Set pDevice = Nothing
    Set pEnum = Nothing
    End Sub
    Requirements
    -Core Audio is only available on Windows Vista and newer.
    -oleexp.tlb v4.7 or higher
    -oleexp addon modules mIID.bas and mCoreAudio.bas (included in the oleexp download)

    Core Audio in VB6
    If you're not already familiar with using Core Audio in VB6, you can check out my earlier projects:
    [VB6, Vista+] Core Audio Basics
    [VB6, Vista+] Core Audio - Change the system default audio device
    [VB6, Vista+] Core Audio - Monitor for disabled/active, default, and property changes
    Attached Files Attached Files

  2. #2
    New Member
    Join Date
    Apr 2021
    Posts
    11

    Re: [VB6, Vista+] Core Audio - Peak Meter

    Hi fafalone,

    this is great, thanks.

    Regards
    Peter

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width