如何把文本用于语音读出 比如说有一文本中有这样一段话:"程序员大本营",如何把它转换成语音,用普通话读出来 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 英文的用TTS就OK,要普通话读出来就很麻烦了 虽然我没做这方面的 但是听说主要都是用tts 应该有中文版的 一个TTS的例子:unit ReadText_Unit;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, Buttons, VtxtAuto_tlb, Menus, ExtCtrls;type TReadTextForm = class(TForm) Memo1: TMemo; MainMenu: TMainMenu; Read: TMenuItem; Pause: TMenuItem; Stop: TMenuItem; Previous: TMenuItem; Next: TMenuItem; Exit1: TMenuItem; Load: TMenuItem; Speed: TMenuItem; procedure FormCreate(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure ReadClick(Sender: TObject); procedure PauseClick(Sender: TObject); procedure StopClick(Sender: TObject); procedure PreviousClick(Sender: TObject); procedure NextClick(Sender: TObject); procedure Exit1Click(Sender: TObject); procedure LoadClick(Sender: TObject); procedure SpeedClick(Sender: TObject); private { Private declarations } public { Public declarations } end;var ReadTextForm: TReadTextForm; tts:tvtxtauto;implementation{$R *.DFM}procedure TReadTextForm.FormCreate(Sender: TObject);begin memo1.Lines.Clear; tts:=tvtxtauto.Create(self); tts.Register('Project1','Project1'); speed.Caption:='Speed='+inttostr(tts.Speed);end;procedure TReadTextForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);begin tts:=nil;end;procedure TReadTextForm.ReadClick(Sender: TObject);begin tts.Speak(memo1.text,vtxtst_reading);end;procedure TReadTextForm.PauseClick(Sender: TObject);begin if tts.IsSpeaking then tts.AudioPause else tts.AudioResume;end;procedure TReadTextForm.StopClick(Sender: TObject);begin tts.StopSpeaking;end;procedure TReadTextForm.PreviousClick(Sender: TObject);begin tts.AudioRewind;end;procedure TReadTextForm.NextClick(Sender: TObject);begin tts.AudioFastForward;end;procedure TReadTextForm.Exit1Click(Sender: TObject);begin tts:=nil; application.Terminate;end;procedure TReadTextForm.LoadClick(Sender: TObject);var op:topendialog;begin op:=topendialog.Create(self); op.Filter:='Text file|*.txt|All file|*.*'; if op.Execute then memo1.Lines.LoadFromFile(op.filename); op.free;end;procedure TReadTextForm.SpeedClick(Sender: TObject);var ns:integer;begin ns:=strtoint(inputbox('Set new reading speed','Value=',inttostr(tts.speed))); if tts.IsSpeaking then begin tts.AudioPause; tts.Speed:=ns; tts.AudioResume; end else tts.Speed:=ns; speed.Caption:='Speed='+inttostr(tts.Speed); end;end. 看来好象很简单 在哪里能找到 tts? 英文的用TTS就OK,要普通话读出来就很麻烦了 如何在不输入查询条件的情况下自动遍历access数据库表,查找是否有某个特定字段值相同的记录??? ODAC不能在98下用? 新手初学问题 郁闷!散分...... 如何使用wordapplication及excelapplication组件 报表的问题 DBGrid真的没有左边方块的单击事件吗?急死我了。 XP上编写的Delphi程序在Win2000上不能正常运行 请教怎样确定TreeView被选中的节点的位置,详情见正文 如何发布com组件?我遇到问题了 delphi中读取access时间字段的问题,急!!! 怎样实现多表查询?
unit ReadText_Unit;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls, Buttons, VtxtAuto_tlb, Menus, ExtCtrls;type
TReadTextForm = class(TForm)
Memo1: TMemo;
MainMenu: TMainMenu;
Read: TMenuItem;
Pause: TMenuItem;
Stop: TMenuItem;
Previous: TMenuItem;
Next: TMenuItem;
Exit1: TMenuItem;
Load: TMenuItem;
Speed: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure ReadClick(Sender: TObject);
procedure PauseClick(Sender: TObject);
procedure StopClick(Sender: TObject);
procedure PreviousClick(Sender: TObject);
procedure NextClick(Sender: TObject);
procedure Exit1Click(Sender: TObject);
procedure LoadClick(Sender: TObject);
procedure SpeedClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
ReadTextForm: TReadTextForm;
tts:tvtxtauto;implementation{$R *.DFM}procedure TReadTextForm.FormCreate(Sender: TObject);
begin
memo1.Lines.Clear;
tts:=tvtxtauto.Create(self);
tts.Register('Project1','Project1');
speed.Caption:='Speed='+inttostr(tts.Speed);
end;procedure TReadTextForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
tts:=nil;
end;procedure TReadTextForm.ReadClick(Sender: TObject);
begin
tts.Speak(memo1.text,vtxtst_reading);
end;procedure TReadTextForm.PauseClick(Sender: TObject);
begin
if tts.IsSpeaking then
tts.AudioPause else tts.AudioResume;
end;procedure TReadTextForm.StopClick(Sender: TObject);
begin
tts.StopSpeaking;
end;procedure TReadTextForm.PreviousClick(Sender: TObject);
begin
tts.AudioRewind;
end;procedure TReadTextForm.NextClick(Sender: TObject);
begin
tts.AudioFastForward;
end;procedure TReadTextForm.Exit1Click(Sender: TObject);
begin
tts:=nil;
application.Terminate;
end;procedure TReadTextForm.LoadClick(Sender: TObject);
var op:topendialog;
begin
op:=topendialog.Create(self);
op.Filter:='Text file|*.txt|All file|*.*';
if op.Execute then memo1.Lines.LoadFromFile(op.filename);
op.free;
end;procedure TReadTextForm.SpeedClick(Sender: TObject);
var ns:integer;
begin
ns:=strtoint(inputbox('Set new reading speed','Value=',inttostr(tts.speed)));
if tts.IsSpeaking then
begin
tts.AudioPause;
tts.Speed:=ns;
tts.AudioResume;
end else tts.Speed:=ns;
speed.Caption:='Speed='+inttostr(tts.Speed);
end;end.