2

您如何读取数据,即在 Android 中将简单的文本字符串转换为语音(语音)?

是否有一个API可以让我做这样的事情:

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

5 回答 5

3

使用 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();
    }
}
于 2009-11-20T02:21:45.010 回答
2

给你使用库的教程 最大的缺点是它需要 SD 卡来存储声音。

于 2009-07-22T18:31:03.617 回答
1

可以在“Pro Android 2 book”中找到一个很好的 tts 使用示例。看看他们第 15 章的源代码。

于 2010-03-13T12:37:30.753 回答
0

有第三方文字转语音引擎。有传言说 Donut 包含一个文本转语音引擎,这表明它将在未来的 Android 版本中可用。不过,除此之外,Android 中没有内置任何用于文本转语音的功能。

于 2009-07-21T21:36:00.717 回答
0

Donut 有这个:参见 android.speech.tts 包。

于 2009-07-25T23:44:48.400 回答