Delphi 实现简易语音发音(基于TTS方式)
uses Comobj;
procedure TForm1.Button1Click(Sender: TObject);
var
voice: OLEVariant;
begin
voice := CreateOLEObject('SAPI.SpVoice');
voice.Speak('Hello World!', 0);
end;
Delphi_TTS_1
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, Menus, OleCtrls, ACTIVEVOICEPROJECTLib_TLB; type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
Go1: TMenuItem;
Alpha1: TMenuItem;
N201: TMenuItem;
N501: TMenuItem;
N1001: TMenuItem;
RT: TRichEdit;
ss: TDirectSS;
procedure RS(Sender: TObject);
procedure N201Click(Sender: TObject);
procedure N501Click(Sender: TObject);
procedure N1001Click(Sender: TObject);
procedure Go1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm} procedure TForm1.RS(Sender: TObject);
begin
rt.Width :=form1.Width -;
rt.Height :=form1.Height -;
end; procedure TForm1.N201Click(Sender: TObject);
begin
form1.AlphaBlendValue := ;
end; procedure TForm1.N501Click(Sender: TObject);
begin
form1.AlphaBlendValue := ;
end; procedure TForm1.N1001Click(Sender: TObject);
begin
form1.AlphaBlendValue := ;
end; procedure TForm1.Go1Click(Sender: TObject);
begin
ss.Speak(rt.Text);
end; end.
SpeechLib_TLB控件效能
SpeechLib_TLB控件功能
我在Delphi编写的软件中用到SpeechLib_TLB,声音软件XPSpeech.msi,可以发出的声音不好听,而且声音很小,想请问是哪方面的原因,是XPSpeech.msi软件的原因吗?需要购买发声收费软件吗?
------解决方案-------------------------------------------------------- unit Ifly_Stts; interface implementation // 各种声音格式 Const TTS_ADF_DEFAULT = ; TTS_ADF_PCM8K8B1C = ; TTS_ADF_PCM16K8B1C = ; TTS_ADF_PCM8K16B1C = ; TTS_ADF_PCM16K16B1C = ; TTS_ADF_PCM11K8B1C = ; TTS_ADF_PCM11K16B1C = ; TTS_ADF_ALAW16K1C = ; TTS_ADF_ULAW16K1C = ; TTS_ADF_ALAW8K1C = ; TTS_ADF_ULAW8K1C = ; TTS_ADF_ALAW11K1C = ; TTS_ADF_ULAW11K1C = ; TTS_ADF_ADPCMG7218K4B1C = ; TTS_ADF_ADPCMG7216K4B1C = ; TTS_ADF_ADPCMG7233B1C = ; TTS_ADF_ADPCMG7235B1C = ; TTS_ADF_VOX6K1C = ; TTS_ADF_VOX8K1C = ; //文本内码 TTS_CP_GB2312 = TTS_CP_GBK = TTS_CP_UNICODE = //'参数类型 TTS_PARAM_LOCAL_BASE = &H0; TTS_PARAM_INBUFSIZE = &H1; TTS_PARAM_OUTBUFSIZE = &H2; TTS_PARAM_VID = &H3; TTS_PARAM_CODEPAGE = &H4; TTS_PARAM_AUDIODATAFMT = &H5; TTS_PARAM_SPEED = &H6; TTS_PARAM_AUDIOHEADFMT = &H7; TTS_PARAM_VOLUME = &H8; TTS_PARAM_PITCH = &H9; type //'================================================================ //' STTS Api 声明 //'================================================================ //' 初始化 function STTSInit():boolean;stdcall; external 'STTSApi.dll'; //' 逆初始化 function STTSDeInit():boolean;stdcall; external 'STTSApi.dll'; //' 建立与TTS服务器的连接 function STTSConnect(sSerialNumber:string;sServerIP:string):Integer;stdcall; external 'STTSApi.dll'; //' 断开与TTS服务器的连接 Function STTSDisconnect(hTTSInstance:Integer):boolean;stdcall; external 'STTSApi.dll'; //' 设置本次连接的合成参数 Function STTSSetParam(hTTSInstance:integer;lngType:integer;lngParam:integer):Boolean;stdcall; external 'STTSApi.dll'; //' 获得本次连接的合成参数 Function STTSGetParam(hTTSInstance:Integer;lngType:integer;lngParam:integer):Boolean;stdcall; external 'STTSApi.dll'; //' 从字符串合成到音频文件 Function STTSString2AudioFile(hTTSInstance:Integer;sString:string;sWaveFile:string):Boolean;stdcall; external 'STTSApi.dll'; //' 从文本文件合成到音频文件 Function STTSFile2AudioFile(hTTSInstance:Integer;sTextFile:string;sWaveFile:string):Boolean;stdcall; external 'STTSApi.dll'; //'播放字符串 Function STTSPlayString(hTTSInstance:Integer;sTextFile:string;bAsynch:Boolean):Boolean;stdcall; external 'STTSApi.dll'; //'播放文本文件 Function SSTTSPlayTextFile(hTTSInstance:Integer;sTextFile:string;bAsynch:Boolean):Boolean;stdcall; external 'STTSApi.dll'; //'播放停止 Function STTSPlayStop():Boolean;stdcall; external 'STTSApi.dll'; //'查询播放状态 Function STTSQueryPlayStatus(lngStatus:Integer):Boolean;stdcall; external 'STTSApi.dll'; //'TTS版本信息 Function STTSAbout(sAboutInfo:string;ninfosize:Integer):Boolean;stdcall; external 'STTSApi.dll';
//' 用来获取错误代码的Windows API函数
//Public Declare Function GetLastError Lib "kernel32" () As Long
end; end. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; OpenDialog1: TOpenDialog; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} //'================================================================ //' STTS Api 声明 //'================================================================ //' 初始化 function STTSInit():boolean;stdcall; external 'STTSApi.dll'; //' 逆初始化 function STTSDeinit():boolean;stdcall; external 'STTSApi.dll'; //' 建立与TTS服务器的连接 function STTSConnect(sSerialNumber:string;sServerIP:string):Integer;stdcall; external 'STTSApi.dll'; //' 断开与TTS服务器的连接 Function STTSDisconnect(hTTSInstance:Integer):boolean;stdcall; external 'STTSApi.dll'; //' 设置本次连接的合成参数 Function STTSSetParam(hTTSInstance:integer;lngType:integer;lngParam:integer):Boolean;stdcall; external 'STTSApi.dll'; //' 获得本次连接的合成参数 Function STTSGetParam(hTTSInstance:Integer;lngType:integer;lngParam:integer):Boolean;stdcall; external 'STTSApi.dll'; //' 从字符串合成到音频文件 Function STTSString2AudioFile(hTTSInstance:Integer;sString:string;sWaveFile:string):Boolean;stdcall; external 'STTSApi.dll'; //' 从文本文件合成到音频文件 Function STTSFile2AudioFile(hTTSInstance:Integer;sTextFile:string;sWaveFile:string):Boolean;stdcall; external 'STTSApi.dll'; //'播放字符串 Function STTSPlayString(hTTSInstance:Integer;sString:string;bAsynch:Boolean):Boolean;stdcall; external 'STTSApi.dll'; //'播放文本文件 Function STTSPlayTextFile(hTTSInstance:Integer;sTextFile:string;bAsynch:Boolean):Boolean;stdcall; external 'STTSApi.dll'; //'播放停止 Function STTSPlayStop():Boolean;stdcall; external 'STTSApi.dll'; //'查询播放状态 Function STTSQueryPlayStatus(lngStatus:Integer):Boolean;stdcall; external 'STTSApi.dll'; //'TTS版本信息 Function STTSAbout(sAboutInfo:string;ninfosize:Integer):Boolean;stdcall; external 'STTSApi.dll'; //' 用来获取错误代码的Windows API函数 //Public Declare Function GetLastError Lib "kernel32" () As Long procedure TForm1.Button1Click(Sender: TObject); var myhandle:integer; begin STTSInit(); myhandle:=STTSconnect('','127.0.0.1'); STTSPlayString(myhandle,self.Memo1.Text,true) ; STTSDisconnect(myhandle);
end; procedure TForm1.Button2Click(Sender: TObject);
begin
STTSPlayStop();
end; procedure TForm1.Button3Click(Sender: TObject);
var
strls:string;
myhandle:integer;
begin
if not self.OpenDialog1.Execute then exit;
strls:=self.OpenDialog1.FileName;
STTSInit();
myhandle:=STTSconnect('','127.0.0.1');
STTSPlayTextFile(myhandle,strls,true);
STTSDisconnect(myhandle); end; procedure TForm1.FormDestroy(Sender: TObject);
begin
STTSDeInit();
end; end. 运行目录下必须有四个DLL
AUCodec.dll
iFlySAPI.dll
iFlyTTS.dll
STTSApi.dll
应用 Microsoft TTS 语音引擎的 Delphi 语言实例
建立一个单窗体工程,添加一个 Edit 和 2 个 Button 控件,分别命名为 Edit1、btnSpeak、btnStop。然后安装引用 TTS 的 vtxtauto.tlb 类库文件,方法是点击菜单“工程-Import Type Library”,点“add”按钮,然后选中 Windows/speech 下的 Vtxtauto.tlb 文件,放入安装包后,再将其添加成 Delphi 的一个 Unit,自动产生的名字为“VTxtAuto_TLB”。然后,在主 Unit 的 Uses 里引用 VTxtAuto_TLB,即在 Uses 后添加字串“VTxtAuto_TLB”。最后参考以下代码:
procedure TfrmSpeech.FormCreate(Sender: TObject); begin vtxt:=CoVTxtAuto_.Create; vtxt.Register(‘’,‘Speech’); Edit1.Text:=‘I am a chinese, I love my homeland very much, and you?’ end; procedure TfrmSpeech.btnSpeakClick(Sender: TObject); begin vtxt.Speed:=; vtxt.Speak(trim(Edit1.Text),); end; procedure TfrmSpeech.btnStopClick(Sender: TObject); begin vtxt.StopSpeaking; end; end.
delphi7如何调用系统语音库
(一)要使用系统的语音库,你需要先安装MicrosoftSpeechSDK5.1及其语言包,下载地址: SpeechSDK5.1: http://www.newhua.com/soft/38264.htmSpeechSDK5.1语言包(中英文): http://www.onlinedown.net/soft/38265.htm
(二)安装完成后,需要在D7里导入类库以便生成SAPI组件于IDE组件面板. 启动D7,Project->ImportTypeLibrary->找到MicrosoftSpeechObjectLibrary(Version5.0) 点Install.. 成功后会在D7的组件面板里出现SAPI5.1控件页.
(三)OK,开始来个简单的工程. 启动D7新建个工程,往窗口里扔进一个TMemo,两个TButton,再扔进一个TSpVoice(SAPI5.1控件页),写下下边的代码:
unitUnit1; interface uses Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms, Dialogs,OleServer,SpeechLib_TLB,StdCtrls; type TForm1=class(TForm) Button1:TButton; Memo1:TMemo; SpVoice1:TSpVoice; Button2:TButton; Button3:TButton; procedureButton1Click(Sender:TObject); procedureButton3Click(Sender:TObject); private {Privatedeclarations} public procedurePlayVoxEx; end; var Form1:TForm1; implementation {$R*.dfm} {TForm1} procedureTForm1.PlayVoxEx;var i:Integer; s,t:String;begin s:=Memo1.Text; fori:=1toLength(s)do begin ifnot(s[i]in[#,#])then begin ifByteType(s,i)=mbSingleBytethen begin SpVoice1.Voice:=SpVoice1.GetVoices('','').Item();//设置报读的语种,0为英文,3为中文 t:=s[i]; end elseifByteType(s,i)=mbLeadBytethen begin SpVoice1.Voice:=SpVoice1.GetVoices('','').Item(3); t:=s[i]; t:=s[i] s[i 1]; end else continue; SpVoice1.Speak(t,SVSFlagsAsync);//读出Text end; end;end; procedureTForm1.Button1Click(Sender:TObject);begin SpVoice1.Voice:=SpVoice1.GetVoices('','').Item(3); SpVoice1.Speak(Memo1.Text,SVSFlagsAsync);end; procedureTForm1.Button3Click(Sender:TObject);begin SpVoice1.Voice:=SpVoice1.GetVoices('','').Item(0); SpVoice1.Speak(Memo1.Text,SVSFlagsAsync);end; end. Button1是直接读中文语音的,Button2可以读中英文混合(效果相当差),Button3直接读英文用的
我知道的就这么多了,希望对你有点用... 这边的代码直接复制编译会报错,需要按CTRL H打开替换框,复制" "双引号内的字符替换成两个空格(全部替换),再编译就行了. procedureTForm1.Button3Click(Sender:TObject);begin SpVoice1.Voice:=SpVoice1.GetVoices('','').Item(0); SpVoice1.Speak(Memo1.Text,SVSFlagsAsync);end; 改成: procedureTForm1.Button3Click(Sender:TObject);begin PlayVoxEx;end; dclusr.dpk是缺省的用户安装控件包,多出来的应该是你之前安装到dclusr.dpk包里的一些别的控件...在导入ActiveX那个界面里点Install后,你可以选Intonewpackage,然后浏览一个目录填个包名再返回安装就不会有这些东西了.
追问:
Delphi 实现简易语音发音(基于TTS方式)的更多相关文章
- Delphi - OLE类实现TTS方式语音朗读
Delphi调用OLE类实现TTS方式语音朗读 直接看代码: unit uMain; interface uses Windows, Messages, SysUtils, Variants, Cla ...
- Delphi文字转语音TTS【支持选择语音库,播放,暂停,开始,停止,生成语音文件,设置音量,设置语速】
作者QQ:(648437169) 点击下载➨文字转语音TTS [Delphi 文字转语音TTS]调用系统自带的TTS组件,支持XP,vista,win7,win8,win10系统,支持选择语音库,播放 ...
- 【ALB技术笔记】基于多线程方式的串行通信接口数据接收案例
基于多线程方式的串行通信接口数据接收案例 广东职业技术技术学院 欧浩源 1.案例背景 在本博客的<[CC2530入门教程-06]CC2530的ADC工作原理与应用>中实现了电压数据采集的 ...
- Shiro入门之二 --------基于注解方式的权限控制与Ehcache缓存
一 基于注解方式的权限控制 首先, 在spring配置文件applicationContext.xml中配置自动代理和切面 <!-- 8配置自动代理 --> <bean cl ...
- 用delphi检查网络连接状态3种方式
用delphi检查网络连接状态3种方式 用delphi检查网络连接状态 检测计算机是否联网比较简单的做法可以通过一个 Win32 Internet(WinInet) 函数 InternetCheckC ...
- 技术实战:基于 MHA 方式实现 MySQL 的高可用(转)
转自:http://os.51cto.com/art/201307/401702_all.htm MHA故障转移可以很好的帮我们解决从库数据的一致性问题,同时最大化挽回故障发生后的数据.本文分享了基于 ...
- Elasticsearch-mapper 基于注解方式生成mapping(2.0以上)
Elasticsearch生成mapping的方式上有多种方式,我们可以把mapping做成配置文件,也可以用spring-data-elasticsearch基于注解生成. 在基于注解生成这种方式上 ...
- SpringMVC入门(基于注解方式实现)
---------------------siwuxie095 SpringMVC 入门(基于注解方式实现) SpringMVC ...
- SpringMVC入门(基于XML方式实现)
----------------------siwuxie095 SpringMVC 入门(基于 XML 方式实现) (一)搭建 SpringMVC 环境 1.先下载相关库文件,下载链接: (1)ht ...
随机推荐
- Qt的信号和槽机制
一.信号和槽机制 信号和槽用于两个对象之间的通信,我们希望任何对象都可以和其他对象进行通信. 当一个特殊的事情发生时便可以发射一个信号,而槽就是一个函数,它在信号发射后被调用来相应这个信号.( ...
- 远程桌面发生身份验证错误,要求的函数不受支持【WIN10家庭】或【专业版】--解决办法
10号更新后,远程出现如下报错 一.[家庭中文版]解决办法[亲自试验] 开启WIN家庭中文版的本地组策略 1.打开tet复制以下代码:@echo off pushd "%~dp0" ...
- js调用ios和安卓方法
安卓: window.AndroidWebView.方法名(参数); window.AndroidWebView.productDetail(1989); ios: function isbrowse ...
- 个人笔记 - MATLAB
1.教程 2.基本知识 2.1 帮助文档设置成中文:链接1 2.2 多行注释: 链接1 2.3 MATLAB基本数据类型: 链接1 链接2 2.4 matlab中的 ndims(a).length( ...
- JS 常用字符串,数组操作
JavaScript String/Array对象 JS String对象 String 对象属性 属性 描述 constructor 对创建该对象的函数的引用 length 字符串的长度 pro ...
- MySQL-存储过程动态执行sql
存储过程动态执行 sql --存储过程名和参数,参数中in表示传入参数,out标示传出参数,inout表示传入传出参数 create procedure p_procedurecode(in sumd ...
- 用 Flask 来写个轻博客 (14) — M(V)C_实现项目首页的模板
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 实现所需要的视图函数 实现 home.html 模板 代码分析 实现效 ...
- oninput 事件 比较angular张的 ng-model指令 和 Vue中的 v-model指令
oninput 事件在用户输入时触发. 该事件在 <input> 或 <textarea> 元素的值发生改变时触发. 提示: 该事件类似于 onchange 事件.不同之处在于 ...
- HDU 1847 Good Luck in CET-4 Everybody! (巴什博弈)
题目链接:HDU 1847 Problem Description 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Cici都是如此. ...
- 《Hadoop学习之路》学习实践二——配置idea远程调试hadoop
背景:在上篇文章中按照大神“扎心了老铁”的博客,在服务器上搭建了hadoop的伪分布式环境.大神的博客上是使用eclipse来调试,但是我入门以来一直用的是idea,eclipse已经不习惯,于是便摸 ...