TTS - 字符字符

问题描述 投票:0回答:1

构建TTS应用程序

应用程序正在从SQLite上滑动显示单词并立即说话

但如果用户快速刷两次或三次跳过单词,它仍然会说旧的(即第一个单词)

说话

public void speak(){
    text = txt_word.getText().toString();
    final char[] chars = text.toCharArray();
    Toast.makeText(this, String.valueOf(chars.length), Toast.LENGTH_SHORT).show();
    textToSpeech.setPitch((float) 0.80);

    final boolean[] stop = {false};

    final int delay = 700;
    final int[] i = {0};
    final Handler handler=  new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                textToSpeech.speak(String.valueOf(chars[i[0]]),TextToSpeech.QUEUE_FLUSH,null,null);
            } else {
                textToSpeech.speak(String.valueOf(chars[i[0]]), TextToSpeech.QUEUE_FLUSH, null);
            }

            i[0]++;
            if(i[0]>=chars.length){
                stop[0] =true;

            }
            //do your work here..

            if (!stop[0]) {
                handler.postDelayed(this, delay);
            }
        }
    }, delay);
    textToSpeech.speak(text,TextToSpeech.QUEUE_FLUSH,null);
    //Toast.makeText(this,text , Toast.LENGTH_SHORT).show();
}

SWIPE CALL

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    if (e1.getX() > e2.getX()) {
        Cursor c = db.random();
        c.moveToFirst();
        txt_word.setText(c.getString(c.getColumnIndex("word")));
        speak();
    }
android android-sqlite text-to-speech
1个回答
0
投票

一点点谷歌

onCreate------
Handler handler = new Handler();

创建方法

private Runnable speakCharackters = new Runnable() {

    @Override
    public void run() {
        chars = txt_word.getText().toString().toCharArray();

        textToSpeech.speak(String.valueOf(chars[i]),TextToSpeech.QUEUE_FLUSH,null,null);
        txt_character.setText(String.valueOf(chars[i]));
        i++;

        if(i>=chars.length){
            i=0;
            handler.removeCallbacks(speakCharackters);

        }else{
            handler.postDelayed(speakCharackters,delay);
        }

    }
};

并在再次开始新词之前

handler.removeCallbacks(speakCharackters);
handler.postDelayed(speakCharackters, delay);
© www.soinside.com 2019 - 2024. All rights reserved.