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.