`

Android TTS 初体验

TTS 
阅读更多

http://bbs.apkok.com/thread-1893-1-1.html

 

一、基础知识

 TextToSpeech 简称TTS,称为语音合成,是Android 从1.6版本开始支持的新功能,能将所指定的文本转成不同语言音频输出。

在具体介绍前我们先来看下Adnroid系统带的TTS设置界面,点击Settings->Speech synthesis,如下图所示:

                            TTS1.jpg


                                   图 1 Android TTS设置界面

 当点击“Listen to an example”时,会发出“ This is an example of speech synthesis in English. ”,如果没有安装 TTS Data的话可以点击第二项安装,在 Default settings 可以设置 Speech rate 和 Language ,如下图 2 所示可以知道 TTS 支持的语言。
                            TTS2.jpg


                                   图2 TTS 语言选择

 如果勾选“Always use my settings ”时要注意,设置了这个选项后那么我们就不能在程序中对 speech rate 和 Languages 进行设置了,这里的设置回覆盖我们程序中的设置。

 TTS功能需要有TTS Engine的支持,下面我们就来了解下android提供的TTS Engine。

  Android使用了叫Pico的支持多种语言的语音合成引擎,Pico在后台负责把分析输入的文本,把分本分成他能识别的各个片段,再把合成的各个语音片段以听起来比较自然的方式连接在一起,这个过程Android系统帮我们做,我们只把他当做一个神奇的过程就可以了。

TTS engine依托于当前 Android Platform 所支持的几种主要的语言: English 、 French 、 German 、 Italian 和 Spanish 五大语言 (暂时也是没有对中文提供支持)。 TTS可以将文本随意的转换成以上任意五种语言的语音输出。与此同时,对于个别的语言版本将取决于不同的时区,例如:对于 English ,在 TTS 中可以分别输出美式和英式两种不同的版本 。



二. 实例分析

下面我们先做一个具体的实例来亲自体会一下Android的TTS的效果。

我们做一个简单的输入英文句子然后朗读出来的例子,了解Android的TTS使用方法。

在具体做之前给个AndroidTTS的API的链接,
                        
http://androidappdocs.appspot.com/reference/android/speech/tts/package-summary.html

可以先看下大概了解TTS提供的功能。
                              TTS3.jpg


                                                   图3 Android TTS API

可以看到TTS提供了两个接口和两个类。

我们希望做的效果如下:
                              TTS4.jpg


                                         图4 实现效果图

上面一个输入框,点击Speak按钮则朗读上面的文字内容。

创建一个Android工程,工程名为AndroidTTSDemoFirst,其中SDK必须选择1.6版本及以上。

其中Main.xml文件很简单,如下所示:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.        android:orientation="vertical"  
  4.        android:layout_width="fill_parent"  
  5.        android:layout_height="fill_parent"
  6.        >  
  7.        <EditText android:id="@+id/inputText"   
  8.                 android:hint="Input the text here!"   
  9.                 android:layout_width="fill_parent"   
  10.                 android:layout_height="wrap_content">  
  11.                 </EditText>  
  12.        <Button android:text="Speak"   
  13.                 android:id="@+id/speakBtn"   
  14.                 android:layout_width="wrap_content"   
  15.                 android:layout_height="wrap_content"  
  16.                 android:layout_gravity="center_horizontal"  
  17.                 android:enabled="false"  
  18.                 ></Button>  
  19. </LinearLayout>  
复制代码

Java文件的编写:

要使用TTS得实现OnInitListener接口

  1. public class AndroidTTSDemoFirst extends Activity implements OnInitListener {   
  2.     /** Called when the activity is first created. */  
  3.     @Override  
  4.     public void onCreate(Bundle savedInstanceState) {   
  5.         super.onCreate(savedInstanceState);   
  6.         setContentView(R.layout.main);   
  7.     }   
  8.   //实现TTS初始化接口   
  9.     @Override  
  10.     public void onInit(int status) {   
  11.         // TODO Auto-generated method stub   
  12.            
  13.     }   
  14. }  
复制代码

接着定义好下面要用到的几个变量:

  1. private EditText inputText = null;   
  2. private Button speakBtn = null;   
  3.    private static final int REQ_TTS_STATUS_CHECK = 0;   
  4.    private static final String TAG = "TTS Demo";   
  5. private TextToSpeech mTts;
复制代码

 虽然安装Android1.6版本及之后的Android机器都默认安装了TTS引擎,但某些设备可能会因为存储容量的限制而缺少安装和语言对应的资源文件,因此在使用TTS前,得先要检查是否安装了TTS语言数据,在onCreate函数中添加以下内容:

  1. //检查TTS数据是否已经安装并且可用   
  2.   Intent checkIntent = new Intent();   
  3.   checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);   
  4.   startActivityForResult(checkIntent, REQ_TTS_STATUS_CHECK);  
复制代码

这里启动一个新的Intent去检查TTS数据是否已经安装,我们根据其返回的结果进行处理,如下所示:

  1. protected  void onActivityResult(int requestCode, int resultCode, Intent data) {   
  2.         if(requestCode == REQ_TTS_STATUS_CHECK)   
  3.         {   
  4.             switch (resultCode) {   
  5.             case TextToSpeech.Engine.CHECK_VOICE_DATA_PASS:   
  6.                 //这个返回结果表明TTS Engine可以用   
  7.             {   
  8.                 mTts = new TextToSpeech(this, this);   
  9.                 Log.v(TAG, "TTS Engine is installed!");   
  10.                   
  11.             }   
  12.                   
  13.                 break;   
  14.             case TextToSpeech.Engine.CHECK_VOICE_DATA_BAD_DATA:   
  15.                 //需要的语音数据已损坏   
  16.             case TextToSpeech.Engine.CHECK_VOICE_DATA_MISSING_DATA:   
  17.                 //缺少需要语言的语音数据   
  18.             case TextToSpeech.Engine.CHECK_VOICE_DATA_MISSING_VOLUME:   
  19.                 //缺少需要语言的发音数据   
  20.             {   
  21.                 //这三种情况都表明数据有错,重新下载安装需要的数据   
  22.                 Log.v(TAG, "Need language stuff:"+resultCode);   
  23.                 Intent dataIntent = new Intent();   
  24.                 dataIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);   
  25.                 startActivity(dataIntent);   
  26.                   
  27.             }   
  28.                 break;   
  29.             case TextToSpeech.Engine.CHECK_VOICE_DATA_FAIL:   
  30.                 //检查失败   
  31.             default:   
  32.                 Log.v(TAG, "Got a failure. TTS apparently not available");   
  33.                 break;   
  34.             }   
  35.         }   
  36.         else  
  37.         {   
  38.             //其他Intent返回的结果   
  39.         }   
  40.         }  
复制代码

如果返回CHECK_VOICE_DATA_PASS表示检查成功,可以新建一个 TextToSpeech ,否则就去下载 TTS数据。
当TTS数据检测成功创建一个TextToSpeech后,就会调用接口OnInitListener中定义的回调函数

  1. //实现TTS初始化接口   
  2. @Override  
  3. public void onInit(int status) {   
  4.     // TODO Auto-generated method stub   
  5.     //TTS Engine初始化完成   
  6.     if(status == TextToSpeech.SUCCESS)   
  7.     {   
  8.         int result = mTts.setLanguage(Locale.US);   
  9.         //设置发音语言   
  10.         if(result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED)   
  11.         //判断语言是否可用   
  12.         {   
  13.             Log.v(TAG, "Language is not available");   
  14.             speakBtn.setEnabled(false);   
  15.         }   
  16.         else  
  17.         {   
  18. mTts.speak("This is an example of speech synthesis.", TextToSpeech.QUEUE_ADD, null);   
  19.             speakBtn.setEnabled(true);   
  20.         }   
  21.     }        
  22. }  
复制代码

在这个回调函数里,我们设置语言,然后就可以进行使用 TTS引擎进行操作了。
创建一个TextToSpeech是需要占用资源的,因此我们要适时的释放这个资源:

  1. @Override  
  2. protected void onPause() {   
  3.     // TODO Auto-generated method stub   
  4.     super.onPause();   
  5.     if(mTts != null)   
  6.         //activity暂停时也停止TTS   
  7.     {   
  8.         mTts.stop();   
  9.     }   
  10. }   
  11.   
  12. @Override  
  13. protected void onDestroy() {   
  14.     // TODO Auto-generated method stub   
  15.     super.onDestroy();   
  16.     //释放TTS的资源   
  17.     mTts.shutdown();   
  18.     }  
复制代码

最后,在onCreate函数中设置 EditText和Button的使用:

  1. inputText = (EditText)findViewById(R.id.inputText);   
  2.      speakBtn = (Button)findViewById(R.id.speakBtn);           
  3.   inputText.setText("This is an example of speech synthesis.");   
  4.      speakBtn.setOnClickListener(new OnClickListener() {   
  5.   
  6. public void onClick(View v) {   
  7.     // TODO Auto-generated method stub   
  8.     mTts.speak(inputText.getText().toString(), TextToSpeech.QUEUE_ADD, null);   
  9.     //朗读输入框里的内容   
  10. }   
  11. });  
复制代码

 至此,我们的 Demo就完成了,当启动程序后,首先会朗读“ This is an example of speech synthesis in English. ”,然后你在EditText中输入内容,点击Speak按钮就能把内容给朗读出来。

 文章对应的完整代码例子可以在这里下载:
http://download.csdn.net/source/2610740

 

 

http://blog.csdn.net/ichliebephone/article/details/6373184

 

一. 基础知识

Android 从1.6 版本开始支持Text To Speech ,使用的是Pico 语音合成引擎,但是只支持 English 、 French 、 German 、 Italian 和 Spanish 五大语言,暂时没有对中文提供支持。因此使用 Android 默认的 TTS Engine 是没法朗读中文的。

不过有开源项目 eyes-free ( http://code.google.com/p/eyes-free/ , Android 上的 TTS 功能应该也是基于这个开源项目提供的)除了提供 Pico 外,还把支持其他更多语言语音合成的另一个 TTS 引擎 eSpeak 也移植到了 Android 平台,其中就支持中文的语音合成。

因此在安装了 eyes-free 提供的 TTS Service Extended 的 apk 后,就可以在程序中使用 eyes-free 提供的 TTS library ,并把 TTS Engine 设置为不是默认的 Pico ,而是 eSpeak ,就可以实现朗读中文了。不过经过测试,实际的效果还是很差的,只能说勉强可以朗读而已。

二. 实例分析

下面我们就通过一个具体的例子来说明朗读中文的实现过程。

 

希望实现的效果和之前的类似:

 

图 1 实现效果图

 

上面一个输入框,点击 “我说” 按钮则朗读上面的文字内容。

首先我们要到 eyes-free 那下载需要的 TTS library 的 jar 包 (http://code.google.com/p/eyes-free/downloads/detail?name=TTS_library_stub_3.0_market.jar&can=2&q=) 。

 

创建一个 Android 工程,工程名为 NiHaoTTS ,并且把下载的 jar 包放在 assets 文件夹下。右键点击工程,选择 properties , Java Build Path , Libraries , Add JARs, 往工程中添加进 assets 下的 jar 包 , 如下图所示:

图2 添加 TTS library jar 包

 

其中 main.xml 文件很简单,如下所示:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  

 

 

Java 文件的编写:

Java 文件和之前的类似,只是因为使用了 eyes-free 的 TTS API ,而不是 Android 自带的 TTS API ,因此有些许改变。相关的 API 参考: http://eyes-free.googlecode.com/svn/trunk/documentation/tts/com/google/tts/package-summary.html ,其中我们可以看到基本和 Android 的 API ()类似,其中一个明显的区别是创建 TTS 对象这里使用的是 TextToSpeechBeta ,而之前我们使用的是 TextToSpeech


 

Java 完整的代码为:

  1. public class NiHaoTTS extends Activity implements OnInitListener{  
  2.     /** Called when the activity is first created. */  
  3.     private Button mBtn;  
  4.     private EditText mText;  
  5.     //使用com.google.tts包中的TextToSpeechBeta   
  6.     private TextToSpeechBeta mTTS;  

 

 

基本和我们之前学过的类似,其中不同的地方有:


1 TTS 的初始化回调函数多了一个版本号参数 version,

public void onInit( int status, int version) ,

如果返回的版本号 version 等于 -1 ,则表明还没有安装 eyes-free 提供的 TTS Service Extended ,提示进行下载和安装。

// 提示安装所需的 TTS 数据

alertInstallEyesFreeTTSData();


 

主要就是弹出对话框进行提示,然后链接到 eyes-free 的网站进行下载对应的 apk

 

// 弹出对话框提示安装所需的 TTS 数据

private void alertInstallEyesFreeTTSData()

{

Builder alertInstall = new AlertDialog.Builder( this )

.setTitle( " 缺少需要的语音包 " )

.setMessage( " 下载安装缺少的语音包 " )

.setPositiveButton( " 确定 " , new DialogInterface.OnClickListener() {

 

@Override

public void onClick(DialogInterface dialog, int which) {

// TODO Auto-generated method stub

// 下载 eyes-free 的语音数据包

String ttsDataUrl = "http://eyes-free.googlecode.com/files/tts_3.1_market.apk" ;

Uri ttsDataUri = Uri.parse (ttsDataUrl);

Intent ttsIntent = new Intent(Intent. ACTION_VIEW , ttsDataUri);

startActivity(ttsIntent);

}

})

.setNegativeButton( " 取消 " , new DialogInterface.OnClickListener() {

 

@Override

public void onClick(DialogInterface dialog, int which) {

// TODO Auto-generated method stub

finish();

}

});

alertInstall.create().show();

 

}


下载完进行安装,然后重新启动程序就可以运行。

2 )如果已经安装了,则可以进设置 TTS 引擎和需要合成的语言。

// 设置 TTS 引擎, com.google.tts eSpeak 支持的语言包含中文,使用 Android 系统默认的 pico 可以设置为 com.svox.pico

mTTS .setEngineByPackageNameExtended( "com.google.tts" );

int result = mTTS .setLanguage(Locale. CHINA );

// 设置发音语言


其中如果设置为 com.google.tts 则表示使用 eSpeak 引擎,其包括对中文语音合成的支持。如果设置为 com.svox.pico 则表示使用 Pico 引擎,实际效果就是使用 Android 自带的 Pico 的效果,不过只支持 5 中语言,不支持中文。


除了这两块,其他和我们之前的程序基本一样。

然后就可以运行程序。因为模拟器开始时没有安装需要的 eyes-free TTS Service Extended apk ,因此会弹出提示对话框,点击确定开始下载,下载完进行安装,如下图所示。

图3 安装eyes-free的TTS

 

安装完会在应用程序中看到对应的图标,并且在 TTS 的设置中也会增加 eSpeak TTS 一项,如下图所示:

图4 安装了eyes-free的TTS

 

安装完后就可以再次打开 NiHaoTTS 程序,这时会有个选择询问使用哪个 TTS ,选择第二项,然后就可以在输入框中输入中文来朗读了。

图5 选择TTS

 

不过经过简单测试就知道了,中文朗读的效果基本没法实际使用的。

 

文章对应的完整代码例子可以在这里下载:

http://download.csdn.net/source/3237373

 

http://download.csdn.net/download/leiwuluan/3894785

 

分享到:
评论

相关推荐

    Android-tts.rar_android_android TTS_tts_tts Android_语音 tts

    Android TTS(Text-to-Speech)系统是Android操作系统中的一个重要组成部分,它允许应用程序将文本转换为可听见的语音输出,从而实现文字的语音合成。在Android应用开发中,TTS功能广泛应用于各种场景,如阅读电子书...

    android TTS语音引擎包

    在Android平台上,Text-to-Speech (TTS) 是一种技术,它允许系统将文本转换为自然语言的语音输出。这个“android TTS语音引擎包”集合了多种知名的TTS引擎,包括度秘3.0、谷歌语音合成、科大讯飞3.0和5.0版本,这些...

    AndroidTTS文本转语音

    Android TTS(Text-to-Speech)是Android操作系统中的一项服务,允许应用程序将文本转换成语音输出,用户无需手动输入即可听取设备读出的文字内容。这个技术对于视力障碍者、学习新语言的人或者在驾驶等不便看屏幕的...

    Google Android TTS Apk

    google android tts apk安装后,系统-设置-语言和输入法选择该TTS服务,可实现中文文字转语音

    Android TTS 支持中文

    Android TTS(Text-to-Speech)是Android系统提供的一个核心功能,它允许应用程序将文本转换为语音输出。这个功能在很多场景下非常有用,比如帮助视力障碍用户阅读屏幕上的文字,或者在驾驶时提供导航指引。本文将...

    android tts支持库

    android在1.6就支持了tts,但是由于很多手机都选择将这个支持库给阉掉了,导致手机不支持tts,其实只要装一个这个tts库就可以,普通的apk,普通的安装,对,支持tts就是这么简单。

    Android_tts项目源码 demo

    Android TTS(Text-to-Speech)是Android系统中用于将文本转换为...通过学习和理解这些知识点,开发者可以构建自己的Android应用,使应用具备朗读文本的能力,从而提升用户体验,特别是在阅读、教育或无障碍功能方面。

    Android TTS实现简单阅读器

    Android TTS实现简单阅读器是开发者利用此技术构建的一个应用示例,旨在帮助用户理解如何在Android应用程序中集成TTS,以便为用户提供读出屏幕上的文字信息的能力。以下将详细介绍Android TTS的工作原理、实现步骤...

    Google TTS中文语言包,Android原生TTS服务

    某些场景下,部分安卓设备并没有自带安装Google TTS服务,若是从商店下载应用后,需要翻墙下载语言包,为了跨过这个翻墙的闹心事,通过两天的收集,现将已收集到的中文语言包分享给大家,其中也有其他语种的,可自行...

    android studio tts 离线中文语音播放

    在Android开发中,Text-to-Speech (TTS) 技术是将文本转换为语音输出的重要功能,尤其适用于辅助视力障碍者或者在驾驶等不便查看屏幕的场景。本主题聚焦于如何在Android Studio中实现离线中文语音播放,支持男声和...

    com.google.tts.apk android 语音包

    android tts 语音包 apk

    android TTS jar

    在Android应用中集成这样的库,开发者可以确保他们的应用在各种设备上都能提供一致的TTS体验,即使用户的设备没有内置支持中文的TTS引擎。 "标签"中的“TTS_library_”暗示了这个jar文件可能是一个完整的TTS库,...

    android中文语音tts

    总的来说,Android中文语音TTS技术为开发者提供了强大的工具,使应用程序能够以自然、流畅的方式读出文本,极大地增强了用户体验。结合三星的中文语音引擎,开发者可以创建出高效、人性化的语音阅读应用,尤其适用于...

    tts.rar_TTS java_android TTS_google GetSampleText_tts android_中

    标题中的“tts.rar_TTS java_android TTS_google GetSampleText_tts android_中”表明这是一个关于Android平台上的文本转语音(Text-to-Speech,简称TTS)技术的压缩包,涉及Java编程语言,可能包含了Google的TTS...

    TTS.zip_android_surface5nn_离线TTS_科大讯飞 Android TTS

    《科大讯飞Android离线TTS技术详解》 在移动设备上,Text-to-Speech(TTS)技术被广泛应用于各种应用场景,如导航、阅读、教育等,它能够将文字信息转化为语音输出,极大地提升了用户体验。科大讯飞作为国内领先的...

    Android端TTS语音引擎

    通过TTS可实现离线文字转语音,四款语音引擎总有一种适合你的,赶快下载吧!已经在项目中真正也用到了,很好用,毕竟系统TTS不一定支持中文,而这四款均支持中文

    Android-一个基于Java的粤语发音TTS文字转语音.

    在Android平台上,文本转语音(Text-to-Speech, 简称TTS)技术是一种将文字转换成可听见的语音输出的功能。对于粤语发音的TTS系统,它允许开发者为应用程序添加粤语语言的支持,使得用户能够听到用粤语读出的文字...

    Android TTS 文字转语音实例

    在实际开发中,为了提高用户体验,可以考虑添加引擎选择功能,并根据用户的选择动态配置TTS引擎。 最后,由于TTS服务需要网络权限,因此在AndroidManifest.xml中添加了`&lt;uses-permission android:name="android....

    android tts示例

    Android TTS(Text-to-Speech)是Android系统提供的一个服务,允许应用程序将文本转换为语音输出,从而实现让设备“朗读”文本的功能。在Android应用开发中,TTS技术常用于帮助视障用户或者在驾驶、烹饪等不便查看...

    基于android的TTs

    在Android平台上,Text-to-Speech(TTS)技术是一种将文本转换为语音输出的功能,它使得应用程序能够“读出”屏幕上的文字,这对于视力障碍的用户或者在不方便阅读时非常有用。本项目“基于Android的TTs”显然是一个...

Global site tag (gtag.js) - Google Analytics