Android自带的TTS功能
来源:互联网 发布:软件需求调研表 编辑:程序博客网 时间:2024/04/29 03:06
在Android1.6之后添加了TextToSpeech,也叫TTS,把相应的文字转化成语音播报,增强了用户体验。可以根据语言播报
界面上的控件如下:
可以选择的语言
但有的语言不支持,比如中文就不支持
代码也比较简单,能简单介绍TTS的用法
MainActivity.java
package com.example.tts;import java.util.ArrayList;import java.util.List;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.AdapterView;import android.widget.ArrayAdapter;import android.widget.Button;import android.widget.EditText;import android.widget.Spinner;import android.widget.Toast;/** * 根据选择的语言播报TTS * * @author Administrator * */public class MainActivity extends Activity {private TextToSpeech mSpeech = null;private Spinner langSpinner = null;private EditText edit = null;private Button btn = null;private String[] langs;private String curLang;private List<String> langList = new ArrayList<String>();private ArrayAdapter<String> langAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);langs = getResources().getStringArray(R.array.languages); // 得到语言数组langSpinner = (Spinner) findViewById(R.id.spinner);edit = (EditText) findViewById(R.id.edit);btn = (Button) findViewById(R.id.btn);btn.setOnClickListener(new BtnListener());for (int i = 0; i < langs.length; i++) {langList.add(langs[i]);}// 设置下拉框的适配器和样式langAdapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_spinner_item, langList);langAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);langSpinner.setAdapter(langAdapter);// 下拉框监听器langSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView<?> adapter,View view, int position, long id) {// TODO Auto-generated method stubcurLang = (String) langSpinner.getAdapter().getItem((int) id);if(mSpeech != null){mSpeech.stop();mSpeech.shutdown();mSpeech = null;}// 创建TTS对象mSpeech = new TextToSpeech(MainActivity.this, new TTSListener());Toast.makeText(MainActivity.this, "select = " + curLang, Toast.LENGTH_SHORT).show();}@Overridepublic void onNothingSelected(AdapterView<?> arg0) {// TODO Auto-generated method stub}});}private int SetLanguage(String lang) {int result = 0;if (lang.equals("CANADA")) {result = mSpeech.setLanguage(Locale.CANADA);} else if (lang.equals("CANADA_FRENCH")) {result = mSpeech.setLanguage(Locale.CANADA_FRENCH);} else if (lang.equals("CHINA")) {result = mSpeech.setLanguage(Locale.CHINA);} else if (lang.equals("CHINESE")) {result = mSpeech.setLanguage(Locale.CHINESE);} else if (lang.equals("ENGLISH")) {result = mSpeech.setLanguage(Locale.ENGLISH);} else if (lang.equals("FRANCE")) {result = mSpeech.setLanguage(Locale.FRANCE);} else if (lang.equals("FRENCH")) {result = mSpeech.setLanguage(Locale.FRENCH);} else if (lang.equals("GERMAN")) {result = mSpeech.setLanguage(Locale.GERMAN);} else if (lang.equals("GERMANY")) {result = mSpeech.setLanguage(Locale.GERMANY);} else if (lang.equals("ITALIAN")) {result = mSpeech.setLanguage(Locale.ITALIAN);} else if (lang.equals("ITALY")) {result = mSpeech.setLanguage(Locale.ITALY);} else if (lang.equals("JAPAN")) {result = mSpeech.setLanguage(Locale.JAPAN);} else if (lang.equals("JAPANESE")) {result = mSpeech.setLanguage(Locale.JAPANESE);} else if (lang.equals("KOREA")) {result = mSpeech.setLanguage(Locale.KOREA);} else if (lang.equals("KOREAN")) {result = mSpeech.setLanguage(Locale.KOREAN);} else if (lang.equals("PRC")) {result = mSpeech.setLanguage(Locale.PRC);} else if (lang.equals("ROOT")) {result = mSpeech.setLanguage(Locale.ROOT);} else if (lang.equals("SIMPLIFIED_CHINESE")) {result = mSpeech.setLanguage(Locale.SIMPLIFIED_CHINESE);} else if (lang.equals("TAIWAN")) {result = mSpeech.setLanguage(Locale.TAIWAN);} else if (lang.equals("TRADITIONAL_CHINESE")) {result = mSpeech.setLanguage(Locale.TRADITIONAL_CHINESE);} else if (lang.equals("UK")) {result = mSpeech.setLanguage(Locale.UK);} else if (lang.equals("US")) {result = mSpeech.setLanguage(Locale.US);}return result;}private class TTSListener implements OnInitListener {@Overridepublic void onInit(int status) {// TODO Auto-generated method stubif (status == TextToSpeech.SUCCESS) {//int result = mSpeech.setLanguage(Locale.ENGLISH);int result = SetLanguage(curLang); //如果打印为-2,说明不支持这种语言Toast.makeText(MainActivity.this, "-------------result = " + result, Toast.LENGTH_LONG).show();if (result == TextToSpeech.LANG_MISSING_DATA|| result == TextToSpeech.LANG_NOT_SUPPORTED) {System.out.println("-------------not use");} else {mSpeech.speak("i love you", TextToSpeech.QUEUE_FLUSH, null);}}}}private class BtnListener implements OnClickListener {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubmSpeech.speak(edit.getText().toString(), TextToSpeech.QUEUE_FLUSH,null);}}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubif (mSpeech != null) {mSpeech.stop();mSpeech.shutdown();mSpeech = null;}super.onDestroy();}}
布局文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <TextView android:id="@+id/text" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/hello_world" /> <TextView android:id="@+id/label" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/text" android:text="@string/select_language" /> <Spinner android:id="@+id/spinner" android:layout_width="150dip" android:layout_height="wrap_content" android:layout_below="@id/label" android:drawSelectorOnTop="false" /> <TextView android:id="@+id/label2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/spinner" android:text="@string/text" /> <EditText android:id="@+id/edit" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/label2" android:text="@string/example" android:inputType="text" /> <Button android:id="@+id/btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/edit" android:text="@string/btn" /></RelativeLayout>
代码下载:
点击打开链接
- Android自带的TTS功能
- 使用Android自带的TTS实现语音播报(电话号码)功能
- Android 自带TTS 使用
- android原生自带的分享功能
- Android自带的分享功能案例
- Android 自带的 分享 功能
- Android自带的分享功能
- android系统自带的分享功能
- Android 自带的系统分享功能
- Android自带的裁剪图片功能操作方式
- 使用android自带的屏幕录制功能
- Android 调用系统自带的电话和设置功能
- Android分享---调用系统自带的分享功能
- 利用Android自带的API实现分享功能
- 调用android系统自带功能
- 调用android系统自带功能
- 调用android系统自带功能
- android 调用系统自带功能
- open()
- http://www.cnblogs.com/kunpengit/archive/2012/03/14/2395792.html
- 利用winform发送邮件
- 【C语言】c语言中的递归调用
- 根据固定时间格式获取时间
- Android自带的TTS功能
- CCLayer initWithColor的问题
- blog
- C语言经典算法总结
- write()
- InputStreamReader 、 BufferedReader
- 2800c cisco 寄存器值为0x2102时保存配置才生效
- 程序员面试100题:求子数组的最大和
- processing学习实例(1)点击区域实现颜色改变