如何使用金山词霸发声(100分)

  • 主题发起人 主题发起人 wwjjss
  • 开始时间 开始时间
W

wwjjss

Unregistered / Unconfirmed
GUEST, unregistred user!
请问那位大虾知道如何借用金山词霸给自己的程序编中文朗读程序???
 
去网上找找,绝地的主页上好象有的
 
金山词霸用到了一个叫...speech的COM组件
待我去查一下
 
我也好像在那见过使用微软这个组件的用法, wait帮你找一下
 
Text-To-Speech

在宝兰中国站点上有应用的例子 www.inprise.com.cn
 
找到但只能读英文要吗?
 
金山词霸 2000 吗?
卸载后重装一片,我这是装第四启遍了,至于为什么,我也不想去研究了。
装一遍,只10来分钟。
 
金山词霸发声使用的是微软TTS引擎。
当金山词霸安好后会在windows下产生speech目录, 里面存放的就是TTS文件.
从delphi中选择工程菜单中的导入类型库菜单,选择windows/
speech目录下的vtxtauto.tlb文件,单击确定后delphi会自动生成vtxauto_TLB.pas文件,它包含了TTS的com接口。
应用如下:
uses vtxauto_TLB;

var TTS: ivtxtauto;

用前:
TTS:=covtxtauto_.Create
TTS.Register('project1','project1');

用后:
TTS:=nil;

TTs.speak('要读的字符串',vtxtst_reading);
TTs.stopspeaking;
// 停止
TTs.set_speed(1);
// 速度

我试过同金山词霸的发音一样的。
 
Fudei 的答案仅能发声E文,俺要中文,帮忙找找,找到分全给!!!
 
不可能吧....利用TTS发中文?
金山词霸里的中文语音是录制好了的不然怎会几百M.
 
TTS好象还不能发中文。。。
 
在没有词霸的机器上需要同时提供哪些文件呢?
 
看看6月5日的<<电脑报>>,里面有对微软TTS引擎的详细说明.
 
利用TTS制作的英文朗读器 ,我可编了一个,发中文可要请教高人了。
 
中文发音现在还没成熟的技术,因为中文和英文有质的区别:
中文字是表“意”的,而英文字是表“音”的,单词对它来
说并没有太大的意义,它几乎是靠发音来传递信息的,所以
从发音上来说,英文就比较容易实现句子中单词和单词之间
的过渡,中文就不一样了,从某种意义上来说,读音只不过
是让能发音的人们交流的一种手段而已,其字形上的联系很
容易找到,读音上联系就难得多了。
 
我是《白浪语音板》的作者,我打算制作中文TTS,各位有何高见?
http://go.163.com/~pino
 
