Lorsque je défini tts.speak code>, à l'aide de la variable de chaîne code> S. / code> Il fonctionne parfaitement. Cependant, lorsque j'utilise le texte, je passe avec l'appel de la fonction, cela ne fonctionne pas. Les deux variables de chaîne sont exactes les mêmes
3 Réponses :
Sans votre journal ni votre appel de votre fonction, nous ne pouvons pas vraiment comprendre ce qui ne va pas. P>
Ma première hypothèse serait que Dans ce cas, il serait possible que le paramètre dans Vous voudrez peut-être aussi vérifier texte code> serait éventuellement null (ou vide si vous ne voyez aucune NPE dans vos journaux), Etir déclenchant une exception dans la méthode code> ou générer un discours vierge. Ajoutez une vérification nulle, une vérification vide et voyez si l'appel a la signature correcte pour votre code> fonction code>. P>
onpostexecute code> soit NULL. P>
Tout d'abord, vous pouvez essayer d'imprimer Nous ne faisons pas Connaître le contenu de votre Lorsque vous exécutez: p> in texte code> juste avant d'appeler
parler () code> méthode pour vérifier quelle valeur a été transmise à la méthode.
doInfbackground () code> méthode, mais peut-être que vous passez ici mal de valeur? Dans votre
doinbackground () code> Méthode, vous devez retourner la valeur qui sera transmise à
Onpostexecute () code>. p>
URL code> in
DOInfbackground code> est le mécanisme Java Varargs, donc
URLS [0] code> est le premier argument de transmet à
exécuté () code>. p>
doInbackground code>: p>
URLS [0] code> =>
"AAA" code> li>
URLS [1] code> =>
"BBB" code> li>
URLS [2] code> =>
"CCC" code> li>
ul>
Vous pouvez essayer de retourner le premier paramètre fort> (donc
URL [0] code>): H2>
@Override
protected String doInBackground(String... urls) {
// return value from parmeters
return urls[0];
}
Le problème s'est avéré être la taille de caractère maximale pouvant être transmise au texte sur le moteur de la parole est d'environ 4000 si votre chaîne contient plus de 4000 caractères, il ne fonctionnera pas dans l'ordre Pour le faire fonctionner Ajoutez un setonTutestanceProgressListenener et une boucle de boucle votre chaîne à l'aide de Ondone () P> // working code
int char_count = 3000;
int start = 0;
int end = char_count;
HashMap<String, String> map = new HashMap<String, String>();
map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "UniqueID");
tts.speak(text.substring(start, end), TextToSpeech.QUEUE_ADD, map);
tts.setOnUtteranceProgressListener(new UtteranceProgressListener() {
@Override
public void onStart(String s) {}
@Override
public void onDone(String s) {
start = end;
end+= char_count;
end = text.indexOf(" ", end);
if(end >= text.length() || end == -1){
end = text.length();
}if(start >= text.length()){
System.out.println("end of text");
}else {
speek();
}
}
@Override
public void onError(String s) {}
});
Utilisez simplement des déclarations de journal pour vérifier que l'ordre d'exécution et le contenu de vos variables sont ce que vous attendez.
Afficher
doInfbackground () code> 's et
b.Getstring () code> s.