Android речь - как вы можете читать текст в Android? - PullRequest
2 голосов
/ 21 июля 2009

Как вы можете читать данные, то есть преобразовывать простые текстовые строки в речь (речь) в Android?

Есть ли API, где я могу сделать что-то вроде этого:

TextToVoice speaker = new TextToVoice();
speaker.Speak("Hello World");

Ответы [ 5 ]

3 голосов
/ 20 ноября 2009

Использование TTS немного сложнее, чем вы ожидаете, но легко написать оболочку, которая предоставит вам желаемый API.

Есть ряд проблем, которые вы должны преодолеть, чтобы все заработало.

Это:

  1. Всегда устанавливайте UtteranceId (или еще OnUtteranceCompleted не будет называется)
  2. настройка OnUtteranceCompleted слушатель (только после выступления система правильно инициализирована)

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();
    }
}
2 голосов
/ 22 июля 2009

Вот, пожалуйста, . Учебник по использованию библиотеки Большой минус в том, что для хранения голосов требуется SD-карта.

1 голос
/ 13 марта 2010

Хороший рабочий пример использования tts можно найти в "Pro Android 2 book". Взгляните на их исходный код главы 15.

0 голосов
/ 26 июля 2009

Пончик имеет это: см. Пакет android.speech.tts.

0 голосов
/ 22 июля 2009

Существуют сторонние механизмы преобразования текста в речь. Ходят слухи, что Donut содержит движок преобразования текста в речь, предполагая, что он будет доступен в будущих версиях Android. Кроме этого, в Android нет ничего встроенного для преобразования текста в речь.

...