使用Windows Core Audio API时出现问题

时间:2011-08-28 18:25:15

标签: windows core-audio

我一直在尝试使用Windows音频API来运行程序。 最终结果将是一个程序,用于检查其他音频过程中的音量变化。 我已经查看了Microsoft站点上的一些示例,并对我应该做的事情进行了深入研究。 但是当我尝试实现这个时,我遇到了一些错误。我首先尝试获取所有音频进程运行的列表,实际上只是一分钟的计数。 我正在使用的代码基于Windows站点上的代码,但是当我尝试构建它时,我遇到了错误。两个主要的是:

  1. 'IAudioSessionManager2':没有与此对象关联的GUID
  2. 使用未定义类型'IAudioSessionManager2'
  3. 第二个也有类似的但与IAudioSessionEnumerator有关。

    我对C ++编程很陌生,更习惯于Java,所以我认为使用头文件或其他东西只是一些愚蠢的小错误,我已经包含了.h代码和.cpp代码。 如果有人能够帮助我,我将不胜感激。

    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);
    }
    

1 个答案:

答案 0 :(得分:0)

您有6.0版。您需要下载并安装Windows SDK version 7.1。 IAudioSessionManager2仅适用于Windows 7。