gpt4 book ai didi

java - 为什么没有调用 UtteranceProgressListener 的函数?

转载 作者:搜寻专家 更新时间:2023-11-01 08:28:03 25 4
gpt4 key购买 nike

当我调用其类的 speak 函数时,调用了 UtteranceProgressListener 但未调用监听器的方法,即 onStart()onDone()onError()

最终,我们想要编写一段代码,可以使用播放暂停按钮暂停文本到语音并从同一个句子恢复。

package com.example.android.m_tour;

import android.content.Intent;
import android.speech.tts.TextToSpeech;
import android.speech.tts.UtteranceProgressListener;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;


import com.wnafee.vector.MorphButton;

import java.util.HashMap;
import java.util.Locale;

import static com.example.android.m_tour.R.id.mb;


public class guide extends AppCompatActivity implements MorphButton.OnStateChangedListener {

private Button settingsButton;
private String data, s;
private TextView textView;
private static TextToSpeech textToSpeech;

//qr code scanner object
private MainActivity mainActivity;
private TTSsettings ttSsettings;
private MorphButton control;
private Locale loc;
private String pr[];


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_guide);
control = (MorphButton) findViewById(mb);
mainActivity = new MainActivity();
textView = (TextView) findViewById(R.id.textview);
textView.setText(mainActivity.getData());
settingsButton = (Button) findViewById(R.id.settings);
ttSsettings = new TTSsettings();
loc = new Locale("en_IN");

control.setOnStateChangedListener(this);
settingsButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

Intent intent = new Intent(guide.this, TTSsettings.class);
startActivity(intent);
/*textToSpeech.stop();
Intent intent = new Intent();
intent.setAction("com.android.settings");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);*/
}
});
data = mainActivity.getData();
onStart();

textToSpeech = new TextToSpeech(this, new TextToSpeech.OnInitListener() {
@Override
public void onInit(int i) {
if (i == TextToSpeech.SUCCESS) {
//set language Locale to US
int result = textToSpeech.setLanguage(loc);
//check that is language locale available on device or supported
if (result == TextToSpeech.LANG_MISSING_DATA
|| result == TextToSpeech.LANG_NOT_SUPPORTED) {
Toast.makeText(guide.this, "Leanguage not present", Toast.LENGTH_SHORT).show();
} else {
speakOut();
}

} else {
//show toast if initialization failed
Toast.makeText(getBaseContext(), "TTS Engine Initilization Failed!", Toast.LENGTH_SHORT).show();
}

textToSpeech.setOnUtteranceProgressListener(new UtteranceProgressListener() {
@Override
public void onStart(String s) {
//if ("id".equals(s)
Toast.makeText(guide.this, "onStart works", Toast.LENGTH_SHORT).show();

}

@Override
public void onDone(String s) {
//if ("id".equals(s))
Toast.makeText(guide.this, "onDone works", Toast.LENGTH_SHORT).show();
}

@Override
public void onError(String s) {
//if ("id".equals(s))
Toast.makeText(guide.this, "OnError works", Toast.LENGTH_SHORT).show();
}
});

}
});
}

@Override
public void onDestroy() {
// Don't forget to stop and shutdown text to speech engine!
if (textToSpeech != null) {
textToSpeech.stop();
textToSpeech.shutdown();
}
super.onDestroy();
}

@Override
public void onStateChanged(MorphButton.MorphState changedTo, boolean isAnimating) {
if (changedTo == MorphButton.MorphState.END) {
textToSpeech.stop();
} else {
speakOut();

}
}

private void speakOut() {
HashMap<String, String> params = new HashMap<String, String>();
params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "id");
textToSpeech.setPitch((float) ttSsettings.getPitchRate());
textToSpeech.setSpeechRate((float) ttSsettings.getSpeechRate());
textToSpeech.speak(pr[1], TextToSpeech.QUEUE_FLUSH, params);
}


//getters
public String getData() {
return data;
}

public static TextToSpeech getTextToSpeech() {
return textToSpeech;
}
}

最佳答案

必须在调用 speak() 之前调用 setOnUtteranceProgressListener() 方法。现在您首先调用您的 speakOut() 方法,然后才设置监听器。它需要反过来,如:

textToSpeech = new TextToSpeech(this, new TextToSpeech.OnInitListener() {
@Override
public void onInit(int i) {
if (i == TextToSpeech.SUCCESS) {
//set language Locale to US
int result = textToSpeech.setLanguage(loc);
//check that is language locale available on device or supported
if (result == TextToSpeech.LANG_MISSING_DATA
|| result == TextToSpeech.LANG_NOT_SUPPORTED) {
Toast.makeText(guide.this, "Leanguage not present", Toast.LENGTH_SHORT).show();
} else {
textToSpeech.setOnUtteranceProgressListener(
new UtteranceProgressListener() {
@Override
public void onStart(String s) {
//if ("id".equals(s)
Toast.makeText(guide.this, "onStart works", Toast.LENGTH_SHORT).show();
}

@Override
public void onDone(String s) {
//if ("id".equals(s))
Toast.makeText(guide.this, "onDone works", Toast.LENGTH_SHORT).show();
}

@Override
public void onError(String s) {
//if ("id".equals(s))
Toast.makeText(guide.this, "OnError works", Toast.LENGTH_SHORT).show();
}
});

speakOut();
}
} else {
//show toast if initialization failed
Toast.makeText(getBaseContext(), "TTS Engine Initilization Failed!", Toast.LENGTH_SHORT).show();
}
}
});

关于java - 为什么没有调用 UtteranceProgressListener 的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42972877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com