Entwickler-Ecke

Multimedia / Grafik - Text To Speech installierte stimme finden und auswählen


flyer199 - So 30.03.08 20:43
Titel: Text To Speech installierte stimme finden und auswählen
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


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


Delete - So 30.03.08 22:23

Hier ist ein Codeschnipselchen:


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 - 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