【问题标题】:How to Change voice of TTS for Java如何更改 TTS for Java 的声音
【发布时间】:2014-01-03 13:48:14
【问题描述】:

我正在使用 FreeTTS 在我的 java 程序中说出一些文本。我想在其中嵌入 MBROLA Voices。我关注了the instructions,但我卡在这里:

为 MBROLA 启用 FreeTTS 支持

要启用对 MBROLA 的 FreeTTS 支持,只需将 mbrola/mbrola.jar 复制到 lib/mbrola.jar。然后,无论何时运行任何 FreeTTS 应用程序,都将“mbrola.base”目录指定为系统属性:

java -Dmbrola.base=/home/jim/mbrola -jar bin/FreeTTSHelloWorld.jar mbrola_us1

在教程中,他们正在做的是,他们在 cmd 中键入这一行,以使 jar 文件以他们告诉的声音(us1)说话,但我要做的是,我已经有一个 java 程序,我想改变它说话的声音。 如何做到这一点?

我尝试更改虚拟机选项,但没有帮助。

注意:我使用的是 Netbeans IDE,而且我还有文件“FreeTTSHelloWorld.jar”

简而言之,我正在寻找关于如何在 java 中继续/将 MBROLA 语音添加到 FreeTTS 库中的清晰解释(对于新手)...

你说什么?我应该考虑将我的操作系统更改为 Ubuntu 以进行 Java 开发吗???

【问题讨论】:

标签: java windows netbeans freetts


【解决方案1】:

进入终端:-)这意味着你需要从命令行运行你的程序,here 是很好的教程如何做到这一点。

但我认为它也可以从 NetBeans 运行,转到您项目的 Properties,转到 Run 并将 -Dmbrola.base=/home/jim/mbrola 粘贴到 VM options。您当然需要在类路径上使用FreeTTSHelloWorld.jar(您可以通过Properties -> Libraries -> Add JAR/Folder 添加它)。

【讨论】:

  • “你当然需要类路径上的 FreeTTSHelloWorld.jar”是什么意思。 - 我想得到你
  • 正是“FreeTTSHelloWorld.jar”??
  • 这是一个你传递给你的命令的库,所以我猜你需要它来运行你的应用程序。
  • 当然,GUI 会帮你选择它:)
  • 我不能输入整个“java -Dmbrola.base=/home/jim/mbrola -jar bin/FreeTTSHelloWorld.jar mbrola_us1 yourJavaClass”,而不仅仅是“-Dmbrola.base=/home/jim/ mbrola”??
【解决方案2】:

-D 用于为您的 java 程序提供系统属性。所以你需要在运行你的java程序时提供它:

java -Dmbrola.base=/home/jim/mbrola -jar bin/FreeTTSHelloWorld.jar mbrola_us1 yourJavaClass

如果您使用的是 Eclipse 等 IDE,那么您可以通过以下方式执行相同操作:

运行 -> 运行配置,选择项目,第二个选项卡:“参数”。 顶框用于您的程序,底框用于 VM 参数,例如 -Dmbrola.base=/home/jim/mbrola -jar bin/FreeTTSHelloWorld.jar mbrola_us1

【讨论】:

  • @DakshShah 按照我在 Eclipse 中提到的步骤进行操作
  • Petr Mensik 说我只需要添加“-Dmbrola.base=/home/jim/mbrola”.. 怎么办?
【解决方案3】:

您是否尝试过类似的方法:

public static void main(String[] args) {
    System.setProperty("mbrola.base", "your/mbrola/base/directory");
    VoiceManager voiceManager = VoiceManager.getInstance();
    String voice = "mbrola_us1";
    Voice helloVoice = voiceManager.getVoice(voice);
    if (helloVoice == null) {
        Voice[] availableVoices = voiceManager.getVoices();
        List<String> voiceList = new ArrayList<>();
        for (Voice v : availableVoices) voiceList.add(v.getName());
        System.out.println("Not a valid voice: " + voice + "\nValid voices: " + voiceList);
        return;
    }
    helloVoice.allocate();

    /* Synthesize speech. */
    helloVoice.speak("Thank you for giving me a voice. " + "I'm so glad to say hello to this world.");

    /* Clean up and leave. */
    helloVoice.deallocate();
}

【讨论】:

  • 这似乎有点复杂,所以我将建立一个新的单独项目先测试一下;所以我必须根据 FreeTTS 创建一个新项目,确保 FreeTTS 工作,然后按照教程,下载声音和 MBROLA 以及所有然后复制粘贴此代码?
  • @DakshShah 您可以将该代码插入现有的 Java 程序中 - if 块不是必需的,如果没有找到 mbrola_us1,它就在那里,向您展示其他可用的声音。请注意,我从未使用过该库或测试过该代码,但根据他们的教程,它应该可以工作。
  • 你能帮我聊天吗?如果你有空
  • @DakshShah 在您链接的教程中,它是“放置 MBROLA 二进制和 MBROLA 语音数据库的基本目录”,他们称之为 /home/jim/mbrola。所以无论你把这些文件放在哪里。
  • 它显示错误:运行:无法在 C:\Program Files (x86)\Mbrola Tools 验证任何 MBROLA 声音 确保使用 mbrola.base 系统属性完全指定 MBROLA 目录的路径. embed.Embed.main(Embed.java:20) Java 结果中的线程“main”java.lang.NullPointerException 中的异常:1
猜你喜欢
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 2022-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多