最近在做一個項目,其中有一個功能是需要將文本轉換成語音并播放出來。下面我將我的做法分享一下。
非常令人開心的是,Android
系統目前已經集成了TTS
,提供了相關的庫供我們進行調用,不必到處去搜尋第三方庫,直接導入android.speech.tts.TextToSpeech
即可。
//導入TTS的包
import android.speech.tts.TextToSpeech;
//定義一個tts對象
private TextToSpeech tts;
其次,要想實例化這個對象需要兩個參數,一個是Context
對象,另一個是TextToSpeech
類對應的監(jiān)聽器對象:OnLnitListener
對象。一般Context
對象傳入當前的Activity
,OnLnitListener
可以自己寫類繼承,并實現其方法。
//導入監(jiān)聽包
import android.speech.tts.TextToSpeech.OnInitListener;
//初始化tts監(jiān)聽對象
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添加監(jiān)聽
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;
}
}
Demo示例
完整代碼參見github
歡迎加入qq技術交流群:439261058
微信公眾號:代碼之間(codestravel)