MBROLA与配音的FreeTTS - 视窗MBROLA与配音的FreeTTS - 视窗(MBR

2019-05-11 19:42发布

在一个的FreeTTS Java程序使用MBROLA的声音......

我工作在一个简单的Java 文本到语音程序。 我已经决定使用的FreeTTS,但声音不是真正的我在想什么,我一直在寻找这样用一个女性的声音。 于是,我开始四处寻找,并决定我会用MBROLA改变我的文本到语音程序的声音。

我读的是“可以的FreeTTS使用MBROLA声音”,但我到处找,但没有找到一个明确的指导如何设置MBROLA了,需要做的还等什么文件。 上有MBROLA许多论坛一起工作的FreeTTS,但它似乎也没有任何人有任何想法,他们在做什么。

所以问题:

  1. 哪些文件需要下载?
  2. 步骤包括这些到我的程序?
  3. 使用MBROLA声音简单例子的FreeTTS?

Answer 1:

回答上述问题:

1.哪些文件需要下载?

  1. 与所有的库(1.2.2的FreeTTS彬) 的FreeTTS - 在这里下载
  2. MBROLA ZIP文件夹mbr301d.zip
  3. 可在上找到声音 MBROLA网站

1.1 的FreeTTS(在发现的FreeTTS-1.2.2滨/的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拉链夹将包括:

  • mbrola.exe
  • mbr302a(文件夹)
  • readme.txt文件

1.3 声音是包括名为“US1”“AF1”等的单个文件夹的文件夹压缩


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

注:我有MBROLA工具包创建我的计算机上安装过,但我不能确定它是否有该程序的影响,但我怀疑,事实并非如此。 编辑:我已经测试,看看是否需要MBROLA工具箱运行MBROLA旁边的FreeTTS,并且事实证明是不需要的。

  1. 提取的FreeTTS-1.2.2斌
  2. 库复制到您的项目,包括在构建路径
  3. 解压文件夹mbr301d.zip
  4. 重命名“mbr301d”到“mbrola”
  5. 解压缩的声音给你一个名为“mbrola”的文件夹

完成上述操作后,您mbrola文件夹应该是这样的:

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

你可以把这个文件夹中所有的语言,他们只是从您的Java程序调用。


3.简单的例子的FreeTTS使用MBROLA声音?

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

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")

下面是一个简单的例子来使用MBROLA的声音在你的程序的FreeTTS。 请注意,上述步骤之前必须完成,这将工作。 简单地改变声音的名称为“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现在一起工作! 此代码是从我的电脑右键复制,并把它放下来之前已经过测试。



Answer 2:

由于在这个论坛的反应,我终于可以让它工作。 在Windows 10; 我进行下面的步骤,使其工作:

  1. 下载图书馆的FreeTTS并将它们包括在Eclipse我的Java项目。
  2. 下载mbr301d.zip我的项目中,一个文件夹中提取它命名mbrola
  3. 下载US1,US2,US3和en1 mbrola数据库从http://www.tcts.fpms.ac.be/synthesis/mbrola/mbrcopybin.html
  4. 提取直接在mbrola文件夹上一步中下载的声音DB拉链 - 不改变文件夹的名称。
  5. 包括下面的代码片段使用它:
     System.setProperty("mbrola.base", "ABSOLUTE_PATH_TO_mbrola_directory_ending_with_/"); voiceManager = VoiceManager.getInstance(); voice = voiceManager.getVoice("mbrola_us1"); 
    注意: 如果你的声音DB文件夹名称为US1; 那么你应该在上面添加为“mbrola_us1”; 如果是EN1,那么它应该是“mbrola_en1”。 这实际上已经做的伎俩我。


Answer 3:

请找到这里工作示例:

https://github.com/sunrise-projects/sphinx4/tree/glass

 package com.sunriseprojects.freetts.demo; import java.beans.PropertyVetoException; import java.util.Locale; import javax.speech.AudioException; import javax.speech.Central; import javax.speech.EngineException; import javax.speech.EngineStateError; import javax.speech.synthesis.Synthesizer; import javax.speech.synthesis.SynthesizerModeDesc; import javax.speech.synthesis.Voice; public class SpeechUtils { SynthesizerModeDesc desc; Synthesizer synthesizer; Voice voice; public void init(String voiceName) throws EngineException, AudioException, EngineStateError, PropertyVetoException { if (desc == null) { //default // System.setProperty("freetts.voices", // "com.sun.speech.freetts.en.us.cmu_us_kal.KevinVoiceDirectory"); //have to be setup System.setProperty("freetts.voices", "de.dfki.lt.freetts.en.us.MbrolaVoiceDirectory"); desc = new SynthesizerModeDesc(Locale.US); Central.registerEngineCentral("com.sun.speech.freetts.jsapi.FreeTTSEngineCentral"); synthesizer = Central.createSynthesizer(desc); synthesizer.allocate(); synthesizer.resume(); SynthesizerModeDesc smd = (SynthesizerModeDesc) synthesizer .getEngineModeDesc(); Voice[] voices = smd.getVoices(); Voice voice = null; for (int i = 0; i < voices.length; i++) { if (voices[i].getName().equals(voiceName)) { voice = voices[i]; break; } } synthesizer.getSynthesizerProperties().setVoice(voice); } } public void terminate() throws EngineException, EngineStateError { synthesizer.deallocate(); } public void doSpeak(String speakText) throws EngineException, AudioException, IllegalArgumentException, InterruptedException { synthesizer.speakPlainText(speakText, null); synthesizer.waitEngineState(Synthesizer.QUEUE_EMPTY); } public static void main(String[] args) throws Exception { System.setProperty("mbrola.base", "C:\\lnx1\\home\\ggon\\git-projects\\mbrola"); SpeechUtils su = new SpeechUtils(); //have to be setup on your env su.init("mbrola_us1"); //default //su.init("kevin16"); //su.init("kevin"); //su.doSpeak("Hello world!"); su.doSpeak(SAMPLE); su.terminate(); } final static String SAMPLE = "Wiki said, Floyd Mayweather, Jr. is an American professional boxer. He is currently undefeated as a professional and is a five-division world champion, having won ten world titles and the lineal championship in four different weight classes"; } 



文章来源: MBROLA voices with FreeTTS - Windows