Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.10;
Скачать: CL | DM;

Вниз

Микрофон вкл/выкл   Найти похожие ветки 

 
Sky Knight ©   (2004-07-20 04:13) [0]

Доброго времени суток всем!

Вот такой вопрос. Как средствами WinAPI или как-либо еще включать или отключать запись с микрофона? Возможно ли сделать это в пределах десятка строк, или надо писать огромную процедуру? :-) Просмотрел несколько исходников - все запутанно, некомментировано и страшно :-)

Заранее благодарен
Sky Knight


 
Константинов ©   (2004-07-20 23:17) [1]

Не так все уж и страшно.
Ну не десять строк, чуть больше...

procedure MuteMicrophone ( const Mute : boolean );
 var hmix : HMIXER;
     mxl  : TMixerLine;
     mxc  : TMixerControl;
     mxlc : TMixerLineControls;
     mxcd : TMIXERCONTROLDETAILS;
     Data : integer;
begin
 if mixerOpen(@hmix, WAVE_MAPPER, 0,0,0 ) <> MMSYSERR_NOERROR then Exit;
 mxl.cbStruct := SizeOf ( mxl );
 mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;
 if mixerGetLineInfo(FMixerHandle,@mxl,MIXER_GETLINEINFOF_COMPONENTTYPE) <> MMSYSERR_NOERROR then Exit;
 mxlc.cbStruct := SizeOf ( mxlc );
 mxlc.dwLineID := mxl.dwLineID;
 mxlc.dwControlType := MIXERCONTROL_CONTROLTYPE_MUTE;
 mxlc.cControls := 1;
 mxlc.cbmxctrl := SizeOf( TMixerControl );
 mxlc.pamxctrl := @mxc;
 mxc.cbStruct := SizeOf ( mxc );
 if mixerGetLineControls(FMixerHandle,@mxlc,MIXER_GETLINECONTROLSF_ONEBYTYPE)
  <> MMSYSERR_NOERROR then Exit;
 mxcd.cbStruct := sizeof(mxcd);
 mxcd.dwControlID := mxc.dwControlID;
 mxcd.cChannels := 1  
 mxcd.cMultipleItems :=0;
 mxcd.cbDetails := 4;
 Data := integer( Mute );
 mxcd.paDetails := @Data;
 mixerSetControlDetails(FMixerHandle,@mxcd,MIXER_SETCONTROLDETAILSF_VALUE);
end;

Извиняюсь могут быть мелкие ошибочки :)


 
Огромное Кулясищще ©   (2004-07-21 00:17) [2]

На тот случай, если ошибочки есть.


function SetMicrophoneVolumeMute(bMute: Boolean): Boolean;
var
 hMix: HMIXER;
 mxlc: MIXERLINECONTROLS;
 mxcd: TMIXERCONTROLDETAILS;
 vol: TMIXERCONTROLDETAILS_UNSIGNED;
 mxc: MIXERCONTROL;
 mxl: TMixerLine;
 intRet: Integer;
 nMixerDevs: Integer;
 mcdMute: MIXERCONTROLDETAILS_BOOLEAN;
begin
 // Check if Mixer is available
 // &#220;berpr&#252;fen, ob ein Mixer vorhanden ist
 nMixerDevs := mixerGetNumDevs();
 if (nMixerDevs < 1) then
 begin
   Exit;
 end;

 // open the mixer
 // Mixer &#246;ffnen
 intRet := mixerOpen(@hMix, 0, 0, 0, 0);
 if intRet = MMSYSERR_NOERROR then
 begin
   mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;
   mxl.cbStruct        := SizeOf(mxl);

   // mixerline info
   intRet := mixerGetLineInfo(hMix, @mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);

   if intRet = MMSYSERR_NOERROR then
   begin
     ZeroMemory(@mxlc, SizeOf(mxlc));
     mxlc.cbStruct := SizeOf(mxlc);
     mxlc.dwLineID := mxl.dwLineID;
     mxlc.dwControlType := MIXERCONTROL_CONTROLTYPE_MUTE;
     mxlc.cControls := 1;
     mxlc.cbmxctrl := SizeOf(mxc);
     mxlc.pamxctrl := @mxc;

     // Get the mute control
     // Mute control ermitteln
     intRet := mixerGetLineControls(hMix, @mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE);

     if intRet = MMSYSERR_NOERROR then
     begin
       ZeroMemory(@mxcd, SizeOf(mxcd));
       mxcd.cbStruct := SizeOf(TMIXERCONTROLDETAILS);
       mxcd.dwControlID := mxc.dwControlID;
       mxcd.cChannels := 1;
       mxcd.cbDetails := SizeOf(MIXERCONTROLDETAILS_BOOLEAN);
       mxcd.paDetails := @mcdMute;

       mcdMute.fValue := Ord(bMute);

       // set, unset mute
       // Stumsschalten ein/aus
       intRet := mixerSetControlDetails(hMix, @mxcd,
         MIXER_SETCONTROLDETAILSF_VALUE);
         {
         mixerGetControlDetails(hMix, @mxcd,
                                MIXER_GETCONTROLDETAILSF_VALUE);
         Result := Boolean(mcdMute.fValue);
         }
       Result := intRet = MMSYSERR_NOERROR;

       if intRet <> MMSYSERR_NOERROR then
         ShowMessage("SetControlDetails Error");
     end
     else
       ShowMessage("GetLineInfo Error");
   end;

   intRet := mixerClose(hMix);
 end;
end;


P.S.: uses MMSystem;



Страницы: 1 вся ветка

Текущий архив: 2004.10.10;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.029 c
14-1095235276
ghg
2004-09-15 12:01
2004.10.10
вопрос знатокам фортрана


4-1094601813
][ncognito
2004-09-08 04:03
2004.10.10
Своевременное реагирование...


6-1091143428
rosl
2004-07-30 03:23
2004.10.10
сообщение


3-1094748738
Vigo
2004-09-09 20:52
2004.10.10
Вопрос по работе с таблицами БД через TClientDataSet


6-1091282532
alex18071
2004-07-31 18:02
2004.10.10
Учет интернет-трафика