Как программно получить имя устройства ввода звука по умолчанию в Windows XP? - PullRequest
2 голосов
/ 27 апреля 2011

Как программно получить имя устройства ввода звука по умолчанию в Windows XP (например, «Realtek AC97 Audio»)?

Я могу получить к нему доступ через раздел реестра "HKEY_CURRENT_USER \ Software \ Microsoft \ Multimedia \ Sound Mapper", но я не уверен, всегда ли это надежно. Кроме того, я могу получить имена всех устройств с помощью waveInGetDevCaps () api, но я не уверен, как получить имя аудиоустройства по умолчанию, используя его.

Спасибо

Ответы [ 2 ]

2 голосов
/ 27 апреля 2011

Попробуйте использовать WAVE_MAPPER:

#include <windows.h>
#include <stdio.h>

void CALLBACK waveInProc(HWAVEIN hwi, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2) {
    printf("Device opened for recording!\n");
}

int main(void) {
    HWAVEIN hwi;
    WAVEFORMATEX wfx;
    WAVEINCAPS wic;
    int sampleRate = 44100;

    wfx.wFormatTag = WAVE_FORMAT_PCM;
    wfx.nChannels = 2;
    wfx.nSamplesPerSec = sampleRate;
    wfx.nAvgBytesPerSec = sampleRate * 2;
    wfx.wBitsPerSample = 16;
    wfx.nBlockAlign = wfx.nChannels * wfx.wBitsPerSample / 8;
    wfx.cbSize = 0;

    //Get capabilities using WAVE_MAPPER (ID for Microsoft default assigned device)
    waveInOpen(&hwi, WAVE_MAPPER, &wfx, (DWORD) &waveInProc, 0, CALLBACK_FUNCTION);
    waveInGetDevCaps(WAVE_MAPPER, &wic, sizeof(wic));

    //Use the received manufacturer id to get the device's real name
    waveInGetDevCaps(wic.wMid, &wic, sizeof(wic));
    printf("%s\n", wic.szPname);

    return 1;
}
1 голос
/ 27 апреля 2011

OpenAL на помощь!Поскольку OpenAL позволяет запрашивать информацию такого типа, то как это сделать, должно быть скрыто в исходном коде.

При копании в нем обнаруживается этот код , что приводит к waveInGetDevCaps .

Структура WAVEINCAPS содержит, помимо других данных, имяустройство.

...