Quand j'appelle le speak
de sa classe, le UtteranceProgressListener
est appelé mais les méthodes de l'écouteur ne sont pas appelées, c'est-à-dire que la fonction onStart()
,le onDone()
y onError()
.
En fin de compte, nous voulons écrire un morceau de code qui puisse mettre en pause la synthèse vocale et reprendre à partir de la même phrase à l'aide des boutons lecture-pause.
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;
}
}