2014-11-09 24 views
5

पर टेक्स्टटॉस्पेच.speak() पर प्रतिक्रिया करने के लिए फियोयो से 6 सेकंड अधिक लगता है। हाल ही में एक एंड्रॉइड का एक एंड्रॉइड संस्करण चलाने वाले फोन पर, टेक्स्टटॉस्पेक इंजन को पहली बार कॉल करने पर प्रतिक्रिया करने के लिए लगभग 6 सेकंड लग सकते हैं एक पुराने फोन के लिए।किटकैट को पहले कॉल

मेरा परीक्षण कोड नीचे दिखाया गया है। (संपादित: एंड्रॉइड 4.0.3 आइस क्रीम सैंडविच, एपीआई 15 और ऊपर के लिए वैकल्पिक कोड, अंत में दिखाया गया है।)

1 वर्षीय मोटोरोला मोटो जी पर 4.4.4 किटकैट चल रहा है, इसमें 7 सेकंड से अधिक समय लग सकता है 0Tशब्द "प्रारंभ" पर पहला कॉल पूरा करने के लिए टेक्स्टटॉस्पेच इंजन। यहां मेरे कोड का आउटपुट है।

D/speak﹕ call: 1415501851978 
D/speak﹕ done: 1415501859122, delay: 7144 

पुराने 3 वर्ष Samsung SGH-T499Y 2.2 Froyo चल रहा, यह एक दूसरे से भी कम समय बोल खत्म करने के लिए:

D/speak﹕ call: 1415502283050 
D/speak﹕ done: 1415502283900, delay: 850 

वहाँ क्या इस 6- दौरान हो रहा है की खोज के लिए एक रास्ता है दूसरी देरी?
क्या नया (और अनुमानतः तेज़) डिवाइस अधिक तेज़ी से प्रतिक्रिया करने के लिए कोई तरीका है?

package com.example.speak 

import android.app.Activity; 
import android.speech.tts.TextToSpeech; 
import android.os.Bundle; 
import android.util.Log; 

import java.util.HashMap; 
import java.util.Locale; 


public class MainActivity extends Activity implements TextToSpeech.OnInitListener, 
     TextToSpeech.OnUtteranceCompletedListener { 

    private final String TAG = "speak"; 
    private Activity activity; 
    private TextToSpeech tts; 
    private long launchTime; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     tts = new TextToSpeech(getApplicationContext(), this); 
    } 

    public void onInit(int status) { 
     if (status == TextToSpeech.SUCCESS) { 
      tts.setOnUtteranceCompletedListener(this); 
      tts.setLanguage(Locale.UK); 
      ttsSay("Started"); 
     } 
    } 

    private void ttsSay(String toSpeak) { 
     int mode = TextToSpeech.QUEUE_FLUSH; 
     HashMap hashMap = new HashMap<String, String>(); 
     hashMap.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, TAG); 

     launchTime = System.currentTimeMillis(); 
     Log.d(TAG, "call: " + launchTime); 
     tts.speak(toSpeak, mode, hashMap); 
    } 

    public void onUtteranceCompleted(String utteranceID) { 
     long millis = System.currentTimeMillis(); 
     Log.d(TAG, "done: " + millis + ", delay: " + (millis - launchTime)); 
    } 
} 

संपादित करें: आइस क्रीम सैंडविच 4.0.3, एपीआई 15, एंड्रॉयड UtteranceProgressListener प्रदान करता है, जो समय के लिए दोनों शुरुआत और पाठ से वाक् प्लेबैक के अंत इस्तेमाल किया जा सकता के साथ शुरू। निम्नलिखित Froyo के साथ संगत नहीं है;

package com.example.announceappprogress; 

import android.app.Activity; 
import android.speech.tts.TextToSpeech; 
import android.os.Bundle; 
import android.speech.tts.UtteranceProgressListener; 
import android.util.Log; 

import java.util.HashMap; 
import java.util.Locale; 


public class MainActivity extends Activity implements TextToSpeech.OnInitListener { 

    private final String TAG = "speak"; 
    private TextToSpeech tts; 
    private long launchTime; 
    private long startTime; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     tts = new TextToSpeech(getApplicationContext(), this); 
     tts.setOnUtteranceProgressListener(mProgressListener); 
    } 

    public void onInit(int status) { 
     if (status == TextToSpeech.SUCCESS) { 
      tts.setLanguage(Locale.UK); 
      ttsSay("Started"); 
     } 
    } 

    private void ttsSay(String toSpeak) { 
     int mode = TextToSpeech.QUEUE_FLUSH; 
     HashMap hashMap = new HashMap<String, String>(); 
     hashMap.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, TAG); 

     launchTime = System.currentTimeMillis(); 
     Log.d(TAG, "called: " + launchTime); 
     tts.speak(toSpeak, mode, hashMap); 
    } 

    private final UtteranceProgressListener mProgressListener = new UtteranceProgressListener() { 
     @Override 
     public void onStart(String utteranceId) { 
      startTime = System.currentTimeMillis(); 
      Log.d(TAG, "started: " + startTime + ", delay: " + (startTime - launchTime)); 
     } 

     @Override 
     public void onError(String utteranceId) {} // Do nothing. 


     @Override 
     public void onDone(String utteranceId) { 
      long millis = System.currentTimeMillis(); 
      Log.d(TAG, "done: " + millis + ", total: " + (millis - launchTime) + ", duration: " + (millis - startTime)); 
     } 
    }; 
} 

यहाँ उत्पादन का एक नमूना है कि इस 4.4.4 किटकैट चल मोटोरोला मोटो जी पर देता है:

D/speak﹕ called: 1415654293442 
D/speak﹕ started: 1415654299287, delay: 5845 
D/speak﹕ done: 1415654299995, total: 6553, duration: 708 

उत्तर

1

आप शायद दोनों डिवाइस पर समान टीटीएस इंजन का उपयोग नहीं कर रहे हैं।

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

"दूसरा" उच्चारण करने के लिए एक दिलचस्प प्रयोग होगा। मैं भविष्यवाणी करता हूं कि आपके नए फोन पर पहले की तुलना में तेज़ होगा। इसके अलावा एक और अधिक प्राकृतिक ध्वनि टीटीएस सिस्टम आमतौर पर टीटीएस को कॉल करने और उच्चारण से आवाज की शुरुआत के बीच एक विलंबता का समय होता है। विशेष रूप से अगर एक लंबी वाक्य दी जाती है क्योंकि सिस्टम पूरी वाक्य को देखता है ताकि वचन शुरू करने से पहले सर्वोत्तम वाक्यांश तैयार किया जा सके।

साथ ही, क्या आप सुनिश्चित हैं कि आपका नया डिवाइस क्लाउड-आधारित टीटीएस सेवा का उपयोग नहीं कर रहा है? अन्य महत्वपूर्ण, अतिरिक्त चर हैं जो विलंबता को प्रभावित करेंगे।

+0

आपके अंतर्दृष्टिपूर्ण उत्तर के लिए धन्यवाद। निश्चित रूप से नए फोन पर आवाज कम ऑडियो कलाकृतियों है। टीटीएस इंजन इंटरनेट कनेक्शन के साथ भी काम करता है, इसलिए क्लाउड-आधारित सेवा का नियम है। मैं उच्चारण प्रगति की शुरुआत और समाप्ति समय प्राप्त करने के लिए कोड जोड़ूंगा, और देख सकता हूं कि इससे क्या किया जा सकता है। –

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