2015-04-03 1 views
1

Я пытаюсь перенести приложение для Android в Chrome с помощью ARCWelder. Компонент TextToSpeech не работает. В одном действии у меня есть неопределенный ход, ожидающий, пока двигатель TTS не будет инициализирован. В Chrome он либо вращается навсегда, либо возвращает исключение NullPointerException. Является ли TTS недоступным в Chrome? Запуск ChromeOS на Chromebox.Android TextToSpeech в Chrome ARC

UtteranceProgressListener ttsListener = new UtteranceProgressListener() { 
    @Override 
    public void onStart(String s) { 
     Logg.d("speech started: " + s); 
     if (loadingDialog.isShowing()) { 
      loadingDialog.dismiss(); 
     } 
    } 
    @Override 
    public void onDone(String s) { 
     Logg.d("speech done: " + s); 
     if (s.equals("1")) { 
      nextWord(); 
     } else if (s.equals("2")) { 
      CheckLeave(); 
     } 

    } 
    @Override 
    public void onError(String s) { 
     Logg.e("Text to Speech error speaking: " + s); 
    } 
}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    showProgressDialog(); 
} 

@Override 
protected void onResume() { 
    if (tts==null) { 
     Logg.d("re-initializing TTS"); 
     tts=new TextToSpeech(getApplicationContext(), 
       new TextToSpeech.OnInitListener() { 
        @Override 
        public void onInit(int status) { 
         if(status != TextToSpeech.ERROR){ 
          tts.setSpeechRate(.5f + .25f * (Integer)KVDB.GetValue("speechRate",2)); 
          tts.setLanguage(Locale.US); 
          if (pauseTime != 0) { 
           //Paused. Say nothing. 
          } else if (currentWord == null) { 
           startTime = new ExcelDate(); 
           nextWord(); 
          } else if (currentWord.length() == 0) { 
           nextWord(); 
          } else { 
           reSpeak(); 
          } 
         } 
        } 
       }); 
     tts.setOnUtteranceProgressListener(ttsListener); 
    } 
    super.onResume(); 
} 

private void showProgressDialog() { 
    loadingDialog = new ProgressDialog(this); 
    loadingDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
    loadingDialog.setTitle(getString(R.string.test_loading_msg)); 
    loadingDialog.show(); 
} 

ответ

0

Как вы нашли, похоже, что у нас нет какого-либо поставщика услуг TTS по умолчанию в составе пакета ARC. На базовой ОС Android вообще нет.

Для этого необходимо file a bug.

+0

Я скопировал этот вопрос в отчет об ошибке. Когда вы говорите, что нет провайдера услуг TTS по умолчанию, вы имеете в виду, что есть обходной путь для доступа к другому двигателю TTS или нет способа конвертировать текст в речь из ARC в это время? – Scott

+0

Возможно, вы сможете включить другой движок TTS, включив его в свой пакет CRX (вы можете включить несколько APK). Из того, что я собрал в поисках кода Java, он должен работать, но это не то, что мы тестировали. При этом вам придется иметь дело с любыми условиями лицензирования для этого движка. –

+0

Lloyd, я хотел бы попытаться реализовать обходное решение, подобное этому. Мне действительно нужно расширить доступ к моему приложению за пределами Android, если он будет жизнеспособным, и Chrome просто кажется идеальным вариантом для этого. Вы знаете, где я могу найти гидов или помочь в этом? Например, как я могу включить это? https://chrome.google.com/webstore/detail/multilingual-tts-engine/megclklaoidjbomplbhbdgbelkoebbdl – Scott