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
TiGü

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

AW: TAudioVolume Komponente incl. System Mixer

  Alt 17. Mai 2018, 11:44
Dir ist schon klar das du dein Sample nicht mit meiner Anwendung bzw. TAudioVolume vergleichen kannst oder?
Du tust doch praktisch nichts .. bis auf ein paar Zeilen im Memo Auszugeben und das alles in der gleichen Anwendung bzw. Thread!
Natürlich kann es vergleichen. Man kann es nur nicht gleichsetzen! Man beachte den Unterschied.

Immer wenn ich mit einem Programmierproblem nicht weiterkomme, versuche ich das Problem zu isolieren.
Das geht am Besten in einen Konsolenprogramm oder einer fast nackten Formularanwendung.
Nur so sieht man letztendlich den oder die Unterschied(e) bzw. Fehler zum eigentlichen Projekt und kann es beheben.

Diese Vorgehensweise will ich dir auch ans Herz legen, weil du dich oft schnell verzettelst.
Diese überlangen und sehr komplizierten Non-VCL-Quelltexte, mit denen du normalerweise hantierst, tragen natürlich dazu bei.

...verwende einen externen zusätzlichen Thread dann sehen wir ob es immer noch funktioniert was ich bezweifeln möchte.
Geht problemlos in einen anderen Thread-Context:

Delphi-Quellcode:
procedure TAudioThread.Execute;
begin
  inherited;
  CoInitializeEx(nil, COINIT_MULTITHREADED);
  try
    FAudioSessionNotification := TAudioSessionNotification.Create;
    FAudioComponent := TAudio.Create(FAudioSessionNotification, PrintText);
    try
      FAudioComponent.InitAudioComponents;
      while not Terminated do
      begin
        Sleep(1);
      end;
    finally
      FAudioComponent.Free;
    end;
  finally
    CoUninitialize;
  end;
end;

procedure TAudioThread.PrintText(const AText: string);
begin
  OutputDebugString(PChar(AText));
end;

function TAudioSessionNotification.OnSessionCreated(const NewSession: IAudioSessionControl): HRESULT;
var
  SessionControl2: IAudioSessionControl2;
  pRetVal: PWideChar;
begin
  if Supports(NewSession, IAudioSessionControl2, SessionControl2) then
  begin
    SessionControl2.GetSessionIdentifier(pRetVal);
    OutputDebugString(pRetVal);
    CoTaskMemFree(pRetVal);
  end;

  Result := S_OK;
end;
Siehe auch Anhang.
Angehängte Dateien
Dateityp: pas AudioVolume.Frm.pas (613 Bytes, 9x aufgerufen)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: TAudioVolume Komponente incl. System Mixer

  Alt 17. Mai 2018, 11:59
Du verstehst es nicht oder?
Zitat:
Geht problemlos in einen anderen Thread-Context:
Ich meinte nicht du sollst einen Extra Thread erstellen im sinne von Create TThread
sondern deine Anwendung testen mit mehreren Threads.
Zum Beispiel mit zusätzlicher Form und anderen Threads in dem sinne so wie es bei TAudioVolume war.


gruss

Geändert von EWeiss (18. Mai 2018 um 14:13 Uhr)
  Mit Zitat antworten Zitat
TiGü

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

AW: TAudioVolume Komponente incl. System Mixer

  Alt 17. Mai 2018, 12:24
Wie denn nun Herr Weiss?
Mit oder ohne extra Thread? Entscheiden Sie sich.

Das OnSessionCreated kommt sowohl im externen Thread, als auch im normalen GUI-Mainthread.
Einzig und allein der Aufruf von GetSessionEnumerator ist der entscheidende Punkt.
Nicht mehr und nicht weniger sollte das Beispiel zeigen.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: TAudioVolume Komponente incl. System Mixer

  Alt 17. Mai 2018, 12:32
Zitat:
Einzig und allein der Aufruf von GetSessionEnumerator ist der entscheidende Punkt.
Entschuldige bitte das hatte ich schon im Quelltext enthalten seit urgedenken.
Das entscheidende ist der Zusätzliche Thread für die Events nichts anderes.

Zitat:
Wie denn nun Herr Weiss?
Mit oder ohne Thread? Entscheiden Sie sich.
Nun.. sorry manche verstehen es einfach nicht.

