原文:http://blog.csdn.net/artlife/article/details/1449162
web
页面中使用语音合成技术
前言:
语音合成技术其实并没有什么神秘的,也不像想象中的那么繁杂。今天我就与大家一起来看一下,怎么让我们网页为我们朗读文本。怎样做到在
web
中进行语音合成
。我也将使用最短的代码,最通俗话语来完成这篇文章。
环境要求:
首先我们需要一个微软的
Speech SDK 5.1
的安装包(当然你的机器的操作系统版本要在
windows2000
以上的这个范畴)
,
来使得我们的机器具有语音识别的功能。安装包,您可以在这里找到:
安装说明:
·
If
you want to download sample code, documentation, SAPI, and the U.S.
English Speech engines for development purposes, download the Speech SDK
5.1 file (SpeechSDK51.exe).
·
If
you want to use the Japanese and Simplified Chinese engines for
development purposes, download the Speech SDK 5.1 Language Pack file
(SpeechSDK51LangPack.exe) in addition to the Speech SDK 5.1 file.
·
If
you want to redistribute the Speech API and/or the Speech engines to
integrate and ship as a part of your product, download the Speech 5.1
SDK Redistributables file (SpeechSDK51MSM.exe).
·
If
you want to get only the Mike and Mary voices redistributable for
Windows XP, download Mike and Mary redistributables (Sp5TTIntXP.exe).
·
If you only want the documentation, download the Documentation file (sapi.chm).
其实上面这些可以不看,请您下载并安装
SpeechSDK51.exe
和
SpeechSDK51LangPack.exe
就可以了。
让我们开始:
环境已经准备好了
,那就让我们正式开始吧。
首先我们需要一个能够"发声"的对象,暂时我们就称他为" 朗读人"。在不同的语音合成的程序中,他所出现的形式也是不同的,当然这是后话,以后我再告诉你(嘿嘿,不是卖关子,这是第一讲,咱们先让它能说话了先)。
在web 应用程序的 html 代码中创建" 朗读人"对象:
// Create the Sapi SpVoice object
var VoiceObj = new ActiveXObject("Sapi.SpVoice");
上面的代码是创建一个" 朗读人"对象,我们要将这个写在js中(有点废话,呵呵)。
下面的代码将告诉我们" 朗读人"是如何工作的:
VoiceObj.Speak(“hello world”);
下面的代码告诉了我们如何销毁我们的" 朗读人"
// Clean up voice object
delete VoiceObj;
当您如果读到了这里,我首先要感谢您的耐心。与此同时我也要恭喜你了,如果您是一个敏感的程序员。这个时候您可能已经开始编写您自己的语音合成代码了。因为我们知道了,如何创建对象,如何使用对象的方法,和如何delete它。
当然这些还远远不够,让我们再做的更好些:
控制声音的属性
控制音量(1~100):
VoiceObj.Volume = 80 ;
控制语速(-10~10)
VoiceObj.Rate = 0;
控制朗读人的声音
VoiceObj.Voice = "Microsoft Anna";
控制朗读人的硬件设备输出
VoiceObj.AudioOutput = "SoundMax Integrated";
好了 该知道的 我们都已经知道了 , 再让我们看一个完整的例子来结束我们这一次的语音合成的学习。
完整的例子:
<!--
Copyright @ 2001 Microsoft Corporation All Rights Reserved.
-->
<
HTML
>
<
HEAD
>
<
META
HTTP-EQUIV
="Content-Type"
content
="text/html; charset=UTF-8"
>
<
TITLE
>
TTS Demo
</
TITLE
>
<
SCRIPT
LANGUAGE
="JavaScript"
>
//
Create the Sapi SpVoice object
var
VoiceObj
=
new
ActiveXObject(
"
Sapi.SpVoice
"
);
//
ChangeVoice() function:
//
This function sets the newly selected voice choice from the Voice
//
Select box on the Voice object.
function
ChangeVoice()
{
var
i
=
parseInt( idsVoices.value );
VoiceObj.Voice
=
VoiceObj.GetVoices().Item(i);
}
//
ChangeAudioOutput() function:
//
This function sets the newly selected audio output choice from the
//
Audio Output Select box on the Voice object.
function
ChangeAudioOutput()
{
var
i
=
parseInt( idsAudioOutputs.value );
VoiceObj.AudioOutput
=
VoiceObj.GetAudioOutputs().Item(i);
}
//
IncRate() function:
//
This function increases the speaking rate by 1 up to a maximum
//
of 10.
function
IncRate()
{
if
( VoiceObj.Rate
<
10
)
{
VoiceObj.Rate
=
VoiceObj.Rate
+
1
;
}
}
//
DecRate() function:
//
This function decreases the speaking rate by -1 down to a minimum
//
of -10.
function
DecRate()
{
if
( VoiceObj.Rate
>
-
10
)
{
VoiceObj.Rate
=
VoiceObj.Rate
-
1
;
}
}
//
IncVol() function:
//
This function increases the speaking volume by 10 up to a maximum
//
of 100.
function
IncVol()
{
if
( VoiceObj.Volume
<
100
)
{
VoiceObj.Volume
=
VoiceObj.Volume
+
10
;
}
}
//
DecVol() function:
//
This function decreases the speaking volume by -10 down to a minimum
//
of 0.
function
DecVol()
{
if
( VoiceObj.Volume
>
9
)
{
VoiceObj.Volume
=
VoiceObj.Volume
-
10
;
}
}
//
SpeakText() function:
//
This function gets the text from the textbox and sends it to the
//
Voice object's Speak() function. The value "1" for the second
//
parameter corresponds to the SVSFlagsAsync value in the SpeechVoiceSpeakFlags
//
enumerated type.
function
SpeakText()
{
if
( idbSpeakText.value
==
"
SpeakText
"
)
{
//
Speak the string in the edit box
try
{
VoiceObj.Speak( idTextBox.value );
}
catch
(exception)
{
alert(
"
Speak error
"
);
}
}
else
if
( idbSpeakText.value
==
"
Stop
"
)
{
//
Speak empty string to Stop current speaking. The value "2" for
//
the second parameter corresponds to the SVSFPurgeBeforeSpeak
//
value in the SpeechVoiceSpeakFlags enumerated type.
VoiceObj.Speak(
""
);
}
}
</
SCRIPT
>
<
SCRIPT
FOR
="window"
EVENT
="OnQuit()"
LANGUAGE
="JavaScript"
>
//
Clean up voice object
delete
VoiceObj;
</
SCRIPT
>
</
HEAD
>
<
BODY
>
<
H1
align
=center
>
Simple TTS (DHTML)
</
H1
>
<
H1
align
=center
><
FONT
size
=3
>
</
FONT
>
<
IMG
alt
=""
border
=2
hspace
=0
id
=idImage
src
="mouthclo.bmp"
>
</
H1
>
<
H1
align
=center
>
<
TEXTAREA
ID
=idTextBox
COLS
=50
ROWS
=10
WRAP
=VIRTUAL
>
Enter text you wish spoken here
</
TEXTAREA
>
</
H1
>
<
P
align
=center
><
STRONG
><
STRONG
>
Rate
<
STRONG
>
<
INPUT
id
=idbIncRate
name
=button1
type
=button
onclick
=IncRate()
value
=" + "
></
STRONG
>
<
INPUT
id
=idbDecRate
name
=button2
type
=button
onclick
=DecRate()
value
=" - "
style
="LEFT: 237px; TOP: 292px"
>
</
STRONG
>
Volume
<
STRONG
><
STRONG
>
<
INPUT
id
=idbIncVol
name
=button3
onclick
=IncVol()
style
="LEFT: 67px; TOP: 318px"
type
=button
value
=" + "
>
<
INPUT
id
=idbDecVol
name
=button4
onclick
=DecVol()
type
=button
value
=" - "
style
="LEFT: 134px; TOP: 377px"
>
</
STRONG
></
STRONG
></
STRONG
></
P
>
<
P
align
=center
><
STRONG
><
BUTTON
id
=idbSpeakText
onclick
=SpeakText();
style
="HEIGHT: 24px; LEFT: 363px; TOP: 332px; WIDTH: 178px"
>
SpeakText
</
BUTTON
></
STRONG
></
P
>
<
P
align
=center
><
STRONG
>
Voice
<
STRONG
>
Audio Output
</
STRONG
></
STRONG
></
P
>
<
P
align
=center
>
<
SELECT
id
=idsVoices
name
=Voices
onchange
=ChangeVoice()
style
="FONT-FAMILY: serif; HEIGHT: 21px; WIDTH: 179px"
>
</
SELECT
>
<
SELECT
id
=idsAudioOutputs
name
=AudioOutputs
onchange
=ChangeAudioOutput()
style
="HEIGHT: 22px; WIDTH: 179px"
>
</
SELECT
>
<
SCRIPT
LANGUAGE
="JavaScript"
>
//
Code in the BODY of the webpage is used to initialize controls and
//
to handle SAPI events
/*
**** Initializer code ****
*/
InitializeControls();
function
InitializeControls()
{
//
Initialize the Voices and AudioOutput Select boxes
var
VoicesToken
=
VoiceObj.GetVoices();
var
AudioOutputsToken
=
VoiceObj.GetAudioOutputs();
//
Add correct strings to Voice Select box
for
(
var
i
=
0
; i
<
VoicesToken.Count; i
++
)
{
var
oOption
=
document.createElement(
"
OPTION
"
);
idsVoices.options.add(oOption);
oOption.innerText
=
VoicesToken.Item(i).GetDescription();
oOption.value
=
i;
}
//
Add correct strings to Audio Output Select box
for
(
var
i
=
0
; i
<
AudioOutputsToken.Count; i
++
)
{
var
oOption
=
document.createElement(
"
OPTION
"
);
idsAudioOutputs.options.add(oOption);
oOption.innerText
=
AudioOutputsToken.Item(i).GetDescription();
oOption.value
=
i;
}
}
/*
**** Event handling code ****
*/
//
These functions are used to handle the SAPI events
//
Handle StartStream event
function
VoiceObj::StartStream()
{
idbSpeakText.value
=
"
Stop
"
;
}
//
Handle EndStream event
function
VoiceObj::EndStream()
{
idbSpeakText.value
=
"
SpeakText
"
;
idImage.src
=
"
mouthclo.bmp
"
;
}
//
Handle Viseme event
function
VoiceObj::Viseme(StreamNum, StreamPos, Duration, VisemeType, Feature, VisemeId)
{
//
Map the VisemeId to the appropriate .bmp
if
( VisemeId
==
15
||
VisemeId
==
17
||
VisemeId
==
18
||
VisemeId
==
21
)
{
idImage.src
=
"
mouthop1.bmp
"
;
}
else
if
( VisemeId
==
14
||
VisemeId
==
16
||
VisemeId
==
19
||
VisemeId
==
20
)
{
idImage.src
=
"
mouthop2.bmp
"
;
}
else
if
( VisemeId
==
4
||
VisemeId
==
6
||
VisemeId
==
9
||
VisemeId
==
12
)
{
idImage.src
=
"
mouthop3.bmp
"
;
}
else
if
( VisemeId
==
1
||
VisemeId
==
2
||
VisemeId
==
3
||
VisemeId
==
11
)
{
idImage.src
=
"
mouthop4.bmp
"
;
}
else
if
( VisemeId
==
7
||
VisemeId
==
8
)
{
idImage.src
=
"
mouthnar.bmp
"
;
}
else
if
( VisemeId
==
5
||
VisemeId
==
10
||
VisemeId
==
13
)
{
idImage.src
=
"
mouthmed.bmp
"
;
}
else
{
idImage.src
=
"
mouthclo.bmp
"
;
}
}
</
SCRIPT
>
<
STRONG
>
<
HR
></
STRONG
>
<
P
></
P
>
</
BODY
>
</
HTML
>
分享到:
相关推荐
《语音合成(TTS)WebSocket协议WebAPI开发详解》 语音合成技术,即Text-to-Speech(TTS),是将文字信息转化为语音输出的技术。在本文档中,我们将深入探讨如何利用WebSocket协议来实现跨平台、跨开发语言的TTS...
综上所述,这个PHP在线文字转语音合成源码是一个结合了后端开发、API调用、文件操作和前端交互的综合项目,它展示了PHP作为Web开发语言的强大功能,以及与第三方服务集成的能力。通过学习和理解这个源码,开发者可以...
基于科大讯飞的webAPI语音合成,使用java开发,大家别看花眼。 最近想用第三方api做点东西玩,一直在网上找不到,讯飞的web版的demo,就自己写了一个供大家参考,比较简陋,直接运行就好了
本项目结合了Spring Boot、React和HTML5,旨在提供一种实时的语音交互体验,包括录音、语音转文字以及语音合成。以下是对这些技术的详细解释及其在项目中的应用: 1. **Spring Boot**: Spring Boot是基于Spring框架...
**ASP.NET + SQL Server ...综上所述,"asp.net+sqlserver语音合成系统"是一个结合了前后端开发、数据库管理、语音合成技术的综合项目,涵盖了Web开发的多个方面,对开发者来说,这是一个提升技能和实践经验的好机会。
在实际应用中,文本转语音工具不仅限于单机使用,还可以集成到Web服务或移动应用中,提供在线转换服务。随着AI技术的发展,现在的文本转语音系统已经能够更好地理解和模仿人类的语音特征,甚至能模拟特定人物的嗓音...
在JavaWeb环境中实现语音识别是一项复杂而有趣的技术挑战,它涉及到多个技术和组件的集成。主要的知识点包括: 1. **语音识别技术**:语音识别是将人类语言转换为机器可理解的文字的过程。在这个项目中,我们使用的...
【标题】"tts_java_demo语音合成.zip" 涉及到的是一个使用Java语言实现的文本转语音(Text-to-Speech,简称TTS)演示程序。TTS技术允许计算机将文字信息转化为可听见的语音输出,这对于无障碍访问、教育、自动化系统...
【标题】"讯飞在线文字转语音.rar"是一款基于科大讯飞技术的文字转语音工具,主要用于将文本数据转换为语音输出。科大讯飞是中国知名的语音识别与合成技术提供商,其技术在业界有着较高的声誉和广泛的应用。该工具...
通过这个项目,开发者可以学习到如何集成第三方API,尤其是云服务API,以及如何使用PHP处理异步请求和响应,同时还可以了解Web语音合成的基本流程和技术。对于想要深入理解和应用微软语音服务的PHP开发者来说,这是...
在IT行业中,文本转语音(Text-to-Speech, TTS)技术是一种广泛应用的功能,它可以将文字数据转换成可听见的语音输出。对于开发者而言,PHP作为服务器端编程语言,能够很好地实现这种功能,特别是在构建Web应用程序...
Java语音技术是Java平台上的一个重要领域,它涵盖了各种与音频处理、语音识别、语音合成相关的技术和库。在Java中,开发人员可以利用这些工具来创建交互式应用,如电话自动应答系统、语音助手或者游戏中的语音对话。...
1. **文字转语音技术**:TTS技术是通过计算机程序将文本数据转化为可听见的语音输出。这通常依赖于特定的API或库,例如Web Speech API中的`SpeechSynthesis`接口,或者第三方服务如Google Text-to-Speech或Amazon ...
1. **SpeechSynthesis对象**:这是JavaScript中用于语音合成的主要接口。它允许我们将文本转换为合成的语音。首先,我们需要获取这个对象: ```javascript var synth = window.speechSynthesis; ``` 2. **...
极光推送(JPush)和讯飞语音播报是两个在中国市场上广泛使用的工具,它们分别专注于消息推送服务和语音合成技术。本文将详细介绍如何结合这两个服务,为用户提供一个既能看到又能听到的通知体验。 1. 极光推送...
在ASP.NET(C#)开发中,Web语音验证码是一种提高网站安全性的重要工具,它通过生成音频验证码,帮助用户在无法查看图形验证码或者有视觉障碍的情况下验证身份。本示例将深入探讨如何实现这样的功能。 首先,我们需要...
该项目是一个使用Flask和Vue.js框架构建的语音合成功能的单页面应用程序(SPA)。Flask是Python的一个轻量级Web服务器网关接口(WSGI)应用框架,而Vue.js则是一个前端JavaScript库,用于构建用户界面。让我们深入...
1. **TTS引擎接口**:C#中可以使用Windows自带的SAPI(Speech API)或者第三方库如Microsoft Azure的Text-to-Speech服务,创建一个TTS引擎接口,负责调用相应的API进行语音合成。 2. **文本处理模块**:处理输入的...
ASP语音验证码源程序是一种基于Active Server Pages (ASP)技术实现的网页验证机制,它通过生成随机的语音验证码,提供了一种防止自动机器人或恶意爬虫进行非法操作的安全措施。在Web开发中,验证码通常用于确保用户...
在本项目"Python--简单的语音天气播报程序.zip"中,主要涉及了三个核心知识点:Python编程、百度AI的语音合成技术以及聚合数据的天气API。接下来,我们将详细探讨这三个方面。 首先,Python是一种广泛应用于数据...