2013-10-16 53 views
0

我有String s的編號,每個包含5個句子。現在,我想一次一個地將它們傳遞給android文本到語音。這意味着,第一個字符串被傳遞給引擎,第二個文本應該在引擎完成講話後傳遞。以下是我的代碼。閱讀TTS中「字符串」的數量

List<String>textCollection = new ArrayList<String>(); 

//Add sentences to 'textCollection '. Code removed// 

for(int i=0;i<textCollection.size();i++) 
{ 
    while(tts.isSpeaking()) 
    { 

    } 

    Toast.makeText(Talk.this, ""+i, Toast.LENGTH_LONG).show(); 

    new SpeakTheText().execute(textCollection.get(i)); 

} 

//This class will speak the text 
    private class SpeakTheText extends AsyncTask<String,Void,String> 
    { 

     @Override 
     protected String doInBackground(String... params) { 
      // TODO Auto-generated method stub 

      tts.speak(params[0], TextToSpeech.QUEUE_FLUSH, null); 
      return null; 
     } 

    } 

現在,不幸的是,發生了什麼是意外的。語音引擎只是從這裏到那裏講文字,而不是爲了!它從不說第一個文本,只是從某個地方選擇一個文本並閱讀它。這是爲什麼發生?請幫忙。

回答

2

你想改變的TTS

tts.speak(params[0], TextToSpeech.QUEUE_ADD, null); 

參數在我的應用程序工作workwell。

+0

並刪除手動循環? –

+0

TextToSpeech.QUEUE_FLUSH刪除此。 – Harshid

1

您不需要爲此使用AsyncTask。

讓你的類實現OnUtteranceCompletedListener

啓動您的文字轉語音對象是這樣的:

textToSpeech = new TextToSpeech(context, this); // this being the class that implements OnUtteranceCompletedListener. 

然後,一旦你的文字轉語音對象完成給定的字符串,它會調用onUtteranceCompleted方法,你可以告訴你的文字轉語音如果您有任何問題,請發言。

或者,您可以使用QUEUE_ADD標誌而不是QUEUE_FLUSH標誌。這會將新文本添加到隊列末尾,而不是用新文本替換現有文本。

希望這有助於:)

+0

非常感謝回覆。你能給我提供一些更明確的代碼示例嗎?隊列添加可能不起作用,因爲文本將超過4000個字符(最大TTS字符數) –