Also nochmal.
Deine erster Versuch war in einer Anwendung welche nur 1 Thread beinhaltet und das war\ist nicht gleichzusetzen mit TAudioVolume.
OK? Gut dann weiter.

Ich hatte dich aufgefordert so wie in TAudioVolume eine Anwendung zu erstellen bzw. zu testen mit den Begebenheiten wie sie in TAudioVolume vorlagen.
Was hast du gemacht einen extra Thread für die Events erstellt der aber in TAudioVolume zu der zeit nicht existierte.
OK? Gut dann weiter.

Hättest du dich an der Basis gehalten dann wäre dir genau das Aufgefallen das TAudioVolume keinen extra Thread für SessionCreate erstellt hat.
So! Auf mehr wollte ich gar nicht raus.

Und ohne diesen besagten Thread würde deine Anwendung ins leere laufen so wie es bei TAudioVolume war.

Zitat:
einbaust (Plus ActiveX, ComObj in die Uses), wird dies Verwendet, ohne die DPR ändern zu müssen. Es wird automatisch gesetzt, wenn deine Unit verwendet wird.
Danke Holger werde es mal testen

EDIT:
Nein es geht nicht!
Teste es selbst mit TAudioVolume.
Das ist warum ich sage man muss mit der Basis arbeiten.

Zitat:
Windows 7 System and Windows 10 System operate differently.The new audio session create event is fired on Windows 10 System but not on Windows 7 Systemregardless of the parameter of CoInitializeEx(COINIT_APARTMENTTHREADED or COINIT_MULTITHREADED),if it is defined in the TAudioVolume.Create method.However new audio session create event is fired if we use a seperate thread to receive the events.So, you should use a thread to accept the event ( Create the thread in TAudioVolume.Create method,destroy the thread in TAudioVolume.Destroy method ).
Zitat:
Diese überlangen und sehr komplizierten Non-VCL-Quelltexte, mit denen du normalerweise hantierst, tragen natürlich dazu bei.
Diese funktionieren hervorragend du musst dich nur mal herablassen und sie testen.

gruss

Geändert von EWeiss (17. Mai 2018 um 12:59 Uhr)
  Mit Zitat antworten Zitat
TiGü

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

AW: TAudioVolume Komponente incl. System Mixer

  Alt 17. Mai 2018, 14:51
Zitat:
Windows 7 System and Windows 10 System operate differently.The new audio session create event is fired on Windows 10 System but not on Windows 7 Systemregardless of the parameter of CoInitializeEx(COINIT_APARTMENTTHREADED or COINIT_MULTITHREADED),if it is defined in the TAudioVolume.Create method.However new audio session create event is fired if we use a seperate thread to receive the events.So, you should use a thread to accept the event ( Create the thread in TAudioVolume.Create method,destroy the thread in TAudioVolume.Destroy method ).
Wo kommt das her? Quelle?

Und schriebst doch ein paar Beiträge vorher, das du mit meiner Memo-Testanwendung auf deinen Windows 7 ein OnSessionCreated erhalten hast.
Ist dem doch nicht so?

EDIT: https://www.delphipraxis.net/1402335-post112.html
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: TAudioVolume Komponente incl. System Mixer

  Alt 17. Mai 2018, 19:00
Zitat:
Ist dem doch nicht so?
Klar.. habe ich gesagt und dem ist auch so aber nur in einer Anwendung die 1 Thread verwendet.
Wenn du mehr verwendest wie ich in TAudioVolume kommst du um eine extra Event Thread nicht herum.
Wie oft habe ich das jetzt schon geschrieben? Hmmm....

gruss
  Mit Zitat antworten Zitat
TiGü

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

AW: TAudioVolume Komponente incl. System Mixer

  Alt 18. Mai 2018, 07:53
Eine VCL-Anwendung wie die oben gezeigte besteht aber in der Regel aus mindestens drei Threads.
Zumindest laut Anzeige der IDE.

Das Verhalten scheint es so nur in Windows 7 zu geben.
Unter Windows 10 kann man so viele Threads (die andere Aufgaben machen) erstellen wie man möchte, es wird OnSessionCreate ausgelöst. Sogar im Mainthread und im extra dafür erstellten Thread.
Siehe Screenshot.

Vielleicht doch mal ein Grund zu wechseln und upzudaten? Hihi, war nur Spaß!
Miniaturansicht angehängter Grafiken
onsessioncreate.jpg  
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:02 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