Java FreeTTS отсутствует голос
Я написал небольшую программу, которая должна просто делать текст в речь на Java.
Мой класс выглядит так:
import com.sun.speech.freetts.Voice;
import com.sun.speech.freetts.VoiceManager;
public class TalkResource {
private static final String VOICENAME_kevin = "kevin16";
private final String text; // string to speech
public TalkResource(String text) {
this.text = text;
}
public void speak() {
Voice voice;
VoiceManager voiceManager = VoiceManager.getInstance();
voice = voiceManager.getVoice(VOICENAME_kevin);
voice.allocate();
String newText = "example";
voice.speak(newText);
}
}
Я почти уверен, что синтаксис (и прочее) правильный, но мой voice
всегда null
,
Я предполагаю, что "kevin16" не найден и не включен в проект, но я просто не могу понять, как добавить какой-либо голос в мой проект. Чтобы получить зависимости, я использую maven
,
<dependency>
<groupId>net.sf.sociaal</groupId>
<artifactId>freetts</artifactId>
<version>1.2.2</version>
</dependency>
Все есть, кроме голосов. Из того, что я прочитал, я предполагаю, что "kevin16" должен быть включен в FreeTTS. Есть идеи, как продолжить? Как я могу добавить голос? Также я нашел кое-что о MBROLA
, но это только сделало вещи еще более неясными для меня:/
Спасибо за любую помощь.
4 ответа
У меня была точно такая же проблема. Я получал пустой список, когда пытался позвонить voiceManager.getVoices()
, Проблема была в том, freetts.voices
Системное свойство не было установлено. Итак, добавление следующей строки исправило мою проблему:
System.setProperty("freetts.voices", "com.sun.speech.freetts.en.us.cmu_us_kal.KevinVoiceDirectory");
Теперь я могу использовать голоса kevin или kevin16.
Надеюсь это поможет.
Вы когда-нибудь называли свой метод разговора где-нибудь?
Попробуйте что-то вроде этого:
import com.sun.speech.freetts.Voice;
import com.sun.speech.freetts.VoiceManager;
public class TalkResource {
private static final String VOICENAME_kevin = "kevin16";
public TalkResource(String sayText) {
Voice voice;
VoiceManager voiceManager = VoiceManager.getInstance();
voice = voiceManager.getVoice(VOICENAME_kevin);
voice.allocate();
voice.speak(sayText);
}
public static void main(String []args) {
new TalkResource("hello");
}
}
Я собираюсь попробовать и сказать, что вы более знакомы с серверами Maven, чем я, однако я также часто играю с голосами FreeTTS и MBROLA, и у меня никогда не было проблем с простой ссылкой на библиотеки freetts. в моем проекте.
Если вы хотите проверить MBROLA, у меня есть хорошая ветка о том, как установить его здесь
Это тоже не сработало для меня. Я использовал другой репозиторий (вы должны изменить свой файл POM). Я использовал следующие зависимости:
<dependencies>
<dependency>
<groupId>org.mobicents.external.freetts</groupId>
<artifactId>freetts</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>org.mobicents.external.freetts</groupId>
<artifactId>en_us</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>org.mobicents.external.freetts</groupId>
<artifactId>cmu_us_kal</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>org.mobicents.external.freetts</groupId>
<artifactId>cmu_time_awb</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>org.mobicents.external.freetts</groupId>
<artifactId>cmulex</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>org.mobicents.external.freetts</groupId>
<artifactId>cmutimelex</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>org.mobicents.external.freetts</groupId>
<artifactId>cmudict04</artifactId>
<version>1.2.2</version>
</dependency>
Для этого я использовал следующие репозитории:
<repository>
<id>sonatype-oss-public</id>
<url>https://oss.sonatype.org/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
Просто добавьте первую строку в ваш основной
введите код сюда
public static void main(String[] args) throws Exception{
// TODO code application logic here
System.setProperty("freetts.voices",
"com.sun.speech.freetts.en.us.cmu_us_kal.KevinVoiceDirectory");
String message = "Hello world! This is a test program";
Mehrunisa mehrunisa = new Mehrunisa(message);
mehrunisa.speak();
}