2012-07-10 7 views
7

मैं एंड्रॉइड एप्लिकेशन विकसित कर रहा हूं जिसमें मैं भाषण रूपांतरण के लिए पाठ का उपयोग कर रहा हूं। जब मैं अपना आवेदन खोलता हूं तो भाषण रूपांतरण में पाठ चलाने के लिए मुझे क्या चाहिए। इसके पूरा होने के बाद मैं कुछ काम करना चाहता हूं। मेरा कोडटीटीएस (कॉलबैक) एंड्रॉइड के पूरा होने का पता लगाने में असमर्थ।

public class Mainactivity extends Activity implements OnInitListener, OnUtteranceCompletedListener{ 
    private static int REQ_CODE = 1; 
    private TextToSpeech tts = null; 
    private boolean ttsIsInit = false; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    startTextToSpeech(); 
    } 

    private void startTextToSpeech() { 
     Intent intent = new Intent(Engine.ACTION_CHECK_TTS_DATA); 
     startActivityForResult(intent, REQ_CODE); 
    } 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == REQ_CODE) { 
      if (resultCode == Engine.CHECK_VOICE_DATA_PASS) { 
       tts = new TextToSpeech(this, this); 
      } 
      else { 
       Intent installVoice = new Intent(Engine.ACTION_INSTALL_TTS_DATA); 
       startActivity(installVoice); 
      } 
     } 
    } 

     public void onInit(int status) { 
      if (status == TextToSpeech.SUCCESS) { 
       ttsIsInit = true; 
       int result = tts.setOnUtteranceCompletedListener(this); 
       if (tts.isLanguageAvailable(Locale.ENGLISH) >= 0) 
        tts.setLanguage(Locale.ENGLISH); 
       tts.setPitch(5.0f); 
       tts.setSpeechRate(1.0f); 

       HashMap<String, String> myHashAlarm = new HashMap<String, String>(); 
        myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_ALARM)); 
        myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "SOME MESSAGE"); 
        tts.speak("hi how are you?", TextToSpeech.QUEUE_FLUSH, myHashAlarm); 
      } 
     } 

    @Override 
    public void onDestroy() { 
     if (tts != null) { 
     tts.stop(); 
     tts.shutdown(); 
     } 
     super.onDestroy(); 
    } 

    @Override 
    public void onUtteranceCompleted(String uttId) { 
     Toast.makeText(Mainactivity.this,"done", Toast.LENGTH_LONG).show(); 
     if (uttId.equalsIgnoreCase("done")) { 
      Toast.makeText(Mainactivity.this,"inside done", Toast.LENGTH_LONG).show(); 
     } 
    } 
} 

जब मैं अपना आवेदन टेक्स्ट भाषण में ठीक काम करता हूं। लेकिन यह पता लगाने के लिए कि पाठ को भाषण पूरा किया गया है या नहीं। नि: शुल्क सहायता ..... धन्यवाद .....

उत्तर

7

यदि आप एपीआई स्तर 15 या बाद में उपयोग कर रहे हैं तो आप अपने TextToSpeech संदर्भ पर एक प्रगति श्रोता सेट कर सकते हैं

setOnUtteranceProgressListener(UtteranceProgressListener listener) 

आपको टीटीएस की प्रगति की रिपोर्टिंग कॉलबैक मिलेगी, जिसमें कॉल समाप्त होने पर कॉलबैक भी शामिल है। http://developer.android.com/reference/android/speech/tts/TextToSpeech.html और http://developer.android.com/reference/android/speech/tts/UtteranceProgressListener.html

हालांकि, मुझे लगता है कि आप पहले ही बहिष्कृत OnUtteranceCompletedListener का उपयोग कर रहे हैं। क्या आप onUtteranceCompleted() पर कॉलबैक प्राप्त कर रहे हैं? यह भी काम करना चाहिए।

+0

