Como detectar a presença de um dispositivo de gravação padrão no sistema?
Pergunta
Como posso detectar se o sistema possui um dispositivo de gravação padrão instalado?Aposto que isso pode ser feito através de algumas chamadas para a API Win32, alguém tem alguma experiência com isso?
Estou falando sobre fazer isso através de código, não abrindo o painel de controle e dando uma olhada nas opções de som.
Solução
Usando o SDK do DirectX, você pode chamar DirectSoundCaptureEnumerate, que chamará sua função DSEnumCallback para cada dispositivo DirectSoundCapture no sistema.O primeiro parâmetro passado para seu DSEnumCallback é um LPGUID, que é o “Endereço do GUID que identifica o dispositivo que está sendo enumerado, ou NULL para o dispositivo primário”.
Se tudo que você precisa fazer é descobrir se um dispositivo de gravação está presente (não acho que isso seja bom o suficiente se você realmente precisa saber o dispositivo padrão), você pode usar waveInGetNumDevs:
#include <tchar.h>
#include <windows.h>
#include "mmsystem.h"
int _tmain( int argc, wchar_t *argv[] )
{
UINT deviceCount = waveInGetNumDevs();
if ( deviceCount > 0 )
{
for ( int i = 0; i < deviceCount; i++ )
{
WAVEINCAPSW waveInCaps;
waveInGetDevCapsW( i, &waveInCaps, sizeof( WAVEINCAPS ) );
// do some stuff with waveInCaps...
}
}
return 0;
}
Outras dicas
Existe uma API de áudio de código aberto chamada PortoÁudio que tem um método que você pode usar.Acho que o método se chama Pa_GetDeviceInfo() ou algo assim.
A API win32 tem uma função chamada ondaInGetNumDevs por isso.