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

我正在用Java开发一个简单的文本到语音程序。我已经决定使用FreeTTS,但是声音并不是我真正想的,我一直想使用女性声音。因此,我开始四处张望,并决定使用MBROLA更改文本到语音程序的声音。

我读到了“FreeTTS可以使用MBROLA声音” ,但是我到处搜索,找不到清晰的指南来设置MBROLA,以及需要哪些文件。关于MBROLA的许多论坛都与FreeTTS一起工作,但是似乎也没有一个人知道自己在做什么。

这样的问题:

  • 需要下载什么文件?
  • 是否将这些步骤包括到我的程序中?
  • 使用MBROLA声音的简单FreeTTS示例?
  • 最佳答案

    回答以上问题:

    1.需要下载哪些文件?

  • 包含所有库的FreeTTS (freeTTS 1.2.2-bin)-download here
  • MBROLA zip文件夹mbr301d.zip
  • 声音,可以在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
  • en_us.jar
  • freetts.jar
  • freetts-jsapi10.jar
  • mbrola.jar

  • 1.2 MBROLA zip文件夹将包括:
  • mbrola.exe
  • mbr302a(文件夹)
  • readme.txt

  • 1.3 声音是压缩文件夹,其中包括一个名为“ us1 ”或“ af1 ”的文件夹。

    2.将这些步骤包括到我的程序中的步骤?

    注意:我也在计算机上也安装了MBROLA Tooklit,但是我不确定它是否对程序有影响,但是我怀疑没有。编辑:我已经测试过,看看是否需要MBROLA工具包与FreeTTS一起运行MBROLA,事实证明它不是必需的。
  • 提取freetts-1.2.2-bin
  • 将库复制到您的项目中,并包括在构建路径中
  • 解压缩mbr301d.zip文件夹
  • 将'mbr301d'重命名为'mbrola'
  • 将声音解压缩到名为“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文件在计算机上的位置,并且在没有将属性指向正确位置的情况下,您将收到此错误。

    对于出现此错误的NON-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现在应该一起工作!此代码是从我的计算机上直接复制的,并经过测试,然后放在此处。

    08-06 13:43