سؤال

أحاول تنفيذ النص إلى تكنولوجيا الكلام من الروبوت في نشاطي ولكن أواجه خطأ غريب.لا أستطيع سماع أي صوت ، من التعليمات البرمجية الخاصة بي.طريقة الكلام يعمل فقط إذا كنت وضعه في طريقة أونينيت ، وإلا فإنه لا يتكلم.

رمز بلدي هو كما يلي :

public class GameOverActivity extends Activity implements OnInitListener {
private TextToSpeech talker;
....
talker = new TextToSpeech(this, this);  
say("Something",false);
...
   public void onInit(int status) {  
        if (status == TextToSpeech.SUCCESS) {
          talker.setLanguage(Locale.US);
        }
        else if (status == TextToSpeech.ERROR) {
            Toast.makeText(this,"Error occurred while initializing Text-To-Speech engine", Toast.LENGTH_LONG).show();
        }

void say(String text, boolean flush) {
         if(flush == true)
         {
        talker.speak(text,TextToSpeech.QUEUE_FLUSH,null);
         }
         if(flush == false)
         {
        talker.speak(text,TextToSpeech.QUEUE_ADD,null);
         }         
    }

الشيء الغريب هو أنه إذا وضعت طريقة القول في أونينيت ، فإنه يعمل بشكل جيد!

شاهدت لوغكات بعناية وهنا النتائج :

خدمة.أونكريت () تحويل النص إلى كلام هو تحميل بدأت أوديوتراك خدمة.سيتلانج تحميل أون الولايات المتحدة بنجاح ضبط معدل الكلام على 100

ثم لا يحدث شيء.

أي فكرة عن ما هو الخطأ في التعليمات البرمجية أعلاه?

شكرا مقدما!

هل كانت مفيدة؟

المحلول

بعد بعض ساعات أخرى تبحث الرمز، لاحظت أن المشكلة هي أن تهيئة محرك TTS يستغرق بعض الوقت.إذا لم ينته المستوى، فسوف تفشل مكالمة طريقة التحدث.

إذا قمت بتقول "شيئا ما في الزر، فربما لن تحتاج إلى ذلك، لأن المستخدم سوف يستغرق بعض الوقت للتفكير قبل الضغط على الزر، وسوف ينتهي التهيئة.

إذا كنت تريد "القول" شيئا ما بمجرد انتهاء التهيئة، استخدم هذا الرمز:

giveacodicetagpre.

نصائح أخرى

فمن المستحسن أن تقوم بتنفيذ TextToSpeech.OnInitListener من نشاطك الرئيسي.جرب هذا

public class GameOverActivity extends Activity implements TextToSpeech.OnInitListener {

@Override
public void onInit(int status) {
    if (status == TextToSpeech.SUCCESS) {

        int result = mTts.setLanguage(Locale.US);
        // Try this someday for some interesting results.
        // int result mTts.setLanguage(Locale.FRANCE);
        if (result == TextToSpeech.LANG_MISSING_DATA ||
                result == TextToSpeech.LANG_NOT_SUPPORTED) {
            // Lanuage data is missing or the language is not supported.
            //Log.e(TAG, "Language is not available.");
        } else {
            // Check the documentation for other possible result codes.
            // For example, the language may be available for the locale,
            // but not for the specified country and variant.

            // The TTS engine has been successfully initialized.
            // Allow the user to press the button for the app to speak again.
            // mAgainButton.setEnabled(true);
            // Greet the user.
            //sayHello();
        }
    } else {
        // Initialization failed.

    }

}

private TextToSpeech mTts;
}

حسنا سبب آخر لهذه المشكلة يمكن أن يكون محرك تحويل النص إلى كلام الخاص بك ، وأحيانا في هواتف سامسونج محرك تحويل النص إلى كلام الافتراضي هو محرك سامسونج الذي لا يعمل على بعض اللغات مثل الفارسية (أنا لا أقصد للنص الفارسي ، حتى لو كنت تحاول قراءة النص الإنجليزي ، فإنه لا يزال لا يعمل ، انها غريبة لكنه يحدث).من أجل حلها كل ما عليك القيام به هو تعيين محرك تحويل النص إلى كلام على التعليمات البرمجية الخاصة بك (أو حدد Setting -> Language input -> Text to speech -> Google Text-to-speech يدويا)

مشكلة واحدة لدي مع النص إلى كلام هو أنه إذا تم تثبيته على بطاقة SD، فلن يعمل عند توصيل USB.لذلك قد تحاول فصل جهاز الاختبار الخاص بك من USB ومعرفة ما إذا كان ذلك يحل المشكلة.

شيء آخر قد تحاول أنه يخطو من خلال البرنامج ورؤيته إذا كنت تقوم بتغيير كائن النص إلى كلام الخاص بك بأي شكل من الأشكال في الحادث.حدد نقطة انقطاع حول جزء الحديث من التعليمات البرمجية الخاصة بك وإلقاء نظرة على جميع المتغيرات في كائن Talker الخاص بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top