Tra*_*ler 5 android text-to-speech
我有一个带有两个ImageButtons(播放,停止)的FrameLayout .默认情况下
播放按钮是VISIBLE,停止按钮是GONE
单击" 播放"将启动读取文本的TTS引擎.在完成阅读文本时,我想设置可见性
玩GONE,停止VISIBLE
我应该使用UtteranceProgressListener来达到目的吗?如果不,
你是否意味着:
无论如何,目的UtteranceProgressListener正是你所描述的.它用于监控语音合成的进度.
您可以在任何说出的文本中添加"话语ID"(此处为"helloText"):
tts.speak("Hello Stack Overflow!", TextToSpeech.QUEUE_ADD, "helloText");
Run Code Online (Sandbox Code Playgroud)
但是在你的情况下这并不是必需的,所以最后一个参数可以为null:
tts.speak("Hello Stack Overflow!", TextToSpeech.QUEUE_ADD, null);
Run Code Online (Sandbox Code Playgroud)
本UtteranceProgressListener应该在调用前加入speak().例如,onInit()如果TTS状态是,则可以在TTS初始化回调中执行此操作TextToSpeech.SUCCESS.
它可以是一个单独的类,也可以只是一个匿名的内部类:
speech.setOnUtteranceProgressListener(new UtteranceProgressListener() {
@Override
public void onStart(String utteranceId) {
// Speaking started.
}
@Override
public void onDone(String utteranceId) {
// Speaking stopped.
}
}
@Override
public void onError(String utteranceId) {
// There was an error.
}
});
Run Code Online (Sandbox Code Playgroud)
onStart()说话开始时(呼叫后不久speak())触发该方法,这是切换可见按钮的一个可能位置.例如,播放按钮可以切换到停止按钮.
onDone()说话结束后触发该方法,这是切换可见按钮的另一个可能位置.例如,可以将" 停止"按钮切换为" 播放"按钮.
如你在speak()方法调用中提供了一个方法,你可以看到两种方法中都有"话语id" .如果您需要确切地知道正在讲话/完成哪些文本/因错误而失败将是有用的.
小智 5
UtteranceProgressListener 可用于识别 TTS 何时完成。试试下面的代码,它在 TTS 完成后显示一个祝酒词。
public class MainActivity extends AppCompatActivity implements TextToSpeech.OnInitListener{
private boolean initialized;
private String queuedText;
private String TAG = "TTS";
private TextToSpeech tts;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tts = new TextToSpeech(this /* context */, this /* listener */);
tts.setOnUtteranceProgressListener(mProgressListener);
speak("hello world");
}
public void speak(String text) {
if (!initialized) {
queuedText = text;
return;
}
queuedText = null;
setTtsListener(); // no longer creates a new UtteranceProgressListener each time
HashMap<String, String> map = new HashMap<String, String>();
map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "MessageId");
tts.speak(text, TextToSpeech.QUEUE_ADD, map);
}
private void setTtsListener() {
}
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
initialized = true;
tts.setLanguage(Locale.ENGLISH);
if (queuedText != null) {
speak(queuedText);
}
}
}
private abstract class runnable implements Runnable {
}
private UtteranceProgressListener mProgressListener = new UtteranceProgressListener() {
@Override
public void onStart(String utteranceId) {
} // Do nothing
@Override
public void onError(String utteranceId) {
} // Do nothing.
@Override
public void onDone(String utteranceId) {
new Thread()
{
public void run()
{
MainActivity.this.runOnUiThread(new runnable()
{
public void run()
{
Toast.makeText(getBaseContext(), "TTS Completed", Toast.LENGTH_SHORT).show();
}
});
}
}.start();
}
};
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3735 次 |
| 最近记录: |