我写了一个小程序,该程序应该只用Java进行文本到语音转换。
我的类(class)看起来像这样:
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>
除了声音,一切都在那里。根据我的阅读,我认为FreeTTS中应包含“kevin16”。有什么想法如何继续吗?如何添加声音?我也发现了有关
MBROLA
的东西,但是这对我来说还变得更加不清楚:/谢谢你的帮助。
最佳答案
我有完全一样的问题。当我尝试调用voiceManager.getVoices()
时,我得到的是空列表。问题是,未设置freetts.voices
系统属性。因此,添加以下行可解决我的问题:
System.setProperty("freetts.voices", "com.sun.speech.freetts.en.us.cmu_us_kal.KevinVoiceDirectory");
现在,我可以使用 kevin 或 kevin16 声音了。
希望这可以帮助。