如何控制 Android TTS 播放音频的方式

How can I control how Android TTS plays audio

我有一个 class,它使用 Android TTS API 将文本转录为音频。我可以控制音调和速度;但我注意到引擎需要一个文本字符串和一个散列对象。我注意到有些单词发音太快而不易识别,而且变形似乎太不自然。有什么办法可以控制这两件事吗?可能通过 HashMap?以下是我使用引擎的方式:

    mTts = new TextToSpeech(Globals.context, this); // context, listener
}

@Override
public void onInit(int status) {
    HashMap<String, String> myHashRender = new HashMap();
    myHashRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, speech);
    mTts.setPitch(0.8f);
    mTts.setSpeechRate(0.6f);
    mTts.synthesizeToFile(speech, myHashRender, fileOutPath);
    while (mTts.isSpeaking()) try {
        Thread.sleep(100);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    mTts.stop();
    mTts.shutdown();

Google TTS does not currently support changing inflection, nor does it support inline prosody tags as defined in SSML. - alanv

Google TTS 目前不支持该功能,但您可以执行以下操作:在解析文本期间,您可以更改部分文本以获得所需的语调和词形变化。

例如,如果您遇到单词 'Hey',您可以在将其发送到 TTS 引擎以获得不同的发音之前将其即时重写为 'Heeeey'。

它不是很好,但它是一种解决方法。

Google TTS 目前不支持改变词形变化,也不支持 SSML 中定义的内联韵律标签。虽然您可以设置一些参数,但其中 none 控制变形或每个单词的韵律。

可能还有其他引擎支持这些功能。例如,eSpeak 确实支持 SSML 标签,并且在 Play 商店中有一个可用的 Android 端口。