Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Thread mit OLEVariant (https://www.delphipraxis.net/40222-thread-mit-olevariant.html)

ReDoX 12. Feb 2005 16:35


Thread mit OLEVariant
 
Hi,
Ich die sprachausgabe in einen Thread verlegen:

Delphi-Quellcode:
type

  TReadThread = class(TThread)
 private
  FText: String;
 protected
  procedure Execute; override;
 public
  property Text: String read FText write FText;
end;


procedure TReadThread.Execute;
var oleVoice: OLEVariant;
begin
    oleVoice := CreateOLEObject('SAPI.SpVoice');
    oleVoice.Speak(ftext);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
   ReadThread := TreadThread.Create(true);
   ReadThread.FreeOnTerminate := True;
   ReadThread.Text := 'Das ist ein Test';
   ReadThread.Resume;
end;

Jetzt bekomme ich immer einen fehler
Zitat:

---------------------------
Debugger Exception Notification
---------------------------
Project PowerConsole.exe raised exception class EOleSysError with message 'CoInitialize wurde nicht aufgerufen'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
Was mache ich falsch? :gruebel:

Mfg ReDoX

mirage228 12. Feb 2005 16:47

Re: Thread mit OLEVariant
 
Hi,

die Fehlermeldung sagt doch bereits alles. Du musst die Prozedur "CoInitialize" aufrufen.

mfG
mirage228

Jens Schumann 12. Feb 2005 16:59

Re: Thread mit OLEVariant
 
Hallo,
bevor der Thread terminiert CoUninitialize nicht vergessen.

[Edit] Das hat damit zu tun, dass jeder Thread sein eigenes Apartment anmelden muss.
Das passiet mit dem Aufruf von Coinitialize.[/EDIT]

ReDoX 12. Feb 2005 17:36

Re: Thread mit OLEVariant
 
Ich habe es jetzt so

Delphi-Quellcode:
procedure TReadThread.Execute;
 var oleVoice: OLEVariant;
begin
    CoInitialize(nil);
     try
      oleVoice := CreateOLEObject('SAPI.SpVoice');
      oleVoice.Speak(ftext);
       finally
        CoUninitialize;
     end;
end;
gemacht.
Und was soll ich sagen es funktioniert :thumb:
Danke!
Mfg ReDoX

Jens Schumann 12. Feb 2005 17:51

Re: Thread mit OLEVariant
 
Hallo ReDoX,
spricht die SAPI von Haus aus nicht Englisch? Oder hast Du eine deutsche TextToSpeech Engine.

ReDoX 12. Feb 2005 18:01

Re: Thread mit OLEVariant
 
Hallo Jens,
die SAPI spricht bei mir auch englisch aber es war ja nur ein test ,weil mir auf englisch nichts eingefallen ist :stupid:.
Aber jetzt wir der text ja vom Benutzter gewählt.
Gibt es die SAPI auch auf deutsch?
Mfg ReDoX

Jens Schumann 12. Feb 2005 18:04

Re: Thread mit OLEVariant
 
Hallo ReDoX,
klar gibt es deutsche TextToSpeech (tts) Engines.
Sie mal auf den MS-Agent Download Seiten. Ich habe die deutsche Engine früher oft zusammen mit dem Agent verwendet. Wenn Du es erfolgreich mit dem SAPI verwenden kannst, dann bitte hier dokumentieren.

Jens Schumann 12. Feb 2005 19:29

Re: Thread mit OLEVariant
 
Hallo,
habe gerade harausgefunden, dass die deutsche TTS-Engine von Lernout&Hauspie, die es auf den Agent Seiten gibt für das SAPI 4.0 sind und nicht mit dem auf XP installierten SAPI 5.0 zusammenarbeiten.


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