AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte TAudioVolume Komponente incl. System Mixer
Thema durchsuchen
Ansicht
Themen-Optionen

TAudioVolume Komponente incl. System Mixer

Ein Thema von EWeiss · begonnen am 6. Mai 2018 · letzter Beitrag vom 24. Jul 2019
Antwort Antwort
Seite 1 von 2  1 2      
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.079 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: TAudioVolume Komponente incl. System Mixer

  Alt 16. Mai 2018, 09:31
Gern!

Kann es sein, dass das Aufrufen der Callback von IAudioSessionNotification abhängig ist vom Treiber?
Der Treiber kann, muss das aber nicht implementieren.
Zumindest sieht das auf den ersten Blick so aus, wenn man sich die Wine-Quelltexte anschaut.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.079 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: TAudioVolume Komponente incl. System Mixer

  Alt 16. Mai 2018, 09:34
Siehe Zeile 605:
https://github.com/wine-mirror/wine/...vapi/devenum.c

verweist auf Zeile 55:
https://github.com/wine-mirror/wine/...api/mmdevapi.h
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: TAudioVolume Komponente incl. System Mixer

  Alt 16. Mai 2018, 09:44
Sorry ich verstehe nicht auf was du hinaus willst.

Wenn ich CoInitializeEx in einem Thread aufrufe dann bekomme ich das Event, ob es jetzt mit deiner Änderung funktioniert muss ich erste noch testen.
Was ich aber weis dass das Event unter Win10 unterschiedlich ist dort soll es funktionieren während es in Win7 nicht gehen soll.

Aber nur vom Hörensagen bestätigt hat mir das noch niemand.
Zumindest hast du mir letztens gesagt das die Events bei dir funktionieren ob es nun am Konsolen Programm lag oder an der Windows Version kann ich nicht mit Bestimmtheit sagen.

Zur zeit verwende ich CoInitializeEx nicht weil Delphi es automatisch aufruft "COINIT_APARTMENTTHREADED"
Delphi pfuscht mir irgendwie dazwischen was das soll keine Ahnung! Ist mir unverständlich.
Kein Sprache Framework soll bestimmen ob ich und wie ich CoInitialize aufrufe das sollte die Anwendung entscheiden nicht das Sprache Framework.

gruss

Geändert von EWeiss (16. Mai 2018 um 10:41 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.079 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: TAudioVolume Komponente incl. System Mixer

  Alt 16. Mai 2018, 10:30
Nicht die Sprache, das Framework! Nicht verwechseln!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: TAudioVolume Komponente incl. System Mixer

  Alt 16. Mai 2018, 10:39
Nicht die Sprache, das Framework! Nicht verwechseln!
Korrekt mir ist jetzt nicht der richtige Namen eingefallen
Habe es korrigiert.

gruss

Geändert von EWeiss (16. Mai 2018 um 10:42 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.079 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: TAudioVolume Komponente incl. System Mixer

  Alt 16. Mai 2018, 10:41
Nicht die Sprache, das Framework! Nicht verwechseln!
Und um genau zu sein in den ersten Zeilen von TApplication.Create.
Da wird OleInitialize aufgerufen, was laut MSDN (https://msdn.microsoft.com/de-de/lib...(v=vs.85).aspx) CoinitializeEx aufruft.

Das ist auch so richtig und wichtig, weil sonst ClipBoard und Drag'n'Drop nicht funktionieren würden.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: TAudioVolume Komponente incl. System Mixer

  Alt 16. Mai 2018, 10:44
Nicht die Sprache, das Framework! Nicht verwechseln!
Und um genau zu sein in den ersten Zeilen von TApplication.Create.
Da wird OleInitialize aufgerufen, was laut MSDN (https://msdn.microsoft.com/de-de/lib...(v=vs.85).aspx) CoinitializeEx aufruft.

Das ist auch so richtig und wichtig, weil sonst ClipBoard und Drag'n'Drop nicht funktionieren würden.
OK dann habe ich nichts gesagt.
Das Problem ist nur das ich dann CoUninitialize aufrufen muss damit mein CoInitializeEx überhaupt funktioniert.

Seltsam.. aber OK.

gruss
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.079 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: TAudioVolume Komponente incl. System Mixer

  Alt 16. Mai 2018, 11:04
Ich verstehe das so, dass der Soundtreiber entscheiden kann, ob er diese Funktionalität unterstützt.
Wenn das nicht implementiert ist, dann wird das von der Anwendung implementierte OnSessionCreated nicht aufgerufen.
Zwar wird bei der Anmeldung per RegisterSessionNotification ein S_OK zurückgeliefert, aber der Zeiger auf die Methode nirgends abgespeichert und verwendet.

Werden denn die Methoden von IAudioSessionEvents aufgerufen?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

AW: TAudioVolume Komponente incl. System Mixer

  Alt 16. Mai 2018, 11:18
Zitat:
Werden denn die Methoden von IAudioSessionEvents aufgerufen?
Ja diese..
SessionStateEvent
SessionVolumeEvent

niemals..
OnAudioSessionDisconnected
OnAudioSessionCreated

OnAudioSessionCreated mit Thread aber Fehler mit PostMessage die neue Version damit noch nicht getestet.

gruss

Geändert von EWeiss (16. Mai 2018 um 11:22 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.079 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: TAudioVolume Komponente incl. System Mixer

  Alt 16. Mai 2018, 12:53
Boah, meine Fresse! Darauf muss man erstmal kommen.
Man muss nach Anmeldung der Notifizierung definitiv GetSessionEnumerator aufrufen, dann geht das erst.
Siehe Beispielprojekt im Anhang!

Drauf gekommen bin ich deswegen:
Zitat von Larry Osterman:
The first is that his application hasn't retrieved the current list of sessions. This is one of the really subtle things about the session enumeration APIs. In order to prevent a race condition that can occur when a session notification arrives while the application using the session APIs is starting up, the session enumeration API discards new session notifications until the application has first retrieved the list of existing sessions.

The expected usage pattern is:

Application activates a session manager2. Application registers for session notifications. Application retrieves the current list of sessions for the endpoint and stores the session control objects into a list (don't forget to addref the session).

When a new session is created, the application takes a reference to the newly created session control object and inserts it into the list if it's not already present. Note that the session control object passed into the notification will be destroyed when the session notification returns - if you call GetSessionEnumerator at this point it will probably NOT hold the newly created session (it might, it all depends on timing).
https://stackoverflow.com/a/740241
Angehängte Dateien
Dateityp: zip NotificationTest_2018-05-16_13-48-15.zip (11,8 KB, 11x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 15:18 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