AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Haupt Lautstärke Regeln
Thema durchsuchen
Ansicht
Themen-Optionen

Haupt Lautstärke Regeln

Ein Thema von hedie · begonnen am 24. Feb 2007 · letzter Beitrag vom 30. Dez 2007
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: Haupt Lautstärke Regeln

  Alt 16. Mär 2007, 22:05
Hallo,

hier ist noch ein Link: (ganz nach unten scrollen)
GetVolume()

Davon brauchst du die Funktionen GetMixerControlID() und GetVolume().
Ein Beispiel für LineIn:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  caption:= inttostr(GetVolume(GetMixerControlID(MIXERLINE_COMPONENTTYPE_SRC_LINE)));//LineIn
  //Min= 0
  //Max= 65535
end;
Getestet unter WinXP.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Aike

Registriert seit: 2. Okt 2004
319 Beiträge
 
#12

Re: Haupt Lautstärke Regeln

  Alt 21. Mär 2007, 09:22
Hah, das funktioniert auch alles super für
- MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT,
- MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC,
- MIXERLINE_COMPONENTTYPE_SRC_LINE,
- MIXERLINE_COMPONENTTYPE_SRC_FIRST, aber für das Mikrofon geht es komischerweise nicht.

Ich hab's mit
- MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE,
- MIXERLINE_COMPONENTTYPE_DST_WAVEIN und
- MIXERLINE_COMPONENTTYPE_DST_VOICEIN probiert, aber alle haben nichts zur Folge.
Achim
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Haupt Lautstärke Regeln

  Alt 21. Mär 2007, 18:54
Hallo,

also beim Microfoneingang habe ich es jetzt hinbekommen, das lag an mxcd.cChannels = 2 bei mir ging es nur mit mxcd.cChannels = 1 .
Den Code habe ich jetzt so abgeändert, dass man den linken und rechten Kanal einzeln ansteuern kann, sofern es unterstützt wird.
Die beiden anderen Konstanten MIXERLINE_COMPONENTTYPE_DST_WAVEIN und
MIXERLINE_COMPONENTTYPE_DST_VOICEIN sehen ja etwas anders aus, kann sein dass es deswegen nicht funktioniert.

Delphi-Quellcode:
uses mmsystem;

function GetMixerControlID(CompType: DWORD): DWORD;
var
  mxl: MIXERLINE;
  mxc: MIXERCONTROL;
  mxlc: MIXERLINECONTROLS;
begin
  Result := 0;
  mxl.cbStruct := SizeOf(mxl);
  mxl.dwComponentType := CompType;
  if (mixerGetLineInfo(0, @mxl, MIXER_GETLINEINFOF_COMPONENTTYPE) = MMSYSERR_NOERROR) then
  begin
    mxlc.cbStruct := SizeOf(mxlc);
    mxlc.dwLineID := mxl.dwLineID;
    mxlc.dwControlType := MIXERCONTROL_CONTROLTYPE_VOLUME;
    mxlc.cControls := mxl.cControls;
    mxlc.cbmxctrl := sizeof(mxc);
    mxlc.pamxctrl := @mxc;
    if (mixerGetLineControls(0, @mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE) = MMSYSERR_NOERROR)
      then Result := mxc.dwControlID;
  end;
end;

type
  TVolume = record
    Left, Right: DWord;
    Channels: byte;
end;

function GetVolume(ID: DWORD; Channels: byte = 2) : TVolume;
var
  Volume : Array[0..1] Of TMixerControlDetails_Unsigned;
  mxcd: TMixerControlDetails;
  NoError: boolean;
begin
  if Channels > 2 then
    Channels := 2;
  mxcd.cbStruct := sizeof(mxcd);
  mxcd.dwControlID := ID;
  mxcd.cChannels := Channels;
  mxcd.cMultipleItems := 0;
  mxcd.cbDetails := sizeof(MIXERCONTROLDETAILS_UNSIGNED) * 2;
  mxcd.paDetails := @Volume;
  Result.Left := 0;
  Result.Right := 0;
  Result.Channels:= Channels;
  try
    NoError:= mixerGetControlDetails(0, @mxcd, MIXER_GETCONTROLDETAILSF_VALUE)= MMSYSERR_NOERROR;
    if NoError then
    begin
      Result.Left := Volume[0].dwValue;
      if Channels = 2 then
        Result.Right := Volume[1].dwValue;
    end
    else
    begin
      if Channels= 2 then
        Result := GetVolume(ID, 1);
      if Channels= 1 then
         Result.Channels:= 0;
    end;
  except
    Result.Channels:= 0;
  end;
end;