本文载自“计算机世界”:www.ccw.com.cn(华中师范大学卢小海(flier@126.com)

金 山 词 霸2000 的 英 文 全 文 朗 读 功 能 相 信 一 定 给 尝 试 过 的 用 户 留
下 了 很 深 刻 的 印 象, 而 作 为 一 个 程 序 设 计 者, 你 一 定 也 想 在 自
己 的 程 序 中 加 入 类 似 的 功 能 吧, 因 为 那 将 让 自 己 的 程 序 增 色 不
少。
其 实 这 并 不 是 一 件 困 难 的 事, 因 为 金 山 词 霸 实 际 上 也 只 是 直 接
使 用 了MS 的TTS(Text -to -Speech) 技 术 而 已, 通 过 对MS Speech API 的 编
程, 我 们 完 全 可 以 实 现 比 其 更 强 大 的 功 能。 下 面, 让 我 们 在Delphi
环 境 下 实 际 尝 试 一 下。
首 先 从 金 山 词 霸 的 光 盘 上/ciba 目 录 下 运 行 并 安 装mstts.exe(MS TTS
engine) 和spchapi.exe(MS Speech API)。
再 在Delphi 里 新 建 一 个Application。
然 后 从Delphi 的 菜 单Project/Import Type Library... 中 选 击Add..., 浏 览 到
Windows 目 录 下 的Speech 子 目 录 里, 打 开vtxtauto.tlb, 可 以 看 到 下 面
Class names 中 会 出 现 我 们 需 要 的 接 口 的 包 装 类 的 名 字TVTxtAuto, 注
意 对 话 框 底 部 的Generate Component Wrapper 需 要 被 选 中, 点 击Create Unit
就 可 以 打 开 一 个 名 为VTxtAuto_TLB 的Unit。
至 此, 我 们 就 可 以 开 始 实 际 编 程 了。
首先 在Form 的OnCreate 中 对 需 要 使 用 接 口 初 始 化 并 进 行 注 册:
...
procedure TfrmMain.FormCreate(Sender: TObject);
begin

FISpeech := CoVTxtAuto_.Create;
FISpeech.Register(‘Demo Site', ‘Demo App');
end;

...

由 于Delphi 对 接 口 进 行 了 良 好 的 包 装, 因 此 只 需 直 接 建 立 包 装 类,
其 他 后 台 的 操 作 如 接 口 的 查 询、 释 放 等 交 给Delphi 在 后 台 自 动 完
成。
注 意 这 里 的Register 操 作 是 必 不 可 少 的, 因 为 可 能 有 多 个 程 序 不
同 设 置 使 用TTS 引 擎。
然 后 在MainForm 上 放 一 个TMemo 和 若 干 个 TButton, 并 在 其OnClick 中 加 入
对 应 的 代 码。
Form 定 义 如 下:

object frmMain: TfrmMain
Left = 296
Top = 187
BorderStyle = bsDialog
Caption = ‘ 英 文 全 文 朗 读 演 示'
ClientHeight = 185
ClientWidth = 456
Color = clBtnFace
Font.Charset = GB2312_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = ‘ 宋 体'
Font.Style = []
OldCreateOrder = False
Position = poDesktopCenter
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 12
object memText: TMemo
Left = 8
Top = 8
Width = 361
Height = 169
ScrollBars = ssVertical
TabOrder = 0
end
object btnRead: TButton
Left = 376
Top = 8
Width = 75
Height = 25
Caption = ‘ 朗 读( &R)'
TabOrder = 1
OnClick = btnReadClick
end
object btnPause: TButton
Left = 376
Top = 40
Width = 75
Height = 25
Caption = ‘ 暂 停( &P)'
Enabled = False
TabOrder = 2
OnClick = btnPauseClick
end
object btnStop: TButton
Left = 376
Top = 72
Width = 75
Height = 25
Caption = ‘ 停 止( &S)'
Enabled = False
TabOrder = 3
OnClick = btnStopClick
end
object btnForward: TButton
Left = 376
Top = 120
Width = 75
Height = 25
Caption = ‘ 下 一 句( &N)'
Enabled = False
TabOrder = 4
OnClick = btnForwardClick
end
object btnRewind: TButton
Left = 376
Top = 152
Width = 75
Height = 25
Caption = ‘ 上 一 句( &W)'
Enabled = False
TabOrder = 5
OnClick = btnRewindClick
end
end

----关 键 代 码 段 如 下:

---- 1. 朗 读 与 停 止

...
procedure TfrmMain.btnReadClick(Sender: TObject);
begin

FISpeech.Speak(memText.Lines.Text, vtxtst_
READING);
btnPause.Enabled := True;
btnStop.Enabled := True;
end;


procedure TfrmMain.btnStopClick(Sender: TObject);
begin

FISpeech.StopSpeaking;
btnPause.Enabled := False;
btnStop.Enabled := False;
btnPause.Caption := ‘ 暂 停( &P)';
end;

...

Speak 成 员 函 数 的 第 一 个 参 数 向TTS 引 擎 传 递 需 要 朗 读 的 文 字, 第
二 个 参 数 由 指 定 朗 读 时 使 用 的 语 气 和 优 先 级 的 两 个 符 号 合 并 而
成。
2. 暂 停 与 恢 复
...
procedure TfrmMain.btnPauseClick(Sender: TObject);
begin

with FISpeechdo

if IsSpeaking then

begin

AudioPause;
btnPause.Caption := ‘ 恢 复( &R)';
end
else

begin

AudioResume;
btnPause.Caption := ‘ 暂 停( &P)';
end;

end;

...

这 里 通 过IsSpeaking 属 性 可 以 取 得 当 前 状 态, 然 后 通 过AudioPause 和
AudioResume 暂 停 和 恢 复 朗 读。
另 外 用 成 员 函 数AudioFastForward 和AudioRewind 可 以 向 前 和 后 跳 过 一 句
朗 读, 通 过 读 写Speed 属 性 还 可 以 取 得 或 设 置 朗 读 的 语 速, 单 位 是
字/ 分, 缺 省 值 为170。

注 意Speed 和Enabled 属 性 缺 省 设 置 是 只 写 的, 但 实 际 上IVTxtAuto 提 供
了Get_Speed 和Get_Enabled 函 数, 所 以 我 们 只 要 把VTxtAuto_TLB 单 元 中 的
声 明 修 改 一 下, 如:

...
IVTxtAuto = interface(IDispatch)
...
property Speed: Integer read Get_Speed write Set_Speed;
property Enabled: Integer read Get_Enabled write Set_Enabled;
...
end;

...

即 可 正 常 使 用Speed 和Enabled 属 性 了。

至 此, 一 个 简 单 的 英 文 全 文 朗 读 器 就 完 成 了, 有 兴 趣 的 朋 友 可
以 为 其 加 入 监 视 剪 贴 板, 热 键 激 活 等 功 能。

本 文 程 序 在Win NT/98 + Delphi 4/5 环 境 下 调 试 通 过。
 
鉴于问题作者近半年没来,
而且中文TTS目前为止尚未实现,
此问题结束
 
多人接受答案了。
 
我有 普通话语音库.wav
 
后退
顶部