Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Lautsprechersteuerung (https://www.delphipraxis.net/186680-lautsprechersteuerung.html)

hbriele 22. Sep 2015 13:34


Lautsprechersteuerung
 
Hallo liebe Delphi User,
ich suche schon längere Zeit verzweifelt eine Möglichkeit,
um den Zustand des Lautstärkereglers unter windows 7 auszulesen.

Alle funktionierende Beispiele die ich gefunden habe funktionieren nur für die eigene Anwendung und nicht für den Hauptlautstärkeregler.

Die TAudioVolume bekomme ich nicht unter Delphi 7 zum Laufen.
Beim ausführen der Demo unter Delphi hängt sich Delphi auf.
Wahrscheinlich weil die TKompunente nicht eingebunden ist.
Diese bekomme ich nicht eingebunden, weil die Anleitung dafür fehlt.
Es fehlt halt die *.dpk Datei.

Kennt jemand eine Funktion, die mir den Zustand des Lautstärkemasterreglers zurückgibt?

Gruß

Perlsau 22. Sep 2015 14:21

AW: Lausprechersteuerung
 
Ich mach das mit der Bass-DLL, dort gibt es die Funktion BASS_SetVolume. Die Bass-DLL bringst du auch mit älteren Delphi-Versionen zum Laufen.

Michael II 22. Sep 2015 14:25

AW: Lausprechersteuerung
 
http://www.delphipraxis.net/629992-post2.html funktioniert mit deinem Delphi und deinem Windows nicht?

hbriele 22. Sep 2015 14:41

AW: Lausprechersteuerung
 
Danke,
aber auch dieses habe ich ausprobiert!
Auch damit wird nur der Regler der eigenen Anwendung gesteuert oder abgefragt.
Der Hauptlautstärkeregler bleibt jedoch unberührt.
Jedenfalls ist das unter Windows 7 so.

Gruß

hbriele 22. Sep 2015 14:50

AW: Lausprechersteuerung
 
Hallo
Zitat:

Zitat von Perlsau (Beitrag 1316621)
Ich mach das mit der Bass-DLL, dort gibt es die Funktion BASS_SetVolume. Die Bass-DLL bringst du auch mit älteren Delphi-Versionen zum Laufen.

Die bass DLL benutze ich auch, doch damit kann man nicht den Hauptregler zustand abfragen.
Die steuert auch nur das was die Anwendung heraus geben soll.
Der Gesamtregler bleibt hier unberührt.
Ich benötige das, um herauszufinden wie hoch der Lautstärkegesamtpegel ist, weil die Anwendung mittels einer Fernbedienung in der Endlautstärke geregelt wird.

Gruß

EWeiss 22. Sep 2015 16:58

AW: Lausprechersteuerung
 
Neue Package für D7 erstellen geht nicht?
Möchte ich bezweifeln.

erstelle eine neue Package

und addiere alle Dateien wie im Bild zu sehen.
Nenne die Package TAudioVolume.
Bitte nicht die Copyright Infos entfernen. Danke..

Zitat:

Es fehlt halt die *.dpk Datei.
Die ist vorhanden.
Nicht die DPK starten die ist für Delphi 2010.

Kompilieren, Installieren..
Nicht vergessen die addierten Dateien zum Suchpfad hinzufügen (also den Folder in dem diese sich befinden.

gruss

hbriele 22. Sep 2015 17:59

AW: Lausprechersteuerung
 
Danke,
Zitat:

Zitat von EWeiss (Beitrag 1316644)
Neue Package für D7 erstellen geht nicht?
Möchte ich bezweifeln.

erstelle eine neue Package

und addiere alle Dateien wie im Bild zu sehen.
Nenne die Package TAudioVolume.
Bitte nicht die Copyright Infos entfernen. Danke..

Zitat:

Es fehlt halt die *.dpk Datei.
Die ist vorhanden.
Nicht die DPK starten die ist für Delphi 2010.

Kompilieren, Installieren..
Nicht vergessen die addierten Dateien zum Suchpfad hinzufügen (also den Folder in dem diese sich befinden.

gruss

aber ich brauche Hilfe!
Wie muss ich vorgehen?
Wo wird das Packet erstellt?
Unter Komponente > Neue Komponente > Komponente installieren > Packages installieren ?
Habe unter allen Optionen versucht zu installieren (viele viele Stunden ohne Erfolg).
Welche Dateien werden den überhaupt benötigt, die fünf aus dem Hauptverzeichnis, oder die aus dem Demo_Eng Ordner.
Bitte um Hilfe, weiß nicht mehr weiter.

Gruß

Ps.Leider können nur *.bpl und *.dpc Packete hinzugefügt werden
und solche gibt es in dem Installationsfile nicht.

EWeiss 22. Sep 2015 18:01

AW: Lausprechersteuerung
 
Zitat:

Unter Komponente > Neue Komponente > Komponente installieren > Packages installieren ?
Ja..

Dann die Dateien addieren wie im Bild zu sehen.
Vielleicht kann es dir ja jemand machen der D7 Installiert hat.

gruss

hathor 22. Sep 2015 18:21

AW: Lausprechersteuerung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Man kann auch die windowseigene SPEAKERS-Anzeige aufrufen:

Delphi-Quellcode:
ShellExecute(0,nil,PChar('sndvol.exe'),'-f','',SW_SHOWNORMAL);
Wenn man auf den Slider klickt, wird der Prozentwert angezeigt.

EWeiss 22. Sep 2015 18:24

AW: Lausprechersteuerung
 
Zitat:

Ps.Leider können nur *.bpl und *.dpc Packete hinzugefügt werden
und solche gibt es in dem Installationsfile nicht.
Nö du kannst auch einzelne Dateien hinzufügen.

Hier eine Step by Step Anleitung

Oder hier

gruss

hbriele 22. Sep 2015 18:35

AW: Lausprechersteuerung
 
Zitat:

Zitat von EWeiss (Beitrag 1316649)
Zitat:

Unter Komponente > Neue Komponente > Komponente installieren > Packages installieren ?
Ja..

Dann die Dateien addieren wie im Bild zu sehen.
Vielleicht kann es dir ja jemand machen der D7 Installiert hat.

gruss

Das habe ich vor 15 Jahren selbst gemacht und bisher habe ich auch mindestens über 10 Pakete mit Erfolg installiert ,
die hatten aber alle eine *.bpl oder *.dpc Paketdatei.
Schade nur dass es an so etwas dann scheitert.
Vieleicht ist das Installationsfile ja nicht komplett?

Ich komme so auf jeden Fall nicht weiter.

Aber vieleicht kennt ja jemand eine Komponente die sich auch in D7 installieren lässt.

EWeiss 22. Sep 2015 18:44

AW: Lausprechersteuerung
 
Zitat:

Ich komme so auf jeden Fall nicht weiter.
Anleitung gelesen ? Im vorherigen Post? (Oder hier nochmal)
Sorry! Also einfacher geht es doch wirklich nimmer.

how-to-install-a-component-from-pas-file-in-delphi

gruss

hbriele 22. Sep 2015 19:48

AW: Lausprechersteuerung
 
Zitat:

Zitat von EWeiss (Beitrag 1316653)
Zitat:

Ich komme so auf jeden Fall nicht weiter.
Anleitung gelesen ? Im vorherigen Post? (Oder hier nochmal)
Sorry! Also einfacher geht es doch wirklich nimmer.

how-to-install-a-component-from-pas-file-in-delphi

gruss

Ja Danke,
hat funktioniert.

Die TKomponente ist nun vorhanden.
Leider hängt sich Delphi nach wie vor gnadenlos auf wenn ich die Demo aufrufe.
Wenn ich die Komponente auf eine Form ziehe stehen mir alle TAudioVolume zur Verfügung.
Nun weiß ich aber erst einmal nicht, was ich alles Initialisieren muss damit mir AudioVolume1.GetMasterVolume einen Wert zurück gibt.

Gruß

EWeiss 22. Sep 2015 20:03

AW: Lausprechersteuerung
 
Zitat:

Leider hängt sich Delphi nach wie vor gnadenlos auf wenn ich die Demo aufrufe.
Rufe nicht die Projekt Datei auf die ist für D2010.
Verwende die AudioVolumeAdj_Eng.dpr

Wenn es dann immer noch nicht geht musst du es halt von Hand für D7 ändern.
Wie gesagt ich habe kein D7.

Hier wird das Volumen gesetzt
Delphi-Quellcode:
procedure TForm1.tbMasterVolumeChange(Sender: TObject);
begin
  AudioVolume1.SetMasterVolume((tbAppVolume.Max - tbMasterVolume.Position) / tbMasterVolume.Max);
end;
und so bekommst du aktuelle Position.
Delphi-Quellcode:
tbMasterVolume.Position := round((1.0 - AudioVolume1.GetMasterVolume) * tbMasterVolume.Max);


Wenn niemand hilft der D7 hat kann ich leider auch nichts mehr tun. Sorry

gruss

hbriele 22. Sep 2015 20:20

AW: Lausprechersteuerung
 
Hallo, Danke noch einmal,
ich habe natürlich die richtige Datei aufgerufen.

Habe jetzt aus der Demo versucht einiges nachzuvollziehen,
bin jetzt so weit, dass ich Integerwerte habe die bei Reglerstellung 100% auf 0 und beim Regler zu 0% einen Wert von 100 hat.

Bin soweit Glücklich,
Danke

EWeiss 22. Sep 2015 20:21

AW: Lausprechersteuerung
 
Zitat:

ich habe natürlich die richtige Datei aufgerufen.
OK! Wollte das nur noch anmerken. ;)

Zitat:

Bin soweit Glücklich,
Das freut mich dann hat es ja doch etwas gebracht.
Zuletzt! Nie zu schnell Aufgeben.. Wird schon.

gruss

FarAndBeyond 22. Sep 2015 21:06

AW: Lausprechersteuerung
 
Das hier läuft unter D7 sehr gut...

Delphi-Quellcode:
 Type
  IAudioEndpointVolumeCallback = Interface(IUnknown)
  ['{657804FA-D6AD-4496-8A60-352752AF4F89}']
  End;

  IAudioEndpointVolume = Interface(IUnknown)
   ['{5CDF2C82-841E-4546-9722-0CF74078229A}']
    Function RegisterControlChangeNotify(AudioEndPtVol: IAudioEndpointVolumeCallback): HRESULT; Stdcall;
    Function UnregisterControlChangeNotify(AudioEndPtVol: IAudioEndpointVolumeCallback): HRESULT; Stdcall;
    Function GetChannelCount(Out PInteger): HRESULT; Stdcall;

    Function SetMasterVolumeLevel(fLevelDB: Single; pguidEventContext: PGUID): HRESULT; Stdcall;
    Function SetMasterVolumeLevelScalar(fLevelDB: Single; pguidEventContext: PGUID): HRESULT; Stdcall;

    Function GetMasterVolumeLevel(Out fLevelDB: Single): HRESULT; Stdcall;
    Function GetMasterVolumeLevelScalar(Out fLevelDB: Single): HRESULT; Stdcall;

    Function SetChannelVolumeLevel(nChannel: Integer; fLevelDB: Double; pguidEventContext: PGUID): HRESULT; Stdcall;
    Function SetChannelVolumeLevelScalar(nChannel: Integer; fLevelDB: Double; pguidEventContext: PGUID): HRESULT; Stdcall;

    Function GetChannelVolumeLevel(nChannel: Integer; Out fLevelDB: Double): HRESULT; Stdcall;
    Function GetChannelVolumeLevelScalar(nChannel: Integer; Out fLevelDB: Double): HRESULT; Stdcall;

    Function SetMute(bMute: Bool; pguidEventContext: PGUID): HRESULT; Stdcall;
    Function GetMute(Out bMute: Bool): HRESULT; Stdcall;

    Function GetVolumeStepInfo(pnStep: Integer; Out pnStepCount: Integer): HRESULT; Stdcall;
    Function VolumeStepUp(pguidEventContext: PGUID): HRESULT; Stdcall;
    Function VolumeStepDown(pguidEventContext: PGUID): HRESULT; Stdcall;
    Function GetVolumeRange(Out pflVolumeMindB: Double; Out pflVolumeMaxdB: Double; Out pflVolumeIncrementdB: Double): HRESULT; Stdcall;
    Function QueryHardwareSupport(Out pdwHardwareSupportMask): HRESULT; Stdcall;
  End;

  IAudioMeterInformation = Interface(IUnknown)
  ['{C02216F6-8C67-4B5B-9D00-D008E73E0064}']
  End;

  IPropertyStore = Interface(IUnknown)
  End;

  IMMDevice = Interface(IUnknown)
  ['{D666063F-1587-4E43-81F1-B948E807363F}']
   Function Activate(Const refId: TGUID; dwClsCtx: DWORD; pActivationParams: PInteger; Out pEndpointVolume: IAudioEndpointVolume): HRESULT; StdCall;
   Function OpenPropertyStore(stgmAccess: DWORD; Out ppProperties: IPropertyStore): HRESULT; Stdcall;
   Function GetId(Out ppstrId: PLPWSTR): HRESULT; Stdcall;
   Function GetState(Out State: Integer): HRESULT; Stdcall;
  End;

  IMMDeviceCollection = interface(IUnknown)
  ['{0BD7A1BE-7A1A-44DB-8397-CC5392387B5E}']
  End;

  IMMNotificationClient = interface(IUnknown)
  ['{7991EEC9-7E89-4D85-8390-6C703CEC60C0}']
  End;

  IMMDeviceEnumerator = interface(IUnknown)
  ['{A95664D2-9614-4F35-A746-DE8DB63617E6}']
   Function EnumAudioEndpoints(dataFlow: TOleEnum; deviceState: SYSUINT; DevCollection: IMMDeviceCollection): HRESULT; Stdcall;
   Function GetDefaultAudioEndpoint(EDF: SYSUINT; ER: SYSUINT; Out Dev: IMMDevice): HRESULT; Stdcall;
   Function GetDevice(pwstrId: pointer; Out Dev: IMMDevice): HRESULT; Stdcall;
   Function RegisterEndpointNotificationCallback(pClient: IMMNotificationClient): HRESULT; Stdcall;
  End;
 
 Const
  CLASS_IMMDeviceEnumerator : TGUID = '{BCDE0395-E52F-467C-8E3D-C4579291692E}';
  IID_IMMDeviceEnumerator  : TGUID = '{A95664D2-9614-4F35-A746-DE8DB63617E6}';
  IID_IAudioEndpointVolume : TGUID = '{5CDF2C82-841E-4546-9722-0CF74078229A}';


.....
Var
 single_VolumeLevel : Single = 1.0;
 bool_GetMute      : Bool = False;

Procedure SetMasterVolume(single_VolumeLevel : Single);
  Var
   EndpointVolume  : IAudioEndpointVolume;
   DeviceEnumerator : IMMDeviceEnumerator;
   Device          : IMMDevice;
 Begin
  Try
   CoCreateInstance(CLASS_IMMDeviceEnumerator, Nil, CLSCTX_INPROC_SERVER, IID_IMMDeviceEnumerator, DeviceEnumerator);
   DeviceEnumerator.GetDefaultAudioEndpoint($00000000, $00000000, Device);
   Device.Activate(IID_IAudioEndpointVolume, CLSCTX_INPROC_SERVER, Nil, EndpointVolume);
   EndpointVolume.SetMasterVolumeLevelScalar(single_VolumeLevel, Nil);
  Except
   Exit;
  End;
 End;


Procedure GetMasterVolume(out single_VolumeLevel : Single);
  Var
   EndpointVolume  : IAudioEndpointVolume;
   DeviceEnumerator : IMMDeviceEnumerator;
   Device          : IMMDevice;
 Begin
  Try
   CoCreateInstance(CLASS_IMMDeviceEnumerator, Nil, CLSCTX_INPROC_SERVER, IID_IMMDeviceEnumerator, DeviceEnumerator);
   DeviceEnumerator.GetDefaultAudioEndpoint($00000000, $00000000, Device);
   Device.Activate(IID_IAudioEndpointVolume, CLSCTX_INPROC_SERVER, Nil, EndpointVolume);
   EndpointVolume.GetMasterVolumeLevelScalar(single_VolumeLevel);
  Except
   Exit;
  End;
 End;


Procedure GetMute(Out bool_GetMute: Bool);
  Var
   EndpointVolume  : IAudioEndpointVolume;
   DeviceEnumerator : IMMDeviceEnumerator;
   Device          : IMMDevice;
 Begin
  Try
   CoCreateInstance(CLASS_IMMDeviceEnumerator, Nil, CLSCTX_INPROC_SERVER, IID_IMMDeviceEnumerator, DeviceEnumerator);
   DeviceEnumerator.GetDefaultAudioEndpoint($00000000, $00000000, Device);
   Device.Activate(IID_IAudioEndpointVolume, CLSCTX_INPROC_SERVER, Nil, EndpointVolume);
   EndpointVolume.GetMute(bool_GetMute);
  Except
   Exit;
  End;
 End;
EDIT: Uses ActiveX, ComOBJ;

hbriele 22. Sep 2015 21:15

AW: Lausprechersteuerung
 
Danke,
das AudioVolume gefällt mir sehr gut.
Da ich es jetzt geschafft habe es einzubinden, werde ich es auch benutzen.

Vielen Dank an alle!

Gruß

Luckie 23. Sep 2015 01:58

AW: Lautsprechersteuerung
 
Nur zur allgemeine Info: Von XP zu Vista hat MS das Audio-Subsystem komplett umgekrempelt. Viele Komponenten sind wohl noch auf dem Stand von XP. Und leider sieht es so aus, als wenn sie nicht angepasst wurden, weil der Entwickler das Interesse verloren hat oder nicht mehr aktiv ist. Eventuell gibt es jemanden, der sich dessen im Sinne der Delphi Gemeinschaft mal annimmt und eine aktuelle Komponente entwickelt, damit das Problem endlich mal gelöst wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:10 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