Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Mikrofon (de)aktivieren (https://www.delphipraxis.net/174055-mikrofon-de-aktivieren.html)

blablab 31. Mär 2013 12:49

Mikrofon (de)aktivieren
 
Hallo!

Ich möchte mein Mikrofon aktivieren und deaktivieren können (Da meine audiodg.exe bei aktiviertem Mikrofon permanent 8% Auslastung erzeugt). Leider ist das Mikrofon nicht im Gerätemanager aufgelistet, es gehört scheinbar zu einem anderen Gerät dazu. Es kann nur mit Systemsteuerung->Sound->Aufnahmegeräte einzeln deaktiviert werden.

Gibt es eine Möglichkeit das mit einem Delphi-Programm oder einer Batch-Datei zu machen?

Grüße
blablab

Aviator 31. Mär 2013 13:13

AW: Mikrofon (de)aktivieren
 
Es gibt ein Tool. Nennt sich DevCon und kann man bei Mircosoft runterladen.
Vielleicht hilft dir das ja weiter.

Aber ich würde mich an deiner Stelle auch mal fragen, wie diese Dauerauslastung zustande kommt. Vielleicht solltest du mal nach einem Treiberupdate suchen. Passiert das nur wenn ein bestimmtes Programm offen ist oder ist diese Auslastung schon beim Systemstart zu sehen?
Analysiere das mal genauer und gib nochmal Rückmeldung. Vielleicht findet sich ja eine bessere Lösung, als einfach das Mikrofon zu deaktivieren.

blablab 31. Mär 2013 13:40

AW: Mikrofon (de)aktivieren
 
Die hohe Auslastung kommt wahrscheinlich von meiner schlechten Soundkarte. Auch wenn ich Musik abspiele ist die Auslastung sehr hoch (um die 5%). Selbst nachdem ich pause drücke bleibt die hohe Auslastung, erst nach Stopp sinkt sie wieder.

Die Treiber sind maximal 0,5 Jahre alt. Ich kann später noch nach neuen schauen, aber deaktivieren würde ich das Mikro gerne trotzdem.

Denn abgesehen davon möchte ich das Mikro auch gerne ausschalten wenn ich es nicht benötige. Ich benutze es vielleicht einmal die Woche, da muss es nicht rund um die Uhr eingeschaltet sein. Ob nun Mute oder ganz Ausschalten ist dann wahrscheinlich Geschmackssache, mir wäre das Ausschalten lieber.

Auf DevCon bin ich schon gestoßen. Allerdings muss das Gerät im Gerätemanager aufgelistet sein, damit ich es hiermit (de)aktivieren kann. Ich vermute aber, dass mein Mikrofon kein wirkliches Gerät ist und das Deaktivieren des Mikrofons etwas ganz anderes ist wie das Deaktivieren eines wirklichen Gerätes. Ich werde auch nicht nach einem Neustart gefragt und es geht auch viel schneller. Ich denke einfach das "Gerät deaktivieren" im Gerätemanager hat nichts zu tun mit dem "Aufnahmegerät deaktivieren" in Systemsteuerung->Sound. Denn dann müsste ja auch danach ein deaktiviertes Gerät im Gerätemanager auftauchen, das tut es aber nicht.

Der.Kaktus 31. Mär 2013 13:48

AW: Mikrofon (de)aktivieren
 
Hi,

such mal nach TAudiomixer (Freeware) ..damit sollte es klappen

Der.Kaktus 31. Mär 2013 14:37

AW: Mikrofon (de)aktivieren
 
Zitat:

Zitat von Der.Kaktus (Beitrag 1209488)
Hi,

such mal nach TAudiomixer (Freeware) ..damit sollte es klappen

Nachtrag..mit dem Example den Mikrofoneingang suchen und ueber "unit MMSystem"..die Werte setzen

hier mal ein Beispiel fuer LineIn

Delphi-Quellcode:
unit UMonitor_ON;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses MMSystem;

function GetMonitoring(
  Mixer: hMixerObj;
  var Control: TMixerControl): MMResult;
  // Returns True on success
var
  Line: TMixerLine;
  Controls: TMixerLineControls;
begin
  ZeroMemory(@Line, SizeOf(Line));
  Line.cbStruct := SizeOf(Line);
  Line.dwComponentType := MIXERLINE_COMPONENTTYPE_SRC_LINE; //LineIN
  Result := mixerGetLineInfo(Mixer, @Line,
    MIXER_GETLINEINFOF_COMPONENTTYPE);
  if Result = MMSYSERR_NOERROR then
  begin
    ZeroMemory(@Controls, SizeOf(Controls));
    Controls.cbStruct := SizeOf(Controls);
    Controls.dwLineID := Line.dwLineID;
    Controls.cControls := 1;
  //  Controls.dwControlType := MIXERCONTROL_CONTROLTYPE_MUTE;
    Controls.dwControlType := MIXERCONTROL_CONTROLTYPE_ONOFF; //checkbox Monitoring 1

    Controls.cbmxctrl := SizeOf(Control);
    Controls.pamxctrl := @Control;
    Result := mixerGetLineControls(Mixer, @Controls,
      MIXER_GETLINECONTROLSF_ONEBYTYPE);
  end;
end;

procedure SetMonitoringValue(
  Mixer: hMixerObj;
  Value: Boolean);
var
  Monitoring: TMixerControl;
  Details: TMixerControlDetails;
  BoolDetails: TMixerControlDetailsBoolean;
  Code: MMResult;
begin
  Code := GetMonitoring(0, Monitoring);
  if Code = MMSYSERR_NOERROR then
  begin
    with Details do
    begin
      cbStruct := SizeOf(Details);
      dwControlID := Monitoring.dwControlID;
      cChannels := 1;
      cMultipleItems := 0;
      cbDetails := SizeOf(BoolDetails);
      paDetails := @BoolDetails;
    end;
    LongBool(BoolDetails.fValue) := Value;
    Code := mixerSetControlDetails(0, @Details,
MIXER_SETCONTROLDETAILSF_VALUE);
  end;
  if Code <> MMSYSERR_NOERROR then
    raise Exception.CreateFmt('SetMonitoringValue failure, '+
      'multimedia system error #%d', [Code]);
end;




procedure TForm1.Button1Click(Sender: TObject);
var
  Monitoring: TMixerControl;
  Code: MMResult;
begin
  SetMonitoringValue(0,True);//TRUE=ON FALSE=OFF
end;

end.

blablab 1. Apr 2013 18:34

AW: Mikrofon (de)aktivieren
 
Leider funktioniert das Code-Beispiel bei mir aus 2 Gründen nicht:
1) Mit Controls.dwControlType := MIXERCONTROL_CONTROLTYPE_ONOFF gibt mixerGetLineControls() den Fehler Nr 2 zurück. (Mit MIXERCONTROL_CONTROLTYPE_MUTE funktioniert es)
2) mixerGetLineInfo() funktioniert nur, wenn das Mikrofon nicht aktiviert ist. Dementsprechen könnte ich das Mikro gar nicht mehr aktivieren, wenn das deaktivieren funktionieren würde.

Auch TAudioMixer funktioniert nicht. Das Mikrofon ist bei mir Mixer Nr. 2 und sobald ich das Mikrofon deaktiviere, verschwindet der Mixer Nr. 2.



Ich sollte den Thread wohl in "Mixer (de)aktivieren" umbenennen, allerdings weiß ich nicht wie das geht...

lbccaleb 1. Apr 2013 22:43

AW: Mikrofon (de)aktivieren
 
Schau dir mal dieses Tool von mir an. Dort geht es zwar nicht um das Mikrofon, allerdings kann man das auch dafür nutzen. Das musst du dir dann allerdings selber zurecht bauen :D
Ich hab keine Zeit und im mom auch keine Lust mich da weiter drum zu kümmern :stupid:

blablab 2. Apr 2013 04:23

AW: Mikrofon (de)aktivieren
 
Juhu, es funktioniert!

Vielen, vielen Dank lbccaleb!!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz