Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Mixer in Windows Vista (https://www.delphipraxis.net/98794-mixer-windows-vista.html)

juelin 1. Sep 2007 14:49


Mixer in Windows Vista
 
Hallo,
ich arbeite mit Delphi 7 und will auf meinem Notebook den Mixer steuern.
OS: Windows Vista
Soundkarte: Realtek

Trotz installation von MMSystem kann ich nur einen Kanal steuern (keine Gesamtlaustärke, Mikro, Wave oder Line).

Hat da jemand eine Idee?

Danke und Gruss
Jürgen

Bernhard Geyer 1. Sep 2007 15:40

Re: Mixer in Windows Vista
 
Wurden nicht unter Vista einiges am Audio-Subsystem geändert :gruebel:
In einer der letzten c't-Ausgaben war ein Bericht darüber. Evtl. mußt du hier neue API-Schnittstellen verwenden.

DP-Maintenance 1. Sep 2007 18:42

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Multimedia" verschoben.
Delphi-Frage

Billi Berserker 2. Sep 2007 12:18

Re: Mixer in Windows Vista
 
Der Mixer und das Audio System hat sich in Vista Grundlegend geändert.
Meine alte implementierung zur Steuerung der Lautstärke funktioniert unter Vista nicht mehr.

Es gibt soweit ich rausgefunden haben komplett neue Interface Objekte zum Steuern des Mixers.
ISimpleAudioVolume Interface
IChannelAudioVolume Interface
IAudioStreamVolume Interface

Leider habe ich noch nirgens eine funktioniernde Delphi Implementation gefunden und selbst habe ich bisher zu wenig mit Interfaces gearbeitet um es selbst zu implementieren.

Bernhard Geyer 2. Sep 2007 12:51

Re: Mixer in Windows Vista
 
Zitat:

Zitat von Billi Berserker
... und selbst habe ich bisher zu wenig mit Interfaces gearbeitet um es selbst zu implementieren.

Wenn das nur ist werden sich genügend Helfer finden die dir Helfen werden (Für generelle Fragen zu Interfaces würde ich auch was beisteuern). Und da mit juelin auch einen Helfer hast (definier ich jetzt einfach mal) wäre es doch was gutes wenn ihr eine entsprechende Klasse allgemein entwickelt die auch vor Vista funktioniert.

Billi Berserker 2. Sep 2007 17:07

Re: Mixer in Windows Vista
 
Dann gleich mal eine Frage zur C++ -> Delphi konvertierung
MSDN sagt bei sämtlichen Get methoden wie z.b. http://msdn2.microsoft.com/en-us/library/ms678751.aspx
Code:
HRESULT GetMute(BOOL *pbMute);
Zitat:

[...]Parameters

pbMute

[out] Pointer to a BOOL variable into which the method writes the muting state. [...]
wie sieht die entsprechende Delphi Implementierung aus? Soll hier wirklich ein Pointer auf Boolean als Parameter ran oder reicht es einen einfachen boolean Parameter mit out zu deklarieren?
ich würds jetzt einfach so machen:
Delphi-Quellcode:
function GetMute(out pbMute : boolean) : hresult;
oder muß PBoolean als typ hin?

SirThornberry 2. Sep 2007 17:26

Re: Mixer in Windows Vista
 
out ist richtig, Boolean hingegen falsch. Verwende Bool aber nicht Boolean. Und denk an die Aufrufconvention. In der Regel Stdcall oder cdecl

Billi Berserker 2. Sep 2007 20:53

Re: Mixer in Windows Vista
 
Nächste Frage ist dann wie ich die Interfaces überhaupt benutze.
Ich habe jetzt
Delphi-Quellcode:
const
  IID_IMMDeviceEnumerator         : TGUID = '{A95664D2-9614-4F35-A746-DE8DB63617E6}';
type
  IMMDeviceEnumerator = interface(IUnknown)
    ['{A95664D2-9614-4F35-A746-DE8DB63617E6}']
    function EnumAudioEndpoints(dataFlow : EDataFlow; dwStateMask : DWord; out ppDevices : IMMDeviceCollection) : hresult; stdcall;
    function GetDefaultAudioEndpoint(dataFlow : EDataFlow; role : ERole; out ppDevice : IMMDevice) : hresult; stdcall;
    function GetDevice(pwStrID : LPCWSTR; out ppDevice : IMMDevice) : hresult; stdcall;
    function RegisterEndpointNotificationCallback(pNotify : IMMNotificationClient) : hresult; stdcall;
    function UnregisterEndpointNotificationCallback(pNotify : IMMNotificationClient) : hresult; stdcall;
  end;
Beim versuch das ganze zu benutzen:
Delphi-Quellcode:
var
var
  hr : hresult;
  pIMMDeviceEnumerator : IMMDeviceEnumerator;
begin
  CoInitialize(nil);
  hr := CoCreateInstance(IID_IMMDeviceEnumerator, nil, CLSCTX_INPROC_SERVER, IMMDeviceEnumerator, pIMMDeviceEnumerator);
  CoUnInitialize();
end;
bekomm ich einen "REGDB_E_CLASSNOTREG" Fehler.
Zitat:

REGDB_E_CLASSNOTREG
A specified class is not registered in the registration database. Also can indicate that the type of server you requested in the CLSCTX enumeration is not registered or the values for the server types in the registry are corrupt.
Die GUID müßte jedoch mit {A95664D2-9614-4F35-A746-DE8DB63617E6} auf jedenfall stimmen da ich das direkt aus dem win32 sdk gezogen habe
Code:
EXTERN_C const IID IID_IMMDeviceEnumerator;
   
    MIDL_INTERFACE("A95664D2-9614-4F35-A746-DE8DB63617E6")

Jeehaa 14. Nov 2007 12:23

Re: Mixer in Windows Vista
 
Hi ich hab mit dem Mixer unter Vista jetzt genau das Selbe Problem.
Hat jemand dazu schon ne Lösung gefunden.
Die Lösungsansätze waren ja schon ganz gut, aber leider führen Sie mich auch nicht zum erfolg ;(
Für Hilfe wär ich super dankbar!

56K-Surfer 4. Jun 2008 20:59

Re: Mixer in Windows Vista
 
Hallo zusammen
Gibt es bereits irgendwelche Lösungen zur Mixer Steuerung unter Vista?
Ich hab eine X10 Fernbedienung und will mit dieser unter anderem die Windows
Lautstärke einstellen. Damals unter XP lief das alles toll,
aber unter Vista klappt es halt nicht mehr.
Grüße
Sebastian


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