TextToSpeech 文本自动朗读

标签: texttospeech 文本 | 发表时间:2014-05-18 17:11 | 作者:kanglecjr
出处:http://www.iteye.com
Android提供了自动朗读支持。

  • TextToSpeech(Context context, TextToSpeech.OnInitListener listener)
  • setLanguage(Locale loc)。如果调用setLanguage(Locale loc)的返回值是 TextToSpeech.LANG_COUNTRY_AVAILABLE 则说明当前TTS系统可以支持所设置的语言、国家选项。
  • speak(String text, int queueMode, HashMap<String,String> params)
  • synthesizeToFile(String text, HashMap<String,String> params, String filename)
  • TextToSpeech.QUEUE_FLUSH
  • TextToSpeech.QUEUE_ADD


归纳起来,使用TextToSpeech引擎的步骤如下:
(1)创建TextToSpeech对象,创建时传入OnInitListener监听器监听创建是否成功。
(2)设置TextToSpeech所使用语言、国家选项,通过返回值判断TTS是否支持该语言、国家选项。
(3)调用speak或synthesizeToFile方法。
(4)关闭TTS,释放资源。
src\org\crazyit\io\Speech.java
package org.crazyit.io;

import java.util.Locale;

import android.app.Activity;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

/**
 * Description:
 * <br/>site: <a href="http://www.crazyit.org">crazyit.org</a>
 * <br/>Copyright (c), 2001-2014, F.L
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author [email protected]
 * @version 1.0
*/
public class Speech extends Activity
{
	TextToSpeech tts;
	EditText editText;
	Button speech;
	Button record;
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		// 初始化TextToSpeech对象
		tts = new TextToSpeech(this, new OnInitListener()
		{
			@Override
			public void onInit(int status)
			{
				// 如果装载TTS成功
				if ( status == TextToSpeech.SUCCESS)
				{
					// 设置使用英式英语朗读
					int result = tts.setLanguage(Locale.UK);
					// 如果不支持所设置的语言
					if ( result != TextToSpeech.LANG_COUNTRY_AVAILABLE
						&& result != TextToSpeech.LANG_AVAILABLE)
					{
						Toast.makeText(Speech.this
							, "TTS暂时不支持这种语言的朗读。", Toast.LENGTH_LONG)
							.show();
						}
					}
				}
								
		});
		editText = (EditText) findViewById(R.id.txt);
		speech = (Button) findViewById(R.id.speech);
		record = (Button) findViewById(R.id.record);
		speech.setOnClickListener(new OnClickListener()
		{
			@Override
			public void onClick(View arg0)
			{
				// 执行朗读
				tts.speak(editText.getText().toString(),
					TextToSpeech.QUEUE_ADD, null);
			}
		});
		record.setOnClickListener(new OnClickListener()
		{
			@Override
			public void onClick(View arg0)
			{
				// 将朗读文本的音频记录到指定文件
				tts.synthesizeToFile(editText.getText().toString()
					, null, "/mnt/sdcard/sound.wav");
				Toast.makeText(Speech.this, "声音记录成功!"
						, Toast.LENGTH_LONG).show();
				}
			});
	}
										
	@Override
	public void onDestroy()
	{
		// 关闭TextToSpeec对象
		if ( tts != null)
		{
			tts.shutdown();
		}
	}		
}


res\layout\main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	android:gravity="center_horizontal"
	>
<EditText 
	android:id="@+id/txt"
	android:layout_width="fill_parent" 
	android:layout_height="wrap_content" 
	android:lines="5"
	/>
<LinearLayout
	android:orientation="horizontal"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	android:gravity="center_horizontal"
	>	
<Button 
	android:id="@+id/speech"
	android:layout_width="wrap_content" 
	android:layout_height="wrap_content" 
	android:text="@string/speech"
	/>
<Button 
	android:id="@+id/record"
	android:layout_width="wrap_content" 
	android:layout_height="wrap_content" 
	android:text="@string/record"
	/>	
</LinearLayout>	
</LinearLayout>


res\values\strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
	<string name="hello">Hello World, Speek!</string>
	<string name="app_name">自动朗读</string>
	<string name="speech">朗读</string>
	<string name="record">记录声音</string>
</resources>



AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest
	xmlns:android="http://schemas.android.com/apk/res/android"
	package="org.crazyit.io"
	android:versionCode="1"
	android:versionName="1.0">
	<uses-sdk
		android:minSdkVersion="10"
		android:targetSdkVersion="17" />
	<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
	<application
		android:icon="@drawable/ic_launcher"
		android:label="@string/app_name">
		<activity
			android:name=".Speech"
			android:label="@string/app_name">
			<intent-filter>
				<action android:name="android.intent.action.MAIN" />
				<category android:name="android.intent.category.LAUNCHER" />
			</intent-filter>
		</activity>
	</application>
</manifest>


已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [texttospeech 文本] 推荐:

