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 12 von 21   « Erste     2101112 1314     Letzte »    
EWeiss
Projekt entfernt..

Geändert von EWeiss (24. Jul 2019 um 04:45 Uhr)
 
TiGü

 
Delphi 10.4 Sydney
 
#111
  Alt 17. Mai 2018, 08:14
Also in meiner Beispielapplikation mit dem Memo erhälst du OnSessionCreated?
  Mit Zitat antworten Zitat
EWeiss
 
#112
  Alt 17. Mai 2018, 08:23
Also in meiner Beispielapplikation mit dem Memo erhälst du OnSessionCreated?
Ja ohne Probleme.

gruss
  Mit Zitat antworten Zitat
TiGü

 
Delphi 10.4 Sydney
 
#113
  Alt 17. Mai 2018, 08:53
Schreib einfach alles nochmal neu!
  Mit Zitat antworten Zitat
EWeiss
 
#114
  Alt 17. Mai 2018, 09:04
Schreib einfach alles nochmal neu!
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!

Und die Herangehendweise ist komplett unterschiedlich.
Erstelle mit deinem Sample Komponente und verwende einen externen zusätzlichen Thread dann sehen wir ob es immer noch funktioniert was ich bezweifeln möchte.
Es macht nur sinn sich an die Vorgaben bzw. TAudioVolume zu halten alles andere ist Augenwischerei da es nicht die gleiche Basis verwendet.

Aber wie gesagt mache erst mal pause.
Bis auf 1 > 2 Leute interessiert es nicht wirklich jemand von daher

Aber! Es funktioniert trotzdem auch ohne neu zu schreiben nur du verstehst einfach nicht warum das so ist.
Eine Konsolen oder Memo Anwendung ist einfach nichtssagend was glaubst du eigentlich was bei dir abgeht wenn du dich in anderen Threads befindest?
Nichts mehr!

gruss

Geändert von EWeiss (11. Jul 2019 um 15:51 Uhr)
  Mit Zitat antworten Zitat
TiGü

 
Delphi 10.4 Sydney
 
#115
  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
 
#116
  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ü

 
Delphi 10.4 Sydney
 
#117
  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
HolgerX

 
Delphi 6 Professional
 
#118
  Alt 17. Mai 2018, 12:30
Hmm..

Wieso einen Thread machen, wenn die COM der App nur MULTITHREADED initiert werden muss??

Um eine Applikation direkt mit COINIT_MULTITHREADED zu starten, genügt eigendlich folgendes:

In der Projekt DPR :

uses
ActiveX,
ComObj,
...

und dann vor dem Application.Initialize; :

CoInitFlags := COINIT_MULTITHREADED;
Application.Initialize;

Damit sollte die (VCL) Applikation direkt als MULTITHREADED initialisiert werden.
Lt.

http://docwiki.embarcadero.com/Libra...bj.CoInitFlags

Gibt es diesen Parameter nicht nur in Delphi 6, sondern hoch bis 10 Tokyo!
Somit sollte dieser auch unter D2010 verfügbar sein.

Ich habe dass mit dem hier vorhandenen NotificationTest ausprobiert (ja, nach Anpassungen an und dann mit Delphi 6 !!) und habe alle Messages erhalten.

Habe ich das CoInitFlags auskommentiert, klappte es nicht mehr..

Wenn Du nun in deiner Unit (AudioSessionNotification) unten das
Delphi-Quellcode:
initialization
  CoInitFlags := COINIT_MULTITHREADED;
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.

(Mit D6 ausprobiert !)
  Mit Zitat antworten Zitat
EWeiss
 
#119
  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ü

 
Delphi 10.4 Sydney
 
#120
  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
Antwort Antwort
Seite 12 von 21   « Erste     2101112 1314     Letzte »    


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 05:01 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