Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Sprachausgabe aus DLL geht nicht (https://www.delphipraxis.net/52891-sprachausgabe-aus-dll-geht-nicht.html)

SwordfishCenter 6. Sep 2005 10:22


Sprachausgabe aus DLL geht nicht
 
Hi leute wer weis was
Ich habe eine Anwendung gebastelt die WAV abspielt und Text in Sprache erzeugen soll.
Wenn ich das Prog auch als Project1.exe erstelle geht auch alles.
Aber wenn ich das ganze als Project1.dll erstelle dann geht die Sprachausgabe nicht.
Beim Laden der Sprachergie bleibt die ganze sache hängen!!!!

Für die Sprachausgabe benutze ich eine VCL-Comp. namens "mspeech.pas".
ich Ruf die DLL So auf
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
begin
hDllName:=PChar(SysInfo1.WinAppPath+'\Project1.dll');
hDll := LoadLibrary(hDLLName);
FreeLibrary(hDLL);
end;
wenn ich die Sprachausgabe aus der DLL entferne läuft Sie einwandfrei.
ich möchte Anwendung aber als DLL nutzen und zwar mit Sprachausgabe.

Bernhard Geyer 6. Sep 2005 10:42

Re: Sprachausgabe aus DLL geht nicht
 
Ist es evtl. ein CoInitialize-Fehler

SwordfishCenter 6. Sep 2005 11:27

Re: Sprachausgabe aus DLL geht nicht
 
Liste der Anhänge anzeigen (Anzahl: 1)
doch "CoInitialize(nil);" ist drin
hier der Abschnitt
Delphi-Quellcode:
procedure TMSpeech.Init;
var ModeInfo: TTSModeInfo;
    EngineCount: Integer;
    p: Pointer;
begin
   FInit := True;
   FEngineStarted := False;
   try
      { Enumerate engines }
      p:=nil;
      CoInitialize(p);
      OleCheck(CoCreateInstance(CLSID_TTSEnumerator, Nil, CLSCTX_ALL, IID_ITTSEnum, FITTSEnum));
      OleCheck(FITTSEnum.Reset);
      OleCheck(FITTSEnum.Next(1, ModeInfo, @EngineCount));

      while EngineCount > 0 do
      begin
         FEngines.Add(String(ModeInfo.szModeName));
         OleCheck(FITTSEnum.Next(1, ModeInfo, @EngineCount));
      end;
   except
      FInit := False;
   end;
end;
Ich poste hier mal die ganze Componente zur Sprachausgabe die ich nutze

SwordfishCenter 6. Sep 2005 18:51

Re: Sprachausgabe aus DLL geht nicht
 
hi
falls einer den grund dafür geunden hat warum die componente
nicht in einer dll laufen will wäre es echt supper wenn ich es auch erfahre
oder einer den geänderten code hier rein stellt.
ich weis ihr gebt euch alle mühe. ich weis das auch zu schätzen.
danke schon mal vorab

Heffalump 6. Sep 2005 20:54

Re: Sprachausgabe aus DLL geht nicht
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
warum der Sourcecode nicht funktioniert ist schwehr zu sagen. Wahrscheinlich müsste man den Programmierer der Komponente befragen. Ich hätte jedoch eine Alternative. Was ich sehen konnte, ist das diese auf die Microsoft Speech API zugreift. Das schöne an dieser API ist, das diese ein Typelibrary enthält. Du solltest diese importieren und mal anschauen. Das Implementierung zum Vorlesen beschränkt sich dann auf 2 Zeilen Code und dieses funktioniert auch in einer DLL.

Delphi-Quellcode:
procedure TForm1.Speech(Text: WideString); stdcall;
var lvSpeechVoice : ISpeechVoice;
begin
  lvSpeechVoice:=CoSpVoice.Create;
  lvSpeechVoice.Speak(Text, SVSFDefault);
end;

100nF 6. Sep 2005 21:06

Re: Sprachausgabe aus DLL geht nicht
 
@Heffalump
meistens ist aber nur die englische sprachausgabe installiert, da müsste man zuerst die entsprechende sprache herunterladen und installieren.
evtl. könnte man diese aber auch beim programm einbinden, das weiss ich nicht.

gruss
urbanbruhin

Heffalump 6. Sep 2005 21:15

Re: Sprachausgabe aus DLL geht nicht
 
Zitat:

Zitat von urbanbruhin
@Heffalump
meistens ist aber nur die englische sprachausgabe installiert, da müsste man zuerst die entsprechende sprache herunterladen und installieren.
evtl. könnte man diese aber auch beim programm einbinden, das weiss ich nicht.

gruss
urbanbruhin

da hast Du recht. Allerdings besteht das Problem auch bei der von SwordfishCenter verwendeten Komponente, da diese auf der gleichen API zugreift.

SwordfishCenter 7. Sep 2005 10:31

Re: Sprachausgabe aus DLL geht nicht
 
ich habe keine ActiveX die diese Typelibrary enthält
aber ich habe "ACTIVEVOICEPROJECTLib_TLB (TDirectSS)" von Microsoft
mit der ich auch meine Energie von RealSpeak laden kann.
Aber die will auch nicht in einer DLL laufen.
bekomme eine Fehlermeldun von wegen "CoInitialize" nicht aufgerufen.
habe mir schon voll einen abgebrochen und versucht "CoInitialize" irgendwie mitaufzurufen.
aber ohne erfolg.
und ich will die Sprachenergie von L&H RealSpeak (Vera) German (V1.20) Female #1 laden

Heffalump 7. Sep 2005 15:34

Re: Sprachausgabe aus DLL geht nicht
 
Die Typelibrary musst Du mit Delphi importieren.

Menü -> Projekt -> Typbibliothek importieren. Im Dialogfenster mit Hilfe von Hinzufügen die Datei sapi.dll auswählen. Bei mir befindet sie sich unter: C:\Programme\Gemeinsame Dateien\Microsoft Shared\Speech\sapi.dll. Dann solltest Du über die nötige Schnittstellendatei verfügen.

SwordfishCenter 7. Sep 2005 15:40

Re: Sprachausgabe aus DLL geht nicht
 
ah dann ist das ja auch klar :wall:
werd ich dann gleich tun.
danke für die hilfe :thumb:


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