![]() |
Haupt Lautstärke Regeln
Hallo
Die einen denken sicher.. ach mann wieder mal jemand der die suche nicht benutzt... doch ich habe sie benutzt Wie ich die Wave Lautstärke regeln kann weiss ich, aber ich möchte die HauptLautstärke regeln Hoffe ihr habt ne idee Danke grüsschen |
Re: Haupt Lautstärke Regeln
für wave benutze ich diesen code
Delphi-Quellcode:
kann man den irgendwie für die "Hauptlautstärke" umwandeln?
procedure SetVolume(const volL, volR: Word);
var hWO: HWAVEOUT; waveF: TWAVEFORMATEX; vol: DWORD; begin // init TWAVEFORMATEX FillChar(waveF, SizeOf(waveF), 0); // open WaveMapper = std output of playsound waveOutOpen(@hWO, WAVE_MAPPER, @waveF, 0, 0, 0); vol:= volL + volR shl 16; // set volume waveOutSetVolume(hWO, vol); waveOutClose(hWO); end; |
Re: Haupt Lautstärke Regeln
Hallo Claudio,
mit waveOutSetVolume() kontrollierst du nur die Lautstärke eines speziellen Audio Device. Vielleicht hilft dir ein Blick auf diesen ![]() Grüße vom marabu |
Re: Haupt Lautstärke Regeln
Danke
Das problem
Delphi-Quellcode:
er kennt aVolume nicht
procedure SetVolume(aVolume:Byte);
var Volu: TVolumeRec; begin Volu.LeftVolume := aVolume shl 8; Volu.RightVolume:= Volu.LeftVolume; auxSetVolume(UINT(DeviceIndex), Volu.LongVolume) ; end; |
Re: Haupt Lautstärke Regeln
:wall: Ok habs herausgefunden
hatte ne zweite Prozedure mit gleichem namen |
Re: Haupt Lautstärke Regeln
Irgendwie funktioniert das nicht....
Kann es daran liegen, das ich SoundMax für die Steuerung benutze und nicht den Windows Regler? |
Re: Haupt Lautstärke Regeln
[code=delphi]uses MMSystem;
const MasterVolumeControl = 0; MaxVolume = 65535; MinVolume = 0; // ;-) function _VolumeControl(Mixer: hMixerObj; var Control: TMixerControl): MMResult; var Line : TMixerLine; Controls : TMixerLineControls; begin ZeroMemory(@Line, SizeOf(Line)); Line.cbStruct := SizeOf(Line); Line.dwComponentType := MIXERLINE_COMPONENTTYPE_DST_SPEAKERS; 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_VOLUME; Controls.cbmxctrl := SizeOf(Control); Controls.pamxctrl := @Control; Result := mixerGetLineControls(Mixer, @Controls, MIXER_GETLINECONTROLSF_ONEBYTYPE); end; end; procedure SetMasterVolume(Mixer: hMixerObj; Value: Word); var MasterVolume : TMixerControl; Details : TMixerControlDetails; UnsignedDetails : TMixerControlDetailsUnsigned; Code : MMResult; begin Code := _VolumeControl(Mixer, MasterVolume); if Code = MMSYSERR_NOERROR then begin with Details do begin cbStruct := SizeOf(Details); dwControlID := MasterVolume.dwControlID; cChannels := 1; // set all channels cMultipleItems := 0; cbDetails := SizeOf(UnsignedDetails); paDetails := @UnsignedDetails; end; UnsignedDetails.dwValue := Value; Code := mixerSetControlDetails(Mixer, @Details, MIXER_SETCONTROLDETAILSF_VALUE); end; if Code <> MMSYSERR_NOERROR then raise Exception.CreateFmt('SetMasterVolume failure, '+ 'multimedia system error #%d', [Code]); end; function GetMasterVolume(Mixer: hMixerObj): Word; var MasterVolume : TMixerControl; Details : TMixerControlDetails; UnsignedDetails : TMixerControlDetailsUnsigned; Code : MMResult; begin Result := 0; Code := _VolumeControl(Mixer, MasterVolume); if Code = MMSYSERR_NOERROR then begin with Details do begin cbStruct := SizeOf(Details); dwControlID := MasterVolume.dwControlID; cChannels := 1; // set all channels cMultipleItems := 0; cbDetails := SizeOf(UnsignedDetails); paDetails := @UnsignedDetails; end; Code := mixerGetControlDetails(Mixer, @Details, MIXER_GETCONTROLDETAILSF_VALUE); Result := UnsignedDetails.dwValue; end; if Code <> MMSYSERR_NOERROR then raise Exception.CreateFmt('GetMasterVolume failure, '+ 'multimedia system error #%d',
Code:
:mrgreen:
);
end; procedure TFormX.Foo... begin // Set SetMasterVolume(MasterVolumeControl, 0815); // MaxVolume => 65535 // Get Caption := IntToStr( GetMasterVolume(MasterVolumeControl) ); end; |
Re: Haupt Lautstärke Regeln
Danke :D
|
Re: Haupt Lautstärke Regeln
Bitte. :stupid:
|
Re: Haupt Lautstärke Regeln
Hm, man sagte mir, damit könne man auch die anderen Lautstärken auslesen, aber ich hab keine Ahnung, wo ich den Code da verändern muss. Ich hab einiges ausprobiert, aber ich kenne mich mit der Mixer-Materie kaum aus :-/
Ich würde gerne die Lautstärken von LineIn, Wave, CD-Player und Mikrophon auslesen. |
Re: Haupt Lautstärke Regeln
Hallo,
hier ist noch ein Link: (ganz nach unten scrollen) ![]() Davon brauchst du die Funktionen GetMixerControlID() und GetVolume(). Ein Beispiel für LineIn:
Delphi-Quellcode:
Getestet unter WinXP.
procedure TForm1.Button1Click(Sender: TObject);
begin caption:= inttostr(GetVolume(GetMixerControlID(MIXERLINE_COMPONENTTYPE_SRC_LINE)));//LineIn //Min= 0 //Max= 65535 end; |
Re: Haupt Lautstärke Regeln
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. |
Re: Haupt Lautstärke Regeln
Hallo,
also beim Microfoneingang habe ich es jetzt hinbekommen, das lag an
Delphi-Quellcode:
bei mir ging es nur mit
mxcd.cChannels = 2
Delphi-Quellcode:
.
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; |
Re: Haupt Lautstärke Regeln
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
|
Re: Haupt Lautstärke Regeln
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Delphi-Quellcode:
einzutragen.
mxcd.cChannels = 1
Bei Line In usw. funktioniert das übrigens auch. |
Re: Haupt Lautstärke Regeln
Liste der Anhänge anzeigen (Anzahl: 1)
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... |
Re: Haupt Lautstärke Regeln
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 |
Re: Haupt Lautstärke Regeln
*Push*
|
Re: Haupt Lautstärke Regeln
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? |
Re: Haupt Lautstärke Regeln
Kurz und Bündig, Ja. :stupid:
Siehe dazu: ![]() ![]() und: ![]() // edit: Link korrigiert. |
Re: Haupt Lautstärke Regeln
Danke!
Aber wie verwend ich den Code von der Seite: Zitat:
|
Re: Haupt Lautstärke Regeln
Irgendwie habe ich mir schon gedacht das sie Frage kommt. ;)
Ich habe die Unit noch nicht getestet, aber die Namen der Functionen sind doch eindeutig. Fehlen da Grundlagen ? :stupid: |
Re: Haupt Lautstärke Regeln
Zitat:
Ich hab diesen Code in eine Unit gepackt und hab die in die uses meiner Unit mit aufgenommen. Frag ich dann eine function dieser Unit auf, dann findet delphi diese nicht Irgendwo hab ich einen Gedankenfehler... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:04 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-2025 by Thomas Breitkreuz