-6
votes

Ne peut pas effectuer de texte à la conversion de la parole dans Android

Lorsque je défini tts.speak , à l'aide de la variable de chaîne 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 xxx


2 commentaires

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 () 's et b.Getstring () s.


3 Réponses :


3
votes

Sans votre journal ni votre appel de votre fonction, nous ne pouvons pas vraiment comprendre ce qui ne va pas.

Ma première hypothèse serait que texte serait éventuellement null (ou vide si vous ne voyez aucune NPE dans vos journaux), Etir déclenchant une exception dans la méthode 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 fonction .

Dans ce cas, il serait possible que le paramètre dans onpostexecute soit NULL.

Vous voudrez peut-être aussi vérifier Cette documentation pour voir s'il existe d'autres limitations.


0 commentaires

2
votes

Tout d'abord, vous pouvez essayer d'imprimer texte code> juste avant d'appeler parler () code> méthode pour vérifier quelle valeur a été transmise à la méthode.

Nous ne faisons pas Connaître le contenu de votre 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>

Lorsque vous exécutez: p> xxx pré>

in 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];
    }
    


0 commentaires

-4
votes

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 xxx pré>

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) {}
                    });


0 commentaires