0

アプリが一時停止されたときのコンマの後の最後の文または文の一部を記憶する Text to Speech アプリを作成しようとしています。以下は私のコードです。

@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 に答える