我写了一个小程序,该程序应该只用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 声音了。

希望这可以帮助。

09-07 13:30