0

我正在尝试创建一个文本转语音应用程序,该应用程序将记住应用程序暂停时逗号后的最后一个句子或句子的一部分。下面是我的代码。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    pitch = (EditText) findViewById(R.id.pitch);
    words = (EditText) findViewById(R.id.wordsToSpeak);
    words.setText("This message is intended only for the use of the individual or entity to which it is addressed and may contain information that is privileged, confidential or exempt from disclosure by law.");
    speakBtn = (Button) findViewById(R.id.speak);

    // Check to be sure that TTS exists and is okay to use
    Intent checkIntent = new Intent();
    checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
    startActivityForResult(checkIntent, REQ_TTS_STATUS_CHECK);
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQ_TTS_STATUS_CHECK) {
        switch (resultCode) {
        case TextToSpeech.Engine.CHECK_VOICE_DATA_PASS:
            // TTS is up and running
            mTts = new TextToSpeech(this, this);
            Log.v(TAG, "Pico is installed okay");
            break;
        case TextToSpeech.Engine.CHECK_VOICE_DATA_BAD_DATA:
        case TextToSpeech.Engine.CHECK_VOICE_DATA_MISSING_DATA:
        case TextToSpeech.Engine.CHECK_VOICE_DATA_MISSING_VOLUME:
            // missing data, install it
            Log.v(TAG, "Need language stuff: " + resultCode);
            Intent installIntent = new Intent();
            installIntent
                    .setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
            startActivity(installIntent);
            break;
        case TextToSpeech.Engine.CHECK_VOICE_DATA_FAIL:
        default:
            Log.e(TAG, "Got a failure. TTS apparently not available");
        }
    } else {
        // Got something else
    }
}

@Override
public void onInit(int status) {
    // Now that the TTS engine is ready, we enable the button
    if (status == TextToSpeech.SUCCESS) {
        speakBtn.setEnabled(true);
        mTts.setOnUtteranceCompletedListener(this);

    }
}

public void doSpeak(View view) {
    mTts.setPitch(new Float(pitch.getText().toString()));

    StringTokenizer st = new StringTokenizer(words.getText().toString(),
            ",.");

    while (st.hasMoreTokens()) {

        params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,
                String.valueOf(uttCount++));
        mTts.speak(st.nextToken(), TextToSpeech.QUEUE_ADD, params);
    }

    // mTts.speak(words.getText().toString(), TextToSpeech.QUEUE_ADD, null);
};

@Override
public void onPause() {
    super.onPause();
    // if we're losing focus, stop talking
    if (mTts != null)
        mTts.stop();
}

@Override
public void onDestroy() {
    super.onDestroy();
    mTts.shutdown();
}

@Override
public void onUtteranceCompleted(String utteranceId) {
    Log.v(TAG, "Got completed message for uttId: " + utteranceId);
    lastUtterance = Integer.parseInt(utteranceId);

}

}

我能够让机器人说话并跟踪它最后说话的令牌。但是,当您按下 speakBtn 时,我不确定如何从上次停止的地方恢复。如果没有成功地大声读出所有令牌,是否无论如何要返回到令牌生成器中的某个令牌?

4

1 回答 1

0

怎么样:

for(int i=0; i<successfulUtterances; ++i)
  tokenizer.nextToken();
String nextUnspokenUtterance = tokenizer.nextToken();

如果你问是否有直接的方法,没有。但是这种方式将摆脱所有您不需要的令牌并让您继续进行。

于 2012-07-11T17:03:21.260 回答