Problemer med Windows Core Audio API'er

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har forsøgt at få et program, der bruger Windows Audio APIs.
Slutresultatet er et program, der kontrollerer volumenændringer i anden lydproces.
Jeg har set på nogle af eksemplerne på Microsofts websted og har en undersatanding af, hvad jeg skal gøre.
Men når jeg forsøger at gennemføre dette, får jeg nogle fejl. Jeg starter med at forsøge at få en liste, ja faktisk bare en tæller i minuttet, af alle lydprocesserne, der kører.
Koden jeg bruger er baseret på koden på Windows-webstedet, men jeg får fejl, når jeg forsøger at bygge den. De to vigtigste er:



  1. 'IAudioSessionManager2': Ingen GUID er blevet tilknyttet dette objekt

  2. brug af udefineret type 'IAudioSessionManager2'



Der er også en lignende for den anden, men relateret til IAudioSessionEnumerator.


Jeg er meget ny til C ++ programmering, mere vant til Java, så jeg tænker på, at det er bare en fjollet lille fejl at gøre med headerfiler eller noget, jeg har inkluderet .h-koden og .cpp-koden nedenfor.
Hvis nogen ville være i stand til at hjælpe mig, ville det være meget værdsat.


GetProcess.h


#ifndef GETPROCESS\_H
#define GETPROCESS\_H
#define SAFE\_RELEASE(p) { if ( (p) ) { (p)->Release(); (p) = 0; } }

#include<Audiopolicy.h>
#include<Mmdeviceapi.h>
#include <stdio.h>
#include <iostream>

using namespace std; 
struct IAudioSessionManager2;
struct IAudioSessionEnumerator;
struct IAudioSessionControl;
struct IMMDevice;
struct IMMDeviceEnumerator;

ref class GetProcess
{
public:
    GetProcess();
};
#endif


GetProcess.cpp


#include "StdAfx.h"
#include "GetProcess.h"
#include<Audiopolicy.h>
#include<Mmdeviceapi.h>
#include <stdio.h>
#include <iostream>
#include <windows.h>


GetProcess::GetProcess()
{
    IMMDeviceEnumerator* deviceEnumerator = NULL;
    IMMDevice* device = NULL;
    IAudioSessionManager2* sessionManager = NULL;
    IAudioSessionEnumerator* sessionEnumerator = NULL;
    IAudioSessionControl* session = NULL;


    int numberOfProcesses = 0;
    int numberOfActiveProcesses = 0;

    AudioSessionState state;

    //create device enumerator
    CoCreateInstance(\_\_uuidof(MMDeviceEnumerator), NULL, CLSCTX\_ALL, \_\_uuidof(IMMDeviceEnumerator), (void**)&deviceEnumerator);
    // get default device
    deviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &device);

    // activate session manager
    device->Activate(\_\_uuidof(IAudioSessionManager2), CLSCTX\_ALL, NULL, (void**)&sessionManager);
    //// make enum
    sessionManager->GetSessionEnumerator(&sessionEnumerator);
    sessionEnumerator ->GetCount(&numberOfProcesses);
    for (int i = 0; i < numberOfProcesses; i++)
    {
        sessionEnumerator->GetSession(i, &session);
        session->GetState(&state);
        if (state == 1)
        {
            numberOfActiveProcesses++;
        }
        SAFE\_RELEASE(session);
    }

    //CLEANUP

    SAFE\_RELEASE(deviceEnumerator);
    SAFE\_RELEASE(device);
    SAFE\_RELEASE(sessionEnumerator);
    SAFE\_RELEASE(sessionManager);
}

Bedste reference


Du har version 6.0. Du skal downloade og installere Windows SDK version 7.1. IAudioSessionManager2 er kun tilgængelig på Windows 7. [3]