【问题标题】:How can I control how Android TTS plays audio如何控制 Android TTS 播放音频的方式
【发布时间】:2015-04-07 19:51:27
【问题描述】:

我有一个使用 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 目前不支持变化的变形,也不支持SSML 中定义的内联韵律标签。其他 TTS 引擎可能支持这些功能,但我不知道。
  • 那为什么这个方法需要一个hashmap和一个字符串呢?
  • 您可以设置一些参数,但没有一个参数可以控制变形或逐字韵律。
  • @alanv 你认为你可以把它作为答案吗?

标签: android text-to-speech


【解决方案1】:

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

例如,如果您遇到“嘿”这个词,您会在将其发送到 TTS 引擎以获得不同的发音之前将其即时重写为“Heeeey”。

它并不漂亮,但它是一种解决方法。

【讨论】:

  • 您也可以考虑使用 TtsSpan 更改与某些单词关联的元数据。 IIRC,这确实允许您指定明确的发音。
  • 这是一个相当古老的话题。但谷歌 TTS 仍然不支持通过许多文档搜索的 SSML 标签。我尝试使用一些标签。只有 有效。我想知道它是否不支持 ssml 这个标签是如何工作的?
【解决方案2】:

Google TTS 目前不支持变化的变形,也不支持 支持SSML 中定义的内联韵律标签。 -alanvJun 5 at 20:30

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多