есть статья http://www.delphimaster.ru/articles/speechapi/index.html - Работа с Microsoft Speech API в Delphi как я не пробовал, он у меня ничего не произносит!
у кого-нибудь есть рабочий примерчик с этим speechApi, чтобы он русские слова выговаривал.
Если что, то я делал вот так, вдруг что забыл:
1. ХР sp2, я всё равно скачал http://activex.microsoft.com/activex/controls/sapi/spchapi.exe. 2. скачал Lernout &Hauspie Text-To-Speech 2.9 Мб (русский мужской и женский голос.) 3. взял юнит как в статье
| Код | unit axControl;
interface
uses Windows, Messages, Classes, Controls, ActiveX, OleCtrls,StdCtrls; //
type TAxControl = class(TOleControl)// private CControlData : TControlData2; // Информация об ActiveX. protected procedure InitControlData; override; public property CData : TControlData2 read CControlData; constructor Create (AOwn : TComponent;AGUID : TGUID); end;
implementation
constructor TAxControl. Create (AOwn : TComponent ;AGUID : TGUID); begin FillChar(CControlData,sizeof(CControlData),0); // Обнуляете поле с информацией об Active CControlData.ClassID :=AGUID; // Указываете QUID компонента,который будет создаваться. inherited Create (AOwn); // Вызываете конструктор предка. ControlStyle := ControlStyle + [csClickEvents]; // Стиль отображения end ;
procedure TAxControl. InitControlData; begin ControlData := @CControlData; // Указываете адрес, где находится информация об ActiveX. end;
end.
|
4. Привязал юнит к своему проекту, и в юните формы вставил:
| Код | procedure TMainForm.TellMe(what: string); begin try compon:=TAxControl.Create(self,stringtoguid('{EEE78591-FE22-11D0-8BEF-0060081841DE}')); compon.Parent:=panel1; compon.Visible:=true; compon.Top:=10; compon.Left:=10; compon.Width:=100; compon.Height:=100; //compon.OleObject.AboutDlg(form1.Handle,'о голосовом движке');// Выводит информацию о компоненте. //compon.OleObject.GeneralDlg(form1.Handle,'настройка'); // Выводит окно настройки компонента. //compon.OleObject.LexiconDlg(form1.Handle,'пользовательский');//Окно подключения пользовательских словарей. //compon.OleObject.Speed:=80; //Скорость речи. X=от 80 до 210. //compon.OleObject.pitch:=125;// Тональность речи X=от 125 до 200. //compon.OleObject.Select(1);//персоанаж X=1(Светлана) X=2(Борис) //compon.OleObject.LipTension:=X;//визуальное положение губ X:= 0..255; compon.OleObject.Speak(what); finally end; end;
// всё что под "//" в верхней процедуре, то если что-то указать, работать перестаёт, и выходит ошибка
// и ещё:
procedure TMainForm.Button1Click(Sender: TObject); begin TellMe('Привет'); sleep(2000); TellMe('TimeToStr(Time)'); sleep(2000); TellMe('hello world'); sleep(2000); end;
|
Вот и всё. На панели появляются губы, они шивелятся, а вот неразборчиво быстро произносится непонятная фраза (всего одна из 3х), и ошибок не выходит!!!
Вот так! Если делал кто уже эту фигню с голосом, скиньте рабочий примерчик плиз! |