基于TextToSpeech(tts)引擎的朗读demo,很好玩的一个功能

<span style="font-size:18px;">package com.xu.texttospeak;

import java.io.File;
import java.util.Date;
import java.util.Locale;

import com.xu.xutexttospeak.R;

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

/**
 * 
 * @author DaJian35 
 * 用于朗读输入的内容O(∩_∩)O~很好玩的东西 目前tts不支持中文朗读。
 * (如果不能朗读语音,可以看看手机设置-->语言和输入法-->文字转语音(TTS)输出-->将语言设置成英文(美国))
 * 
 */
public class XuTextToSpeech extends Activity implements OnClickListener,
		OnInitListener {
	private Button speak; // 朗读按钮
	private Button record; // 记录按钮
	private EditText speakInfo; // 用于获取需要朗读的内容
	private TextToSpeech tts; // texttospeech引擎
	private String editInfo; // 获取edittext的内容
	private Toast toast;
	private String pathRoot; // 声音记录的路径
	private Date date; // 用于记录声音的文件名

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initView(); // 初始化
	}

	// 初始化
	private void initView() {
		speak = (Button) findViewById(R.id.speak);
		record = (Button) findViewById(R.id.record);
		speakInfo = (EditText) findViewById(R.id.speakInfo);
		// 两个button的监听
		speak.setOnClickListener(XuTextToSpeech.this);
		record.setOnClickListener(XuTextToSpeech.this);
		date = new Date();
		// 创建texttospeech对象
		tts = new TextToSpeech(XuTextToSpeech.this, XuTextToSpeech.this);
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		// 朗读按钮的监听事件
		case R.id.speak:
			/*
			 * 第二个参数中, TextToSpeech.QUEUE_FLUSH表示:
			 * 当tts对象调用speak方法时,它会中断当前实例正在运行的任务。(可以理解为清除当前语音任务,转而执行新的语音任务)
			 * TextToSpeech.QUEUE_ADD表示:当tts对象调用speak方法时,会把新的发音任务添加到当前发音任务列队之后
			 */
			if (getEditText().trim().length() == 0) {
				CenterToast("请填写需要记录的内容,且内容不能为空~~"); // 调用自定义的toast方法
			} else {
				tts.speak(getEditText(), TextToSpeech.QUEUE_FLUSH, null);
				CenterToast("speak"); // 调用自定义的toast方法
			}
			break;
		// 记录声音按钮的监听
		case R.id.record:
			if (isHaveIdCard()) {
				if (getEditText().trim().length() == 0) {
					CenterToast("请填写需要记录的内容,且内容不能为空~~"); // 调用自定义的toast方法
				} else {
					pathRoot = Environment.getExternalStorageDirectory()
							.getAbsolutePath() + "/XuTextToSpeech";
					File pathFile = new File(pathRoot);
					if (!pathFile.exists()) {
						pathFile.mkdirs();
					}
					tts.synthesizeToFile(getEditText(), null,
							pathRoot + "/" + date.getDay() + date.getHours()
									+ date.getMinutes() + date.getSeconds()
									+ ".wav");
					CenterToast("声音记录成功!!");
				}
			} else {
				CenterToast("SD卡不存在,不能记录语音内容~");
			}
			break;

		default:
			break;
		}
	}

	// 实现OnInitListener接口方法
	@Override
	public void onInit(int status) {
		// 如果装载tts引擎成功
		if (status == TextToSpeech.SUCCESS) {
			// 设置朗读的语言
			int result = tts.setLanguage(Locale.US);
			if (result != TextToSpeech.LANG_COUNTRY_AVAILABLE
					&& result != TextToSpeech.LANG_AVAILABLE) {
				CenterToast("TTS暂时不支持这种语言的朗读!~~"); // 调用自定义toast提示
			}
		} else {
			CenterToast("装载tts引擎不成功!"); // 调用自定义toast提示
		}
	}

	// 自定义Toast(看起来比较美观)
	public void CenterToast(String content) {
		toast = Toast
				.makeText(XuTextToSpeech.this, content, Toast.LENGTH_SHORT);
		toast.setGravity(Gravity.CENTER, 0, 20);
		toast.show();
	}

	// 获得edittext的内容
	public String getEditText() {
		editInfo = speakInfo.getText().toString();
		return editInfo;
	}

	// 判断SD是否存在
	public boolean isHaveIdCard() {
		if (Environment.getExternalStorageState().equals(
				Environment.MEDIA_MOUNTED)) {
			return true;
		} else {
			return false;
		}
	}

	// tts的销毁
	@Override
	protected void onDestroy() {
		if (tts != null) {
			tts.shutdown();
		}
	}
}</span>

前段时间在《android的疯狂讲义》书上看到了用tts引擎做一个自动朗读的介绍。很好玩的一个东西,我参考里面的内容,自己添加了一些严谨性的判断。看上去 好像很多代码,其实大部分都是为了严谨性而添加的if判断语句,还有里面标记了很多注释,希望能帮助有需要的朋友O(∩_∩)O~

 ps:如果还有什么不懂的,可以提出来,我们一起共同进步~!= =

demo下载地址:http://download.csdn.net/detail/dajian35/8345015



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值