TextToSpeech 文本自动朗读

- - Java - 编程语言 - ITeye博客
Android提供了自动朗读支持. 如果调用setLanguage(Locale loc)的返回值是 TextToSpeech.LANG_COUNTRY_AVAILABLE 则说明当前TTS系统可以支持所设置的语言、国家选项. 归纳起来,使用TextToSpeech引擎的步骤如下:. (1)创建TextToSpeech对象,创建时传入OnInitListener监听器监听创建是否成功.

使用 Antlr 处理文本

- bill - IBM developerWorks 中国 : 文档库
Antlr 是一个基于 Java 开发的功能强大的语言识别工具,其主要功能原本是用于识别编程语言,但是当我们遇到一些常规的文本处理工作时,使用 Antlr 做这些工作可能比单纯的使用正则表达式高效、有趣的多. 本文将和您一起探讨如何使用 Antlr 完成抽取(Extract)、转换(Translate)和重写(Rewrite)这 3 类常见的文本处理工作.

奇怪的一段文本

- 1212e - Solidot
slrey 写道 "最近在网上看一本小说,发现里面有些句子很突兀,似乎是别的文章里的,于是 Google 了一下其中一小段,发现结果很有意思,大家可以试试. 关键词是“厂里的集体宿舍人满为患”,无论是 Google 还是百度,会搜索出很多不同领域的文章,而这些文章中都会包含这段关键字. 个人推测是不是某网站论坛或ISP对某些关键词设置了替换过滤.

简单的文本协议

- - DCCMX
写网络程序躲不过协议,协议其实就是定义了消息的格式,以及消息是如何交换的. 协议可简单可复杂,复杂精密如TCP协议,简单奔放如HTTP的协议. 这里将我所接触到的协议稍微总结一下,最后抛出一个个人设计的简单通用的文本协议. 设计一个协议不是一件很容易的事情,尤其是当对设计的要求包含很好的描述性和可扩展性的时候.

文本数据的价值

- - 技术改变世界 创新驱动中国 - 《程序员》官网
文/Bill Franks. 当你开车路过一家餐厅的停车场时,你的手机屏幕上弹出了这家餐厅的当日特价菜品推荐,这种体验是不是很棒. 如果赌场老板把发牌人忘记付给你的20美元亲自送还给你,你的心里是不是有点儿小激动. 如果在线视频游戏能够把和我们玩法相近的用户即刻告知我们,这世界会不会变得很美妙. 我们发现了一个非常明显的趋势,各行各业虽然生成了许多大数据源,但其底层的支撑技术却是相同的.

监听文本框输入

- - 博客园_Ruby's Louvre
Firefox、Chrome、IE9,IE10 均支持 oninput 事件,此外所有版本的 IE 均支持 onpropertychange 事件. oninput 事件在用户输入、退格(backspace)、删除(delete)、剪切(ctrl + x)、粘贴(ctrl + v)及鼠标剪切与粘贴时触发(在 IE9 中只在输入、粘贴、鼠标粘贴时触发).

LibShortText - 短文本分类

- - 互联网旁观者
Chih-Jen Lin的新作.   青春就应该这样绽放   游戏测试:三国时期谁是你最好的兄弟.

文本特征抽取

- - zzm
文本挖掘是一门交叉性学科,涉及数据挖掘、机器学习、模式识别、人工智能、统计学、计算机语言学、计算机网络技术、信息学等多个领域. 文本挖掘就是从大量 的文档中发现隐含知识和模式的一种方法和工具,它从数据挖掘发展而来,但与传统的数据挖掘又有许多不同. 文本挖掘的对象是海量、异构、分布的文档 (web);文档内容是人类所使用的自然语言,缺乏计算机可理解的语义.

kmeans 实现文本聚类

- - IT瘾-dev
拿到的需求是输入n个文本,对文本进行聚类,由于这些输入不能通过历史数据进行训练,所以这个主要就是用无监督学习来解决. 谈到聚类就会想到kmeans,它的核心思想是给定的K值和K个初始质心将样本中每个点都分到距离最近的类簇中,当所有点分配完后根据每个类簇的所有点重新计算质心,一般是通过平均值计算,然后再将每个点分到距离最近的新类簇中,不断循环此操作,直到质心不再变化或达到一定的迭代次数.

浏览器如何渲染文本

- old9 - jjgod / blog
浏览器是我们最常用的软件之一,文本又是网页中最主要的元素,在浏览器显示文本的过程中有许多有趣的细节,值得展开来讲讲,或许能减少一些误解. 这是一个比较粗略的,概括性的介绍,尽可能不涉及过多的技术细节和具体实现,而立足于给 Web 开发者和设计师提供一些正确的概念. 下面的介绍主要根据我对 WebKit 和 Gecko (Firefox) 的印象来谈,其他的浏览器也大致相同,如有阙漏之处欢迎指出.