最近在做一个项目, 其中有一个功能是需要将文本转换成语音并播放出来. 下面我将我的做法分享一下.
非常令人开心的是, Android 系统目前已经集成了 TTS, 提供了相关的库供我们进行调用, 不必到处去搜寻第三方库, 直接导入
android.speech.tts.TextToSpeech
即可.
- // 导入 TTS 的包
- import android.speech.tts.TextToSpeech;
- // 定义一个 tts 对象
- private TextToSpeech tts;
其次, 要想实例化这个对象需要两个参数, 一个是 Context 对象, 另一个是 TextToSpeech 类对应的监听器对象: OnLnitListener 对象. 一般 Context 对象传入当前的 Activity,OnLnitListener 可以自己写类继承, 并实现其方法.
- // 导入监听包
- import android.speech.tts.TextToSpeech.OnInitListener;
- // 初始化 tts 监听对象
- tts = new TextToSpeech(this, OnInitListener);
OnLnitListener 接口中只要是 onInit 方法, 其功能是对 tts 对象进行初始化, 设置一下语言, 判断文字是否转换成功以及当前系统是否支持该语言.
- @Override
- public void onInit(int status){
- // 判断是否转化成功
- if (status == TextToSpeech.SUCCESS){
- // 默认设定语言为中文, 原生的 android 貌似不支持中文.
- int result = tts.setLanguage(Locale.CHINESE);
- if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED){
- Toast.makeText(MainActivity.this, R.string.notAvailable, Toast.LENGTH_SHORT).show();
- }else{
- // 不支持中文就将语言设置为英文
- tts.setLanguage(Locale.US);
- }
- }
- }
最后, 只要在合适的时候调用 tts 转文字到语音的方法即可.
tts.speak("需要转化的文字", TextToSpeech.QUEUE_FLUSH, null);
下面是写的一个 demo:
- MainActivity.java:
- /**
- * Author: sandy
- * QQ 技术交流群: 439261058
- * 微信公众号: 代码之间 (codestravel)
- **/
- package com.example.ct_text2speechdemo;
- import java.util.Locale;
- import android.os.Bundle;
- import android.app.Activity;
- import android.speech.tts.TextToSpeech;
- import android.speech.tts.TextToSpeech.OnInitListener;
- import android.view.Menu;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.TextView;
- import android.widget.Toast;
- public class MainActivity extends Activity implements OnInitListener{
- // 定义控件
- private Button speechButton;
- private TextView speechText;
- private TextToSpeech tts;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- // 初始化 TTS
- tts = new TextToSpeech(this, this);
- // 获取控件
- speechText = (TextView)findViewById(R.id.speechTextView);
- speechButton = (Button)findViewById(R.id.speechButton);
- // 为 button 添加监听
- speechButton.setOnClickListener(new OnClickListener(){
- @Override
- public void onClick(View v){
- // TODO Auto-generated method stub
- tts.speak(speechText.getText().toString(), TextToSpeech.QUEUE_FLUSH, null);
- }
- });
- }
- @Override
- public void onInit(int status){
- // 判断是否转化成功
- if (status == TextToSpeech.SUCCESS){
- // 默认设定语言为中文, 原生的 android 貌似不支持中文.
- int result = tts.setLanguage(Locale.CHINESE);
- if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED){
- Toast.makeText(MainActivity.this, R.string.notAvailable, Toast.LENGTH_SHORT).show();
- }else{
- // 不支持中文就将语言设置为英文
- tts.setLanguage(Locale.US);
- }
- }
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.main, menu);
- return true;
- }
- }
完整代码参见 https://github.com/codestravel/CT_Android_demos/tree/master/CT_Text2SpeechDemo
https://github.com/codestravel/CT_Android_demos/tree/master/CT_Text2SpeechDemo
来源: https://www.cnblogs.com/wangleiblog/p/8909837.html