我想知道Google Glass是否支持TextToSpeech?

我做了这样的事情:

public class TextToSpeechController implements TextToSpeech.OnInitListener{

private Context mContext;

private TextToSpeech tts;

public TextToSpeechController(Context context) {
    Log.e("TEXT TO SPEECH CONTROLLER", "controller");
    mContext = context;
    tts = new TextToSpeech(context, this);
}

@Override
public void onInit(int status) {
    Log.e("INIT TTS", "INIT");
    if (status == TextToSpeech.SUCCESS) {
            int result = tts.setLanguage(Locale.ENGLISH);

            if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
                   Toast.makeText(mContext, "This Language is not supported", Toast.LENGTH_LONG).show();
            }
            else {
                Toast.makeText(mContext, "Ready to Speak", Toast.LENGTH_LONG).show();
                speakTheText("Welcome to Vision Screening App");
            }

    }
    else {
         Toast.makeText(mContext, "Can Not Speak", Toast.LENGTH_LONG).show();
    }
}

public void stopTTS(){
    Log.e(".....TTS", "SHUTDOWN");
    tts.stop();
    tts.shutdown();
}

 public void speakTheText(String str){
     Log.e("SPEAK TEXT!!!!", "SPEAK TEXT");
     tts.speak(str, TextToSpeech.QUEUE_FLUSH, null);
 }

}

在我的事件(onCreate)中,我有:
controller_tts = new TextToSpeechController(getApplicationContext());

我面临几个问题:
  • 首先,仅在退出当前Activity的那一刻才调用onInit方法。
  • 使用TTS后,不知何故,speeker的音量变成静音,并且我无法从设置中调回音量(仅在重新启动眼镜之后)

  • 难道我做错了什么?或只是谷歌眼镜不支持TTS,甚至使之难以置信。

    任何建议都欢迎!非常感谢你!:)

    最佳答案

    初始化TextToSpeech之前,您是否可能正在调用stopTTS?

    在Glass上,这对我来说效果很好:

    import android.app.Activity;
    import android.os.Bundle;
    import android.speech.tts.TextToSpeech;
    import android.view.MotionEvent;
    import android.widget.TextView;
    
    import java.util.Locale;
    
    public class TTSTestActivity extends Activity
      implements TextToSpeech.OnInitListener {
    
      private TextToSpeech tts;
      private boolean initialized = false;
      private String queuedText;
    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView view = new TextView(this);
        view.setText("Tap Me");
        setContentView(view);
        tts = new TextToSpeech(this /* context */, this /* listener */);
      }
    
      @Override
      public void onInit(int status) {
        if (status == TextToSpeech.SUCCESS) {
          initialized = true;
          tts.setLanguage(Locale.ENGLISH);
    
          if (queuedText != null) {
            speak(queuedText);
          }
        }
      }
    
      public void speak(String text) {
        // If not yet initialized, queue up the text.
        if (!initialized) {
          queuedText = text;
          return;
        }
        queuedText = null;
        // Before speaking the current text, stop any ongoing speech.
        tts.stop();
        // Speak the text.
        tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
      }
    
      @Override
      public boolean onGenericMotionEvent(MotionEvent event) {
        // On any motion event (including touchpad tap), say 'Hello Glass'
        speak("Hello Glass");
        return true;
      }
    }
    

    对于此示例,无论何时点击触摸板(或引起任何其他类型的运动事件),您都应该听到“Hello Glass”。请注意,如果在TextToSpeech初始化之前提供了文本,则将其排队,然后在初始化成功后进行朗读。

    这不包括任何拆卸,但您可以始终在事件的onDestroy()中放置TextToSpeech的停止/关闭。

    10-07 19:35
    查看更多