Question

Comment pouvez-vous lire les données, à savoir convertir des chaînes de texte simple à la voix (la parole) dans Android?

Y at-il une API où je peux faire quelque chose comme ceci:

TextToVoice speaker = new TextToVoice();
speaker.Speak("Hello World");
Était-ce utile?

La solution

Ici, vous allez . Un tutoriel sur l'utilisation de la bibliothèque Le grand inconvénient est qu'il nécessite une carte SD pour stocker les voix.

Autres conseils

Utilisation du TTS est un peu plus compliqué que prévu, mais il est facile d'écrire un wrapper qui vous donne l'API que vous désirez.

Il y a un certain nombre de questions que vous devez surmonter pour le faire fonctionner bien.

Ils sont:

  1. Toujours définir la UtteranceId (ou bien OnUtteranceCompleted ne sera pas appelé)
  2. Réglage OnUtteranceCompleted auditeur (seulement après le discours système est correctement initialisé)

public class TextSpeakerDemo implements OnInitListener
 {
    private TextToSpeech tts;
    private Activity activity;

    private static HashMap DUMMY_PARAMS = new HashMap();
    static 
    {
        DUMMY_PARAMS.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "theUtId");
    }
    private ReentrantLock waitForInitLock = new ReentrantLock();

    public TextSpeakerDemo(Activity parentActivity)
    {
        activity = parentActivity;
        tts = new TextToSpeech(activity, this);       
        //don't do speak until initing
        waitForInitLock.lock();
    }

    public void onInit(int version)
    {        //unlock it so that speech will happen
        waitForInitLock.unlock();
    }  

    public void say(WhatToSay say)
    {
        say(say.toString());
    }

    public void say(String say)
    {
        tts.speak(say, TextToSpeech.QUEUE_FLUSH, null);
    }

    public void say(String say, OnUtteranceCompletedListener whenTextDone)
    {
        if (waitForInitLock.isLocked())
        {
            try
            {
                waitForInitLock.tryLock(180, TimeUnit.SECONDS);
            }
            catch (InterruptedException e)
            {
                Log.e("speaker", "interruped");
            }
            //unlock it here so that it is never locked again
            waitForInitLock.unlock();
        }

        int result = tts.setOnUtteranceCompletedListener(whenTextDone);
        if (result == TextToSpeech.ERROR)
        {
            Log.e("speaker", "failed to add utterance listener");
        }
        //note: here pass in the dummy params so onUtteranceCompleted gets called
        tts.speak(say, TextToSpeech.QUEUE_FLUSH, DUMMY_PARAMS);
    }

    /**
     * make sure to call this at the end
     */
    public void done()
    {
        tts.shutdown();
    }
}

Un bon exemple de travail de tts utilisation peut être trouvée dans le « Pro Android 2 livre ». Jetez un oeil à leur code source pour le chapitre 15.

Il existe des moteurs texte-parole tiers. La rumeur veut que Donut contient un moteur de synthèse vocale, ce qui suggère qu'il sera disponible dans les futures versions d'Android. Au-delà, cependant, il n'y a rien construit dans Android pour le texte à la parole.

Donut a ceci: voir le paquet android.speech.tts

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top