हाय डेविड मैं तुम्हें समाधान की कोशिश की लेकिन यह onUtteranceCompleted इसके लिए setOnUtteranceProgressListener.And के लिए त्रुटि मुझे देता है बिना किसी त्रुटि के निष्पादित करता है लेकिन अधिसूचना में संदेश नहीं दे रहा है इसलिए इस समस्या को हल करने का कोई तरीका है। चाहे मैं कुछ भी गलत कर रहा हूं। नि: शुल्क सहायता ... – nilkash

+1

आप श्रोता सेट करने के लिए 'int परिणाम = tts.setOnUtteranceCompletedListener (थाई) कहते हैं। 'परिणाम' चर के मान की जांच करें। सफलता (0) या त्रुटि (-1) वापस आना चाहिए। साथ ही, यह देखने के लिए कि क्या यह वास्तव में वहां जाता है, पर कुछ लॉगिंग 'ऑनऑटरेंस कॉम्प्लेटेड()' में जोड़ें। किसी भी अन्य अजीब त्रुटियों के लिए अपने logcat भी जांचें। –

+0

धन्यवाद डेविड धन्यवाद के लिए धन्यवाद। यह ठीक काम कर रहा है। मैं टोस्ट और इसके कामकाजी जुर्माना के बजाय लॉगिंग का उपयोग करता हूं। धन्यवाद... – nilkash

3

यहाँ कि इतने आप लक्षित करना 15.

private void setTtsListener() 
    { 
     final SpeechRecognizingAndSpeakingActivity callWithResult = this; 
     if (Build.VERSION.SDK_INT >= 15) 
     { 
      int listenerResult = tts.setOnUtteranceProgressListener(new UtteranceProgressListener() 
      { 
       @Override 
       public void onDone(String utteranceId) 
       { 
        callWithResult.onDone(utteranceId); 
       } 

       @Override 
       public void onError(String utteranceId) 
       { 
        callWithResult.onError(utteranceId); 
       } 

       @Override 
       public void onStart(String utteranceId) 
       { 
        callWithResult.onStart(utteranceId); 
       } 
      }); 
      if (listenerResult != TextToSpeech.SUCCESS) 
      { 
       Log.e(TAG, "failed to add utterance progress listener"); 
      } 
     } 
     else 
     { 
      int listenerResult = tts.setOnUtteranceCompletedListener(new OnUtteranceCompletedListener() 
      { 
       @Override 
       public void onUtteranceCompleted(String utteranceId) 
       { 
        callWithResult.onDone(utteranceId); 
       } 
      }); 
      if (listenerResult != TextToSpeech.SUCCESS) 
      { 
       Log.e(TAG, "failed to add utterance completed listener"); 
      } 
     } 
    } 
7

कॉल टीटीएस वस्तु की onInit समारोह अंदर setOnUtteranceCompletedListener की जरूरत नहीं है तुम पिछड़े संगत होना मदद करता है here से कुछ कोड है।

यदि आप ऑनयूटरेंस कॉम्प्लेटेड फ़ंक्शन के कॉल पर यूआई में कोई भी परिवर्तन करना चाहते हैं, तो runOnUIThread विधि के अंदर कोड जोड़ें।

और बात() फ़ंक्शन

उदाहरण बुला जबकि HashMap परम मान जोड़ने के लिए याद करते हैं:

TextToSpeech tts= new TextToSpeech(context, new OnInitListener() { 

@Override 
public void onInit(int status) { 

    mTts.setOnUtteranceCompletedListener(new OnUtteranceCompletedListener() { 

     @Override 
     public void onUtteranceCompleted(String utteranceId) { 

      runOnUiThread(new Runnable() { 

       @Override 
       public void run() { 
       //UI changes 
       } 
      }); 
     } 
    }); 

} 
}); 


HashMap<String, String> params = new HashMap<String, String>(); 

params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,"stringId"); 

tts.speak("Text to Speak",TextToSpeech.QUEUE_FLUSH, params); 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^