`
sisi1984117
  • 浏览: 156197 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

【转】[语音合成技术第一讲]web 页面中使用语音合成技术

阅读更多

原文: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 > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   </ FONT >
< IMG  alt =""  border =2  hspace =0  id =idImage  src ="mouthclo.bmp" > &nbsp;   </ H1 >
< H1  align =center >   
< TEXTAREA  ID =idTextBox  COLS =50  ROWS =10  WRAP =VIRTUAL > Enter text you wish spoken here </ TEXTAREA >
</ H1 >

< align =center >< STRONG >< STRONG >  
Rate
&nbsp; < STRONG >  
< INPUT  id =idbIncRate  name =button1  type =button  onclick =IncRate()  value ="    +    " ></ STRONG > &nbsp;
< INPUT  id =idbDecRate  name =button2  type =button  onclick =DecRate()  value ="    -    "  style ="LEFT: 237px; TOP: 292px" > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </ STRONG > &nbsp;  

Volume
&nbsp; < STRONG >< STRONG >  
< INPUT  id =idbIncVol  name =button3  onclick =IncVol()  style ="LEFT: 67px; TOP: 318px"  type =button  value ="    +    " > &nbsp;
< INPUT  id =idbDecVol  name =button4  onclick =DecVol()  type =button  value ="    -    "  style ="LEFT: 134px; TOP: 377px" >
</ STRONG ></ STRONG ></ STRONG ></ P >
 
< align =center >< STRONG >< BUTTON  id =idbSpeakText  onclick =SpeakText(); 
   
style ="HEIGHT: 24px; LEFT: 363px; TOP: 332px; WIDTH: 178px" > SpeakText </ BUTTON ></ STRONG ></ P >
 
< align =center >< STRONG > Voice &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
   
< STRONG > Audio Output &nbsp; </ STRONG ></ STRONG ></ P >
< align =center >  

< SELECT  id =idsVoices  name =Voices  onchange =ChangeVoice()  style ="FONT-FAMILY: serif; HEIGHT: 21px; WIDTH: 179px" >   </ SELECT >
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  

< 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开发文档1

    《语音合成(TTS)WebSocket协议WebAPI开发详解》 语音合成技术,即Text-to-Speech(TTS),是将文字信息转化为语音输出的技术。在本文档中,我们将深入探讨如何利用WebSocket协议来实现跨平台、跨开发语言的TTS...

    PHP在线文字转语音合成源码

    综上所述,这个PHP在线文字转语音合成源码是一个结合了后端开发、API调用、文件操作和前端交互的综合项目,它展示了PHP作为Web开发语言的强大功能,以及与第三方服务集成的能力。通过学习和理解这个源码,开发者可以...

    科大讯飞,webAPI,语音合成,java

    基于科大讯飞的webAPI语音合成,使用java开发,大家别看花眼。 最近想用第三方api做点东西玩,一直在网上找不到,讯飞的web版的demo,就自己写了一个供大家参考,比较简陋,直接运行就好了

    springboot+react+html5 实现按住录音离开发送、语音合成

    本项目结合了Spring Boot、React和HTML5,旨在提供一种实时的语音交互体验,包括录音、语音转文字以及语音合成。以下是对这些技术的详细解释及其在项目中的应用: 1. **Spring Boot**: Spring Boot是基于Spring框架...

    asp.net+sqlserver语音合成系统

    **ASP.NET + SQL Server ...综上所述,"asp.net+sqlserver语音合成系统"是一个结合了前后端开发、数据库管理、语音合成技术的综合项目,涵盖了Web开发的多个方面,对开发者来说,这是一个提升技能和实践经验的好机会。

    文本转语音工具.zip

    在实际应用中,文本转语音工具不仅限于单机使用,还可以集成到Web服务或移动应用中,提供在线转换服务。随着AI技术的发展,现在的文本转语音系统已经能够更好地理解和模仿人类的语音特征,甚至能模拟特定人物的嗓音...

    javaweb实现语音识别

    在JavaWeb环境中实现语音识别是一项复杂而有趣的技术挑战,它涉及到多个技术和组件的集成。主要的知识点包括: 1. **语音识别技术**:语音识别是将人类语言转换为机器可理解的文字的过程。在这个项目中,我们使用的...

    tts_java_demo语音合成.zip

    【标题】"tts_java_demo语音合成.zip" 涉及到的是一个使用Java语言实现的文本转语音(Text-to-Speech,简称TTS)演示程序。TTS技术允许计算机将文字信息转化为可听见的语音输出,这对于无障碍访问、教育、自动化系统...

    讯飞在线文字转语音.rar

    【标题】"讯飞在线文字转语音.rar"是一款基于科大讯飞技术的文字转语音工具,主要用于将文本数据转换为语音输出。科大讯飞是中国知名的语音识别与合成技术提供商,其技术在业界有着较高的声誉和广泛的应用。该工具...

    微软语音合成网页版源码.zip

    通过这个项目,开发者可以学习到如何集成第三方API,尤其是云服务API,以及如何使用PHP处理异步请求和响应,同时还可以了解Web语音合成的基本流程和技术。对于想要深入理解和应用微软语音服务的PHP开发者来说,这是...

    PHP在线文本文字转语音播放源码 自适应电脑手机端 配音源码

    在IT行业中,文本转语音(Text-to-Speech, TTS)技术是一种广泛应用的功能,它可以将文字数据转换成可听见的语音输出。对于开发者而言,PHP作为服务器端编程语言,能够很好地实现这种功能,特别是在构建Web应用程序...

    java语音技术

    Java语音技术是Java平台上的一个重要领域,它涵盖了各种与音频处理、语音识别、语音合成相关的技术和库。在Java中,开发人员可以利用这些工具来创建交互式应用,如电话自动应答系统、语音助手或者游戏中的语音对话。...

    文字转语音在线生成HTML源码.zip

    1. **文字转语音技术**:TTS技术是通过计算机程序将文本数据转化为可听见的语音输出。这通常依赖于特定的API或库,例如Web Speech API中的`SpeechSynthesis`接口,或者第三方服务如Google Text-to-Speech或Amazon ...

    纯js实现的语音播报无需第三方接口

    1. **SpeechSynthesis对象**:这是JavaScript中用于语音合成的主要接口。它允许我们将文本转换为合成的语音。首先,我们需要获取这个对象: ```javascript var synth = window.speechSynthesis; ``` 2. **...

    极光推送+讯飞语音播报

    极光推送(JPush)和讯飞语音播报是两个在中国市场上广泛使用的工具,它们分别专注于消息推送服务和语音合成技术。本文将详细介绍如何结合这两个服务,为用户提供一个既能看到又能听到的通知体验。 1. 极光推送...

    asp.net(c#)web语音验证码例子

    在ASP.NET(C#)开发中,Web语音验证码是一种提高网站安全性的重要工具,它通过生成音频验证码,帮助用户在无法查看图形验证码或者有视觉障碍的情况下验证身份。本示例将深入探讨如何实现这样的功能。 首先,我们需要...

    基于Flask+Vue的语音合成单网页演示项目。.zip

    该项目是一个使用Flask和Vue.js框架构建的语音合成功能的单页面应用程序(SPA)。Flask是Python的一个轻量级Web服务器网关接口(WSGI)应用框架,而Vue.js则是一个前端JavaScript库,用于构建用户界面。让我们深入...

    SpeechTTS文字转语音朗读

    1. **TTS引擎接口**:C#中可以使用Windows自带的SAPI(Speech API)或者第三方库如Microsoft Azure的Text-to-Speech服务,创建一个TTS引擎接口,负责调用相应的API进行语音合成。 2. **文本处理模块**:处理输入的...

    asp语音验证码 源程序

    ASP语音验证码源程序是一种基于Active Server Pages (ASP)技术实现的网页验证机制,它通过生成随机的语音验证码,提供了一种防止自动机器人或恶意爬虫进行非法操作的安全措施。在Web开发中,验证码通常用于确保用户...

    Python--简单的语音天气播报程序.zip

    在本项目"Python--简单的语音天气播报程序.zip"中,主要涉及了三个核心知识点:Python编程、百度AI的语音合成技术以及聚合数据的天气API。接下来,我们将详细探讨这三个方面。 首先,Python是一种广泛应用于数据...

Global site tag (gtag.js) - Google Analytics