Autor Beitrag
flyer199
Hält's aus hier
Beiträge: 6

Win XP
D7 Prof
BeitragVerfasst: So 30.03.08 20:43 
Hi,

ich habe da ein Problem mit text to speech und Hoffe das einer von euch eine Idee oder Denkanstoß für mich hat.

Ich rufe TTS wie folgt auf

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure Speak(SpeechText: String);
var
  voice: OLEVariant;
begin
    voice := CreateOLEObject('SAPI.SpVoice');
    voice.Speak(SpeechText, 0);
end;


Mein Problem liegt darin die installierten Stimmen herauszufinden und diese dann auch auszuwählen. Ich habe schon Goggle bemüht und auch hier im Forum gesucht, aber leider habe ich nicht wirklich etwas Passendes gefunden, bzw. haben nicht funktioniert

Wäre klasse wenn mir jemand helfen könnte.

Danke
Ralf
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 30.03.08 22:23 
Hier ist ein Codeschnipselchen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm2.FormCreate(Sender: TObject);
var I: Integer; SOTokens: ISpeechObjectTokens;
begin
  SOTokens := SpVoice1.GetVoices('''');
  for I := 0 to SOTokens.Count - 1 do
  ListBox1.Items.Add(SOTokens.Item(I).GetDescription(0)); 
  ListBox1.ItemIndex := ListBox1.Items.IndexOf(SpVoice1.Voice.GetDescription(0)); 
  ListBox1.OnClick(ListBox1);
  SpVoice1.Volume:= 60;
  SpVoice1.Voice := SpVoice1.GetVoices('''').Item(1);
  Label1.Caption:= 'Ausgewählte Stimme : '+ SpVoice1.Voice.GetDescription(0);
end;

procedure TForm2.ListBox1Click(Sender: TObject);
begin
  SpVoice1.Voice := SpVoice1.GetVoices('''').Item(ListBox1.ItemIndex);
  Label1.Caption:= 'Ausgewählte Stimme : '+ SpVoice1.Voice.GetDescription(0);
  SpVoice1.Speak('test', SVSFlagsAsync);
end;
flyer199 Threadstarter
Hält's aus hier
Beiträge: 6

Win XP
D7 Prof
BeitragVerfasst: Mo 31.03.08 09:51 
Hallo hathor,

danke für den Codeschnipsel. So hatte ich das auch probiert aber irgendwie wollte es nicht. Ich bekam immer die Fehlermeldung ‚Undefinierter Bezeichner SoTokens‘.

Ich wollte es eigentlich nur über das OLE Objekt machen ohne die Komponenten zu Installieren. Nachdem ich aber jetzt die ActiveX Komponenten installiert habe geht es.

Vielen Dank für die schnelle Antwort.

Gruß
Ralf