注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

鑫淼梦园的博客

圆你的梦想 从这里开始

 
 
 

日志

 
 

用delphi开发基于ms的tts语音朗读程序  

2014-05-17 09:13:12|  分类: delphi xe5 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

用delphi开发基于ms的tts语音朗读程序  

━━━━━━━━━━━━━━━━━━━━━━━━━━
下载地址:   
http://download.microsoft.com/download/speechSDK/SDK/5.1/WXP/EN-US/speechsdk51.exe   
http://download.microsoft.com/download/speechSDK/SDK/5.1/WXP/EN-US/speechsdk51LangPack.exe 
━━━━━━━━━━━━━━━━━━━━━━━━━━
1、安装speechsdk51.exe 
2、安装speechsdk51LangPack.exe 
3、启动Delphi7   
4、安装了sdk5.1后,在Delphi里面Project<Import Type Library对话框里会有一个 
Micosoft Speech Object Library[Version5.1]的ActiveX组件,将它导入。 
你会看到一大堆控件,不过你要用的只是TSpVoice而已。 
TSpVoice实现了对SAPI的包装,能够设置Rate(音速), volume(音量), 
当然还有Voice(即你要的中文语音), 
用TSpObjectTokens的EnumTokens方法得到目前安装的语音, 
装了中文包后你就能得到中文的那个语音,然后TSpVoice.Voice := ...就可以了。 
详细请看SAPI.chm(sdk5.1中自带的help)以及其中的例程。   
    以下是全部源码,基本功能以实现,
    unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,VTxtAuto_TLB, StdCtrls, Buttons, OleServer, SpeechLib_TLB,
ComCtrls;type
TForm1 = class(TForm)
     SpVoice1: TSpVoice;
     BitBtn1: TBitBtn;
     Memo1: TMemo;
     Button1: TButton;
     Button2: TButton;
     Button3: TButton;
     BitBtn2: TBitBtn;
     BitBtn3: TBitBtn;
     BitBtn4: TBitBtn;
     BitBtn5: TBitBtn;
     ComboEngine: TComboBox;
     Button4: TButton;
     StatusBar1: TStatusBar;
     BitBtn6: TBitBtn;
     procedure BitBtn1Click(Sender: TObject);
     procedure Button1Click(Sender: TObject);
     procedure Button2Click(Sender: TObject);
     procedure Button3Click(Sender: TObject);
     procedure BitBtn2Click(Sender: TObject);
     procedure BitBtn3Click(Sender: TObject);
     procedure BitBtn4Click(Sender: TObject);
     procedure BitBtn5Click(Sender: TObject);
     procedure Button4Click(Sender: TObject);
private
     { Private declarations }
public
     { Public declarations }
end;var
Form1: TForm1;
tts:IVTxtAuto;
implementation{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
SpVoice1.Speak(Memo1.Lines.Text,SPFM_CREATE_ALWAYS);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
SpVoice1.Pause;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
SpVoice1.Resume;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if SpVoice1.Rate<10 then
SpVoice1.Rate:=SpVoice1.Rate+1;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
if SpVoice1.Rate>-10 then
SpVoice1.Rate:=SpVoice1.Rate-1;
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
if SpVoice1.Volume<100 thenSpVoice1.Volume:=SpVoice1.Volume+1;
end;
procedure TForm1.BitBtn4Click(Sender: TObject);
begin
if SpVoice1.Volume>0 then
SpVoice1.Volume:=SpVoice1.Volume-1;
end;
procedure TForm1.BitBtn5Click(Sender: TObject);
var   
       Sots1:ISpeechObjectTokens;   
       Sot1:ISpeechObjectToken;   
       i:integer;   
begin   
       SpVoice1.EventInterests    :=    SVEAllEvents;
       Sots1:=SpVoice1.GetVoices('',''); 
        ComboEngine.Clear;
       for    i    :=    0    to    Sots1.Count-1    do   
           begin   
                 Sot1:=Sots1.Item(i);   
                 ComboEngine.Items.Add(Sot1.GetDescription(0));   
           end;   
           begin   
                   if    ComboEngine.Items.Count    >    0    then
                       begin   
                           if   ComboEngine.Items.IndexOf('Microsoft Simplified Chinese')=-1 then
                                   ComboEngine.ItemIndex    :=    0   
                           else   
                                   ComboEngine.ItemIndex := ComboEngine.Items.IndexOf('Microsoft    Simplified Chinese');   
                       end;   
           end;   
end;  
procedure TForm1.Button4Click(Sender: TObject);
var      //设置可用引擎   
           Sots1:ISpeechObjectTokens;   
           Sot1:ISpeechObjectToken;   
begin   
       if    ComboEngine.Itemindex=-1    then    Exit;
       Sots1:=SpVoice1.GetVoices('','');   
       Sot1:=Sots1.Item(ComboEngine.Itemindex);   
       SpVoice1.Voice:=Sot1;   
     StatusBar1.Panels[0].Text:='朗读引擎:'+ComboEngine.Items.Strings[ComboEngine.Itemindex];   
end;  
end.
  评论这张
 
阅读(468)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017