Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "Media";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.035 c
1-1095742639
tse
2004-09-21 08:57
2004.10.10
Арифметические операции с большими целыми числами


8-1090322929
Popovich A.
2004-07-20 15:28
2004.10.10
Последовательный просмотр картинок


1-1095828547
_sulent
2004-09-22 08:49
2004.10.10
&amp;#1064;&amp;#1088;&amp;#1080;&amp;#1092;&amp;#1090;


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


1-1096293534
Lord de Mon
2004-09-27 17:58
2004.10.10
Ошыбки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский