TextToSpeech是否支持Google Glass?

时间:2014-08-20 14:21:17

标签: text-to-speech google-glass google-gdk google-text-to-speech

我想知道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());

我面临几个问题:

  1. 首先,只有当我退出当前活动时才会调用onInit方法。
  2. 不知何故,使用TTS后,说话者的音量变为静音,我无法从设置中恢复音量(仅在我重启眼镜后)
  3. 我做错了吗?或者只是谷歌眼镜不支持TTS,甚至认为很难相信。

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

1 个答案:

答案 0 :(得分:4)

是否有可能在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。