雖然視覺上的反饋通常是給用戶提供信息最快的方式,但這要求用戶把注意力設備上。當用戶不能查看設備時,則需要一些其他通信的方法。Android提供了強大的文字轉語音Text-to-Speech,TTS API。使開發者能夠在應用中添加語音通知和其他語音反饋功能,而不要求用戶看着屏幕。
下面的代碼展示了如何使用TTS API:
public class TextToSpeechDemo implements TextToSpeech.OnInitListener {
private final TextToSpeech mTextToSpeech;//TTS對象
private final ConcurrentLinkedQueue<String> mBufferedMessages;//消息隊列
private Context mContext;
private boolean mIsReady;//標識符
public TextToSpeechDemo(Context context){
this.mContext=context;//獲取上下文
this.mBufferedMessages=new ConcurrentLinkedQueue<String>();//實例化隊列
this.mTextToSpeech=new TextToSpeech(this.mContext,this);//實例化TTS
}
//初始化TTS引擎
@Override
public void onInit(int status) {
Log.i("TextToSpeechDemo",String.valueOf(status));
if(status==TextToSpeech.SUCCESS){
int result = this.mTextToSpeech.setLanguage(Locale.CHINA);//設置識別語音為中文
synchronized (this){
this.mIsReady=true;//設置標識符為true
for(String bufferedMessage : this.mBufferedMessages){
speakText(bufferedMessage);//讀語音
}
this.mBufferedMessages.clear();//讀完后清空隊列
}
}
}
//釋放資源
public void release(){
synchronized (this){
this.mTextToSpeech.shutdown();
this.mIsReady=false;
}
}
//更新消息隊列,或者讀語音
public void notifyNewMessage(String lanaugh){
String message=lanaugh;
synchronized (this){
if(this.mIsReady){
speakText(message);
}else{
this.mBufferedMessages.add(message);
}
}
}
//讀語音處理
private void speakText(String message){
Log.i("liyuanjinglyj",message);
HashMap<String,String> params=new HashMap<String,String >();
params.put(TextToSpeech.Engine.KEY_PARAM_STREAM,"STREAM_NOTIFICATION");//設置播放類型(音頻流類型)
this.mTextToSpeech.speak(message, TextToSpeech.QUEUE_ADD, params);//將這個發音任務添加當前任務之后
this.mTextToSpeech.playSilence(100,TextToSpeech.QUEUE_ADD,params);//間隔多長時間
}
}
當然一般手機是不支持中文的可以百度下載訊飛TTS引擎后在測試。見最后附圖。
由於TTS引擎的初始化是異步的,所以在執行實際的文字轉語音之前需要把消息放到隊列中。
可以給TTS引擎發送多個參數。前面展示了如何決定口語消息使用的音頻流。在這種情況下,通知聲音也使用相同的音頻流。
最后,如果處理連續多個消息,最好在每個消息結束后暫停一會在播放下一個消息。這樣做會清楚的告訴用戶消息的結束和開始。

版權聲明:本文為博主原創文章,未經博主允許不得轉載。
