java - 带有 FreeTTS 的 MBROLA 语音 - Windows

标签 java eclipse text-to-speech freetts

在带有 FreeTTS 的 Java 程序中使用 MBROLA 语音...

我正在用 Java 开发一个简单的文本到语音程序。我决定使用 FreeTTS,但声音并不是我所想的那样,而且我一直在寻找使用女性声音的方法。所以我开始四处寻找,并决定使用 MBROLA 改变我的文本到语音程序的声音。

我读到“FreeTTS 可以使用 MBROLA 语音”,但我到处搜索,找不到关于如何设置 MBROLA 的明确指南,以及哪些文件是需要这样做。 MBROLA 上有许多与 FreeTTS 一起工作的论坛,但似乎没有人知道他们在做什么。

所以问题:

  1. 需要下载哪些文件?
  2. 将这些包含到我的程序中的步骤?
  3. 使用 MBROLA 语音的简单 FreeTTS 示例?

最佳答案

上述问题的答案:

1.需要下载哪些文件?

  1. FreeTTS 与所有库 (freeTTS 1.2.2-bin) - download here
  2. MBROLA 压缩文件夹 mbr301d.zip
  3. Voices 可以在 MBROLA website 上找到

1.1 FreeTTS(位于 freetts-1.2.2-bin/freetts-1.2/lib):

  • cmu_time_awb.jar
  • cmu_us_kal.jar
  • cmudict04.jar
  • cmulex.jar
  • cmutimelex.jar
  • zh_cn.jar
  • freetts.jar
  • freetts-jsapi10.jar
  • mbrola.jar

1.2 MBROLA 压缩文件夹将包括:

  • mbrola.exe
  • mbr302a (文件夹)
  • 自述文件.txt

1.3 Voices 是压缩文件夹,其中包含一个名为“us1”或“af1”等的文件夹。


2。将这些纳入我的计划的步骤?

注意:我有 MBROLA Tooklit也安装在我的电脑上,但是我不确定它是否对程序有影响,但我怀疑它没有。编辑:我已经测试过是否需要 MBROLA 工具包来与 FreeTTS 一起运行 MBROLA,结果证明不需要。

  1. 提取 freetts-1.2.2-bin
  2. 将库复制到您的项目并包含在构建路径中
  3. 解压 mbr301d.zip 文件夹
  4. 将“mbr301d”重命名为“mbrola”
  5. 将声音解压缩到您命名为“mbrola”的文件夹

完成此操作后,您的 mbrola 文件夹应如下所示:

  • [mbr302a] - 文件夹
  • [us1] - 文件夹(名称取决于您下载的语言)
  • mbrola.exe - 文件
  • readme.txt - 文件

您可以将所有语言放在这个文件夹中,它们将只从您的 Java 程序中调用。


3.使用 MBROLA 语音的简单 FreeTTS 示例?

我见过很多人遇到这个错误:

System property "mbrola.base" is undefined.  Will not use MBROLA voices.

mbrola.base 指的是您的 mbrola 文件在您的计算机上的位置,如果该属性没有指向正确的位置,您将收到此错误。

对于出现此错误的非 MBROLA 用户:如果您仅使用 FreeTTS,只需从引用的库中删除 mbrola.jar

要设置 mbrola.base 属性,请使用:

System.setProperty("mbrola.base", "C:/Path/to/your/mbrola")

下面是一个在 FreeTTS 程序中使用 MBROLA 语音的简单示例。请注意,必须先完成上述步骤,然后才能生效。如果未设置基数,仅将声音名称更改为“mbrola_us1”将不起作用!

package com.madmob.test;

import com.sun.speech.freetts.Voice;
import com.sun.speech.freetts.VoiceManager;

public class TestTTS {
    VoiceManager freettsVM;
    Voice freettsVoice;

    public TestTTS(String words) {
        // Most important part!
        System.setProperty("mbrola.base", "C:/mbrola");
        freettsVM = VoiceManager.getInstance();

        // Simply change to MBROLA voice
        freettsVoice = freettsVM.getVoice("mbrola_us1");

        // Allocate your chosen voice
        freettsVoice.allocate();
        sayWords(words);
    }

    public void sayWords(String words) {
        // Make her speak!
        freettsVoice.speak(words);
    }

    public static void main(String [] args) {
        new TestTTS("Hello there! Now M BROLA and Free T T S work together!");
    }
}

MBROLA 和 FreeTTS 现在应该可以协同工作了!此代码是直接从我的计算机复制的,并且在将其放在这里之前已经过测试。

关于java - 带有 FreeTTS 的 MBROLA 语音 - Windows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26236562/

相关文章:

java - 将 Action 重定向(使用拦截器)到其他 Action 时无法执行 Struts2 Action

java - 由 : java. lang.NullPointerException 引起:lock == null

eclipse - 在 Gradle 和 Eclipse 的 Checkstyle 插件中使用 ${samedir}

eclipse - 404 错误 Apache Tomcat 7 从 Eclipse Juno IDE 运行 JSP 文件

java - 如何在不获取 NPE 的情况下将节点弹出堆栈

java - Hibernate 给出无法确定类型错误

java - 是否可以在不使用 WindowBuilder 的情况下在 eclipse 中创建 GUI?

google-api - 什么是用于 TTS(文本到语音)的 Google Cloud API?

azure - 如何在 Azure Text to Speech 中自定义句子组之间的静默时间

heroku - 在 Heroku 上使用 Google 的 TextToSpeech API