function SetVolume(ID, Left, Right: DWord; Channels: byte = 2): byte;
var Volume : Array[0..1] Of TMixerControlDetails_Unsigned;
    mxcd: TMixerControlDetails;
    NoError: boolean;
begin
  if Channels> 2 then
    Channels := 2;
  Result := Channels;
  Volume[0].dwValue := Left;
  Volume[1].dwValue := Right;
  with mxcd Do
  begin
    cbStruct := SizeOf(mxcd);
    dwControlID := ID;
    cChannels := Channels;
    cMultipleItems := 0;
    cbDetails := SizeOf(TMixerControlDetails_Unsigned) * 2;
    paDetails := @Volume;
    try
      NoError:= (mixerSetControlDetails(0, @mxcd,MIXER_SETCONTROLDETAILSF_VALUE) = MMSYSERR_NOERROR);
      if not NoError then
      begin
        if Channels= 2 then
          Result := SetVolume(ID, Left, Right,1);
        if Channels= 1 then
          Result:= 0;
      end;
    except
      Result := 0;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  MixerCtrlID: DWord;
begin
  MixerCtrlID := GetMixerControlID(MIXERLINE_COMPONENTTYPE_SRC_LINE);// MIXERLINE_COMPONENTTYPE_SRC_LINE);
  //SetVolume(MixerCtrlID, 65535, 65535);//100 %
  //SetVolume(MixerCtrlID, 32768, 0);//50 % rechts= 0%
  SetVolume(MixerCtrlID, 32768, 32768);//50 % links und rechts gleich laut
  caption:= inttostr(GetVolume(MixerCtrlID).Left);
end;
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Aike

Registriert seit: 2. Okt 2004
319 Beiträge
 
#14

Re: Haupt Lautstärke Regeln

  Alt 23. Mär 2007, 10:22
Abgefahren. Darf ich fragen, wie du darauf gekommen bist, gerade diesen Wert abzuändern? War das irgendwie offensichtlich oder so? Ich seh da eigentlich keinen Zusammenhang o.O
Achim
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: Haupt Lautstärke Regeln

  Alt 23. Mär 2007, 12:15
Zitat von Aike:
Darf ich fragen, wie du darauf gekommen bist, gerade diesen Wert abzuändern? War das irgendwie offensichtlich oder so? Ich seh da eigentlich keinen Zusammenhang o.O
Bei meinem "Volume Control Panel" ist mir aufgefallen, dass der Balance Schieberegler vom Microfoneingang deaktiviert worden ist (siehe Bild). Das bedeutet wohl, dass zumindest mein Microfoneingang nur einen Kanal unterstützt. Daher war es naheliegend bei mxcd.cChannels = 1 einzutragen.
Bei Line In usw. funktioniert das übrigens auch.
Miniaturansicht angehängter Grafiken
balance_141.jpg  
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
FLINKER_FINGER

Registriert seit: 29. Apr 2004
Ort: Berlin
131 Beiträge
 
#16

Re: Haupt Lautstärke Regeln

  Alt 19. Sep 2007, 19:38
Mal eine weitere Frage:

kann man auch irgendwie das andere Mikrofon ansteuern. Ich meine das bei Aufnahme und nicht bei Summe. ( Siehe Bild ( rot markiert))

Wenn ich die Mikrofoneinstellungen bei Summe ( also wiedergabe ) ändere, bringt mir das irgendwie nicht viel...
Miniaturansicht angehängter Grafiken
aufnahme_432.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von ghost007
ghost007

Registriert seit: 31. Okt 2005
Ort: München
1.024 Beiträge
 
Delphi 7 Personal
 
#17

Re: Haupt Lautstärke Regeln

  Alt 10. Nov 2007, 00:01
Hallo,
ich verwende den code von der ersten seite um das mastervolume zu regeln. Jedoch scheint er unter vista nicht zu funktionieren.
Gibt es einen alternativ code für vista?

MfG - Ghost007
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
Benutzerbild von ghost007
ghost007

Registriert seit: 31. Okt 2005
Ort: München
1.024 Beiträge
 
Delphi 7 Personal
 
#18

Re: Haupt Lautstärke Regeln

  Alt 17. Nov 2007, 18:10
*Push*
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#19

Re: Haupt Lautstärke Regeln

  Alt 30. Dez 2007, 10:25
Hallo,

ich möcht dieses Thema nochmal aufgreiffen.

Wie ist es möglich die Haupt-Lautstärke unter
Vista von einem Delphi-Programm aus zu ändern?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#20

Re: Haupt Lautstärke Regeln

  Alt 30. Dez 2007, 11:01
Kurz und Bündig, Ja.


Siehe dazu:
MSDN: Programming Reference
MSDN: DeviceTopology API

und:
MSDN: Vista volume control using Delphi

// edit: Link korrigiert.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz