Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Микрофон

3.1K
16 февраля 2003 года
blindguf
2 / / 16.02.2003
Как сделать регулятор чуствительности(громкости) микрофона?
427
24 февраля 2003 года
Glazunov Oleg
79 / / 20.03.2000
Для работы микрофоном нужно использовать API-функции.
Ниже приведу набросок программы на С, осуществляющий работу с микшером микрофона.
Сначала инициализируем микшер:
int nd=mixerGetNumDevs();
if(nd<1) throw "Отсутствуют микшеры!";
MIXERCAPS caps;
mixerGetDevCaps(0,&caps,sizeof(caps));
WaveOutCheck(mixerOpen(&hMixer,0,Callback,0,CALLBACK_WINDOW));
MIXERLINE line;
line.cbStruct=sizeof(line);
line.dwDestination=1;
line.dwSource=1;
WaveOutCheck(mixerGetLineInfo(hMixer,&line,MIXER_GETLINEINFOF_DESTINATION|MIXER_OBJECTF_HMIXER));
int Connections=line.cConnections;
for(int Source=0;Source<Connections;Source++)
{
line.dwDestination=1;
line.dwLineID=1;
line.dwSource=Source;
WaveOutCheck(mixerGetLineInfo(hMixer,&line,MIXER_GETLINEINFOF_SOURCE|MIXER_OBJECTF_HMIXER));
if(line.dwComponentType==MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE)
break;
}
MIXERCONTROL *Control;
MIXERLINECONTROLS ctrl;
ctrl.cbStruct=sizeof(ctrl);
ctrl.dwLineID=line.dwLineID;
ctrl.cControls=line.cControls;
ctrl.cbmxctrl=sizeof(MIXERCONTROL);
Control=new MIXERCONTROL;
ctrl.pamxctrl=Control;
ctrl.dwControlType=MIXERCONTROL_CONTROLTYPE_VOLUME;
WaveOutCheck(mixerGetLineControls(hMixer,&ctrl,MIXER_GETLINECONTROLSF_ONEBYTYPE|MIXER_OBJECTF_HMIXER));
detailsMicVolume.cbStruct=sizeof(detailsMicVolume);
detailsMicVolume.cChannels=1;
detailsMicVolume.hwndOwner=0;
detailsMicVolume.dwControlID=Control->dwControlID;
detailsMicVolume.cbDetails=sizeof(MIXERCONTROLDETAILS_UNSIGNED);//Control->Metrics.cbCustomData;
detailsMicVolume.paDetails=(MIXERCONTROLDETAILS_UNSIGNED*) new MIXERCONTROLDETAILS_UNSIGNED;
delete Control;

Дальше можно изменять уровень чувствительности микрофона:
((MIXERCONTROLDETAILS_UNSIGNED*)detailsMicVolume.paDetails)->dwValue=Volume;
WaveOutCheck(mixerSetControlDetails(hMixer,&detailsMicVolume,MIXER_OBJECTF_HMIXER));

Считываем текушее значение чувствительности:
WaveOutCheck(mixerGetControlDetails(hMixer,&detailsMicVolume,MIXER_GETCONTROLDETAILSF_VALUE|
MIXER_OBJECTF_HMIXER));
Volume=((MIXERCONTROLDETAILS_UNSIGNED*)detailsMicVolume.paDetails)->dwValue;

Далее закрываем хенделы устройств:
delete (MIXERCONTROLDETAILS_UNSIGNED*)detailsMicVolume.paDetails;
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог