www.mamboteam.com
Project1.pl Advertisement
Start arrow Artykuły arrow Praktyczne wykorzystanie Delphi arrow Synteza mowy w Delphi
czwartek, 09 wrzesień 2010
 
 
Menu główne
Start
Artykuły
FAQ
Download
Kontakt
Ciekawe linki
Mapa serwisu
Logowanie





Zapomniałeś hasła?
Nie masz konta? Załóż sobie
Synteza mowy w Delphi Drukuj E-mail
Oceny: / 2
KiepskiBardzo dobry 
Napisał: Berl   
sobota, 01 listopad 2008
Synteza mowy w Delphi jest jak najbardziej możliwa, ale w tym atykule zajmiemy się syntezą mowy za pomocą zewnętrznego syntezatora, jakim jest Syntalk. Z Syntalkiem możemy się połączyć poprzez kanał DDE (Dynamic Data Exchange). Możemy to uczynić poprzez zastosowanie komponentu DDEClientConv z zakładki System. Oczywistym wyborem wydaje się tutaj syntezator Syntalk, gdyż oferuje kanał DDE. Na początku musimy nawiązać połączenie z Syntalkiem. Oczywiście, aby ta operacja się udała, Syntalk musi być włączony.




Na początku dodajemy na formę komponent TDDEClientConv z zakładki System. Następnie w zdarzeniu OnCreate formy wpisujemy :
 
procedure TForm1.FormCreate(Sender: TObject);
begin
    if not DDEClientConv1.SetLink('Syntalk','System') then begin
        ShowMessage('Aby można było używać tej aplikacji musisz najpierw uruchomić SynTalka');
        Application.Terminate;
    end;
end;
Metoda SetLink próbuje nawiązać połączenie z Syntalkiem i zwraca rezultat tej próby (typ boolean). Jeżeli coś poszło nie tak, zwróci wartość false, i aplikacja pokaże stosowny komunikat, i wyłączy się. Dodajemy teraz na formę komponent TButton, opowiedzialny za rozpoczęcie czytania tekstu. Dodajemy też komponent TMemo, w którym będzie znajdował się tekst do przeczytania. Teraz w OnClick Buttona wpisujemy :
 
procedure TForm1.Button1Click(Sender: TObject);
var
    dane  :pchar;
    tekst : string;
begin
    FillChar(tekst,sizeof(tekst),0);
    tekst := Memo1.Text;
    dane := @tekst[1];
    DDEClientConv1.PokeData('text',dane);
    DDEClientConv1.ExecuteMacro('[read]',false);
end;
Aby zatrzymać odtwarzanie, potrzebujemy drugiego komponentu TButton, który będzie używany własnie do zatrzymywania odtwarzania :
 
procedure TForm1.Button2Click(Sender: TObject);
var
    dane : pchar;
    tekst : string;
begin
    FillChar(tekst,sizeof(tekst),0);
    tekst := Memo1.Text;
    dane := @tekst[1];
    DDEClientConv1.PokeData('text',dane);
    DDEClientConv1.ExecuteMacro('[pause]',false);
end;
Aby całkowicie wyłączyć odtwarzanie, msuimy dodać na formę trzeci komponent TButton, odpowiedzialny własnie za tą akcję :
 
procedure TForm1.Button3Click(Sender: TObject);
var
    dane : pchar;
    tekst :string;
begin
    FillChar(tekst,sizeof(tekst),0);
    tekst := Memo1.Text;
    dane := @tekst[1];
    DDEClientConv1.PokeData('text',dane);
    DDEClientConv1.ExecuteMacro('[break]',false);
end;
Jeśli chodzi o Syntalka, to tyle. Teraz zajmiemy się obsługą wbudowanego w system Windows XP systemu syntezy mowy o nazwie Sam. Sam niestety jest zoptymalizowany na język angielski, więc wymowa polskich słów może brzmieć co najmniej dziwnie. Ale ten przykład zobrazuje wykorzystanie nowszego od DDE protokołu OLE (Object Linking and Embedding). Na początku do listy Uses dodajemy moduł ComObj. Następnie tworzymy zmienną globalną typu OleVariant :
 
Voice : OleVariant;
Następnie musimy utworzyć obiekt Voice. W tym celu w zdarzeniu OnCreate formy wpisujemy :
 
procedure TForm1.FormCreate(Sender: TObject);
begin
    Voice := CreateOLEObject('SAPI.SpVoice');
end;
Aby zaimplementować funkcję czytania tekstu, dodajemy na formę TButton oraz TMemo. Button będzie służył do rozpoczęcia czytania tekstu z Memo. W zdarzeniu OnClick Buttona wpisujemy :
 
procedure TForm1.Button1Click(Sender: TObject);
begin
    Voice.Speak(Memo1.text, 0);
end;
Syntezę mowy można też zrealizować przy pomocy syntezatora Ivona, ale z powodu trudności w uzyskaniu Ivona SDK, oraz tego, że jest to produkt komercyjny, zrezygnowałem z jego opisywania. Może w przyszłości :)
Komentarze

Aby dodać komentarz zaloguj się. Jeśli nie masz konta, załóż je sobie.
Tylko zarejestrowani użytkownicy mogą pisać komentarze.

 
wstecz   dalej »
LINKUJ PRO
Gościmy
Odwiedza nas 11 gości
Licznik odwiedzin
117620
 
Góra Góra