Доброго времени суток!
Может есть какой-нибудь способ получить доступ к основному буферу микрофона и следить за изменениями или мерять скачки нагрузки на джеке, если такое вообще возможно программно.
Важный момент: нужно определить активность микрофона, а не его подключение в разъём, например, определять активацию\деактивацию из другого приложения.
Вариант с хуками вызовов waweIn... и directsound не подходит.
Здравствуйте, monkeycoder, Вы писали:
M>Доброго времени суток!
M>Может есть какой-нибудь способ получить доступ к основному буферу микрофона и следить за изменениями или мерять скачки нагрузки на джеке, если такое вообще возможно программно.
Что бы мерить нагрузку надо одновременно измерять ток и напр. если железо не позволяет то никак.
M>Важный момент: нужно определить активность микрофона, а не его подключение в разъём, например, определять активацию\деактивацию из другого приложения.
M>Вариант с хуками вызовов waweIn... и directsound не подходит. 
Тогда пиши свой драйвер.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, monkeycoder, Вы писали:
M>>Доброго времени суток!
M>>Может есть какой-нибудь способ получить доступ к основному буферу микрофона и следить за изменениями или мерять скачки нагрузки на джеке, если такое вообще возможно программно.
А>Что бы мерить нагрузку надо одновременно измерять ток и напр. если железо не позволяет то никак.
M>>Важный момент: нужно определить активность микрофона, а не его подключение в разъём, например, определять активацию\деактивацию из другого приложения.
M>>Вариант с хуками вызовов waweIn... и directsound не подходит.
А>Тогда пиши свой драйвер.
Если драйвер то тогда нужно ещё убедить пользователя его использовать.
Должен быть более изящный путь...
В XP есть функция для получения инфы о состоянии линии используемой микрофоном
mixerGetLineInfo которая в качестве результата заполняет структуру MIXERLINE
typedef struct {
DWORD cbStruct;
DWORD dwDestination;
DWORD dwSource;
DWORD dwLineID;
DWORD fdwLine;
DWORD dwUser;
DWORD dwComponentType;
DWORD cChannels;
DWORD cConnections;
DWORD cControls;
CHAR szShortName[MIXER_SHORT_NAME_CHARS];
CHAR szName[MIXER_LONG_NAME_CHARS];
struct {
DWORD dwType;
DWORD dwDeviceID;
WORD wMid;
WORD wPid;
MMVERSION vDriverVersion;
CHAR szPname[MAXPNAMELEN];
} Target;
} MIXERLINE;
Якобы в параметр fdwLine должен устанавливатся флаг MIXERLINE_LINEF_ACTIVE когда она активна, но этот флаг установлен всегда как и другие флаги одновременно.