Programowanie w języku Delphi » Gotowce

Syntezator mowy Sam

To jest program, który tylko pokazuje, jak umieścić syntezator mowy istniejący w komputerze we własnym programie, aby sprawdzać wymowę angielską w wydaniu tego syntezatora. Utwórz projekt, wklej kod Unit1 i uruchom. Nic więcej nie trzeba robić, no chyba, że masz wyłączony dźwięk.

Najważniejsze w kodzie jest:
uses Variants, ComObj;
Sam: OLEVariant;
Sam := CreateOLEObject('SApi.SpVoice');
Sam.Speak(Edit.Text);


Napisałem ten gotowiec z myślą o osobach mniej zaawansowanych w Delphi, a bardziej zainteresowanych analizą wymowy syntezatora, po otrzymaniu jednego z pytań do mojego artykułu "Jak zrobić syntezator mowy polskiej wykorzystując Microsoft Sam’a". Właściwie to chodzi o to, żeby nie wchodzić za każdym razem do Panelu strowania / Mowa.

unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure ButtonClick(Sender: TObject);
  public
    Prompt: TLabel;
    Edit: TEdit;
    Button: TButton;
    Sam: OLEVariant;
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
uses
  ComObj;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Sam := CreateOLEObject('SApi.SpVoice');
  Width := 800;
  Height := 600;
  Position := poScreenCenter;
  Font.Name := 'Tahoma';
  Font.Size := 8;
  Font.Style := [fsBold];
  Prompt := TLabel.Create(Self);
  Prompt.Left := 20;
  Prompt.Caption := 'Wpisz tekst, którego wymowę chcesz testować.';
  Prompt.Top := 10;
  InsertControl(Prompt);
  Edit := TEdit.Create(Self);
  Edit.Left := Prompt.Left;
  Edit.Width := Width - Edit.Left * 2;
  Edit.Top := Prompt.Top + Prompt.Height + 10;
  Edit.Text := 'This is your computer''s default voice.';
  InsertControl(Edit);
  Button := TButton.Create(Self);
  Button.Left := 20;
  Button.Width := 80;
  Button.Caption := 'Czytaj';
  Button.Top := Edit.Top + Edit.Height + 10;
  Button.OnClick := ButtonClick;
  InsertControl(Button);
end;
 
procedure TForm1.ButtonClick(Sender: TObject);
begin
  if Trim(Edit.Text) <> '' then
    Sam.Speak(Edit.Text);
end;
 
end.

3 komentarze

chkam 2013-09-14 14:45

Podczas działania programu pod obsługą delphi program nie ma problemów, ale kiedy uruchomię go osobno bez kontroli delphi, program wyrzuca mi taki błąd:
"Floating Point Division by 0"

flaq1991 2011-02-17 22:55

szkoda ze sam nie nawija po polsku xd