android 典型应用之语音合成

#移动开发 #Android

1. android 语音合成介绍

  1. 语音合成引擎
    语音引擎是真正实现语音合成的程序,必须安装它,应用程序才能使用此功能
  1. pico 引擎
    android 2.0 之后,源码自带语音软件 pico,其位置在 external/svox/pico*

,它只支持英法西班牙等五六种文字,不包含中文支持

  1. espeak 引擎
    如何需要支持中文,需要下载扩展支持 espeak, 下载 tts_3.0_rc05.apk(在此下载:[

http://code.google.com/p/eyes-

free/downloads/detail?name=tts_3.0_rc05.apk&can=2&q

](http://code.google.com/p/eyes-

free/downloads/detail?name=tts_3.0_rc05.apk&can=2&q))

  1. 设置系统语音支持
    设置 -> 语音输入输出 -> 文字转语音设置
    选中使用我的设置, 引擎选择 espeak, 默认引擎选择 espeak, 语言选择中文, 聆听示例

  2. 试用语音工具
    下读短信的工具
    [http://www.tigersw.cn/soft14228.html

](http://www.tigersw.cn/soft14228.html)
安装后尝试其郎读短信的功能

2. android 对 TTS 的支持
应用程序调用接口
frameworks/base/core/java/android/speech/tts/TextToSpeech.java

3. 例程

  1. 功能
    朗读编辑框中的文字

  2. 可从此处下载可独立运行的代码
    [http://download.csdn.net/source/2600900

](http://download.csdn.net/source/2600900)

  1. 核心代码及说明

_ package com.android.mytts; _

_ _

_ import android.app.Activity; _

_ import android.os.Bundle; _

_ import android.speech.tts.TextToSpeech; _

_ import android.util.Log; _

_ import android.view.View; _

_ import android.widget.EditText; _

_ import android.widget.Button; _

_ import java.util.Locale; _

_ _

_ public class MyttsActivity extends Activity implements

TextToSpeech.OnInitListener { _

_ private static final String TAG = "TextToSpeechDemo"; _

_ private TextToSpeech mTts; _

_ private Button mButton; _

_ _

_ @Override _

_ public void onCreate(Bundle savedInstanceState) { _

_ super.onCreate(savedInstanceState); _

_ setContentView(R.layout.main); _

_ mTts = new TextToSpeech(this, this/listener/); // _ _ 初始化语音合成句柄 _

_ mButton = (Button) findViewById(R.id.again_button); _

_ _ _ mButton.setOnClickListener(new View.OnClickListener() { _

_ public void onClick(View v) { // _ _ 按钮按下时读编辑框中内容 _

_ EditText edit = (EditText) findViewById(R.id.EditText01); _

_ sayText(String.valueOf(edit.getText())); _

_ } _

_ }); _

_ } _

_ _

_ @Override _

_ public void onDestroy() { _

_ if (mTts!= null) { _

_ mTts.stop(); _

_ mTts.shutdown(); // _ _ 退出时一定要释放资源 _

_ } _

_ super.onDestroy(); _

_ } _

_ _

_ public void onInit(int status) { _

_ if (status == TextToSpeech.SUCCESS) { _

_ int result = mTts.setLanguage(Locale.CHINA); // _ _ 设置读中文(需安装 espeak)_

_ // int result = mTts.setLanguage(Locale.US); // _ _ 设置读英文 _

_ if (result == TextToSpeech.LANG_MISSING_DATA || _

_ result == TextToSpeech.LANG_NOT_SUPPORTED) { _

_ Log.e(TAG, "Language is not available."); _

_ } else { _

_ mButton.setEnabled(true); // _ _ 系统支持所选语言时将按钮设为可用 _

_ } _

_ } else { _

_ Log.e(TAG, "Could not initialize TextToSpeech."); _

_ } _

_ } _

_ _

_ private void sayText(String str) { _

_ mTts.speak(str, _

_ TextToSpeech.QUEUE_FLUSH, _

_ null); // _ _ 朗读 _

_ } _

_ } _ __