Comment faire une pause android.de la parole.tts.Synthèse vocale?
Je suis en train de jouer de texte avec android TTS - android.speech.tts.TextToSpeech
J'utilise: TextToSpeech.speak
de parler et de .stop
arrêter. Est-il un moyen pour mettre en pause le texte aussi?
Vous devez vous connecter pour publier un commentaire.
Le TTS SDK n'ont pas de pause de la fonctionnalité, que je sache. Mais vous pouvez utiliser
synthesizeToFile()
de créer un fichier audio qui contient le TTS de sortie. Ensuite, vous devez utiliser une MediaPlayer objet de lecture, de pause et d'arrêter la lecture du fichier. Selon la longueur de la chaîne de texte est, il pourrait prendre un peu plus de temps pour de l'audio produit parce que lasynthesizeToFile()
la fonction serait de compléter la totalité du fichier avant de pouvoir jouer, mais ce délai devrait être acceptable pour la plupart des applications.J'ai utilisé le fractionnement de la chaîne et utilisé playsilence() comme ci-dessous:
Vous pouvez faire le TTS pause entre les phrases, ou n'importe où vous le souhaitez en ajoutant jusqu'à trois points (".") tous ont été suivis par un seul espace " ". L'exemple ci-dessous a un long temps de pause au début, et encore avant le corps du message. Je ne suis pas sûr que c'est ce que vous après si.
Si vous omettez l'espace après la dernière période, il (ou peuvent) pas fonctionner comme prévu.
En l'absence d'une option pause, vous pouvez ajouter du silence pour la durée de quand vous voulez retarder le Moteur de synthèse de parole. Bien sûr, cela devrait être prédéterminée "pause", et n'aidera pas à inclure les fonctionnalités d'un bouton de pause, par exemple.
Pour API < 21 : public int playSilence (long durationInMs, int queueMode, HashMap params)
Pour > 21 : public int playSilentUtterance (long durationInMs, int queueMode, Chaîne utteranceId)
N'oubliez pas d'utiliser Synthèse vocale.QUEUE_ADD plutôt que Synthèse vocale.QUEUE_FLUSH sinon il va vider le déjà commencé les discours.
Je n'ai pas encore essayé, mais j'ai besoin de faire la même chose. Ma pensée est d'abord de diviser votre texte du discours en un tableau de mots.
Puis créer une fonction récursive, qui joue le prochain mot après le mot courant est fini, tout en gardant un compteur du mot courant.
diviser la
messages
en parties et écouter les dernièresutterance
en utilisantonutteranceprogress
auditeurIl semble que si vous mettez un point après un mot ET le prochain mot avec une majuscule, tout comme une nouvelle phrase, comme ceci:
après nous sommes arrivés à la maison. Nous avons mangé le dîner.
les "à la maison. On va alors avoir une pause dans il.
J'ai utilisé une approche différente.
Kotlin code:
Aussi, une fuite de devis (\") semble l'avoir pause un peu comme le bien - au moins, si vous vous mettez autour d'un mot, il ajoute de l'espace autour de la parole.
Cette solution n'est pas parfaite, mais une alternative à @Aaron C de la solution peut être de créer un texte personnalisé à la parole de la classe, comme ci-dessous. Cette solution peut fonctionner assez bien, si votre texte est relativement court et mots prononcés par minute est assez précise pour la langue que vous utilisez.