MBROLA голоса с FreeTTS - Windows
Использование голосов MBROLA в программе Java с FreeTTS...
Я работаю над простой программой преобразования текста в речь на Java. Я решил использовать FreeTTS, но голоса не совсем то, о чем я думал, и я все равно хотел использовать женский голос. Поэтому я начал осматриваться и решил, что буду использовать MBROLA, чтобы изменить голос моей программы преобразования текста в речь.
Я читал, что "FreeTTS может использовать голоса MBROLA", но я искал везде и не мог найти четкого руководства, как настроить MBROLA и какие файлы необходимы для этого. Есть много форумов по MBROLA, работающих вместе со FreeTTS, однако также кажется, что никто из людей не имеет ни малейшего представления о том, что они делают.
Итак, вопросы:
- Какие файлы нужно скачать?
- Шаги, чтобы включить их в мою программу?
- Простой пример FreeTTS с использованием голосов MBROLA?
3 ответа
Ответы на вопросы выше:
1. Какие файлы нужно скачать?
- FreeTTS со всеми библиотеками (freeTTS 1.2.2-bin) - скачать здесь
- MBROLA zip-папка mbr301d.zip
- Голоса, которые можно найти на сайте MBROLA
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. ZIP-папка MBROLA будет содержать:
- mbrola.exe
- mbr302a (папка)
- readme.txt
1.3 Голоса - это сжатые папки, в которые входит одна папка с именем " us1 " или " af1 " и т. Д.
2. Как включить их в мою программу?
ПРИМЕЧАНИЕ. У меня на компьютере также была установлена программа MBROLA Tooklit, однако я не уверен, оказывает ли она влияние на программу, но подозреваю, что это не так. РЕДАКТИРОВАТЬ: я проверил, чтобы увидеть, нужен ли набор инструментов MBROLA для запуска MBROLA вместе с FreeTTS, и оказывается, что он не нужен.
- Извлечь Фреэттс-1.2.2-бин
- Скопируйте библиотеки в свой проект и включите в путь сборки
- Разархивируйте папку mbr301d.zip
- Переименуйте mbr301d в mbrola
- Разархивируйте голоса в папку, которую вы назвали "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 находятся на вашем компьютере, и без указания свойства на правильное местоположение вы получите эту ошибку.
Пользователям NON-MBROLA, которые получают эту ошибку: просто удалите mbrola.jar из библиотек, на которые есть ссылки, если вы используете только FreeTTS
Чтобы установить 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 теперь должны работать вместе! Этот код был скопирован прямо с моего компьютера и был протестирован, прежде чем поместить его здесь.
Благодаря ответам на этом форуме я наконец-то смог заставить его работать. На окнах 10; Я сделал следующие шаги, чтобы заставить его работать:
- Загрузите библиотеки freeTTS и включите их в мой проект Java в eclipse.
- Скачайте mbr301d.zip, распакуйте его в папку с именем mbrola в моем проекте
- Загрузите базу данных mbrola для us1, us2, us3 и en1 с http://www.tcts.fpms.ac.be/synthesis/mbrola/mbrcopybin.html
- Извлеките загруженные на предыдущем шаге голосовые БД непосредственно в папку mbrola - не меняйте имена папок.
- включите следующие фрагменты кода, чтобы использовать его:
Примечание: если имя вашей голосовой папки БД - us1; тогда вы должны добавить его выше как "mbrola_us1"; если это en1, то это должно быть "mbrola_en1". Это действительно помогло мне.System.setProperty("mbrola.base", "ABSOLUTE_PATH_TO_mbrola_directory_ending_with_/"); voiceManager = VoiceManager.getInstance(); voice = voiceManager.getVoice("mbrola_us1");
Пожалуйста, найдите рабочий пример здесь:
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";
}