Главная страница
    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.032 c
3-1094638324
Zif
2004-09-08 14:12
2004.10.10
Как посчитать количество всех строк...


14-1095858515
Mike B.
2004-09-22 17:08
2004.10.10
Модератор на рыбалке


3-1094795235
DA
2004-09-10 09:47
2004.10.10
Полнотекстовый индекс в MSSQL


1-1096349594
Mar gel
2004-09-28 09:33
2004.10.10
Подскажите плз, есть динамически формируемые TMenuItem


14-1095630126
123
2004-09-20 01:42
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский