首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java -将效果应用于MaryTTS语音

Java -将效果应用于MaryTTS语音
EN

Stack Overflow用户
提问于 2016-10-19 14:32:53
回答 1查看 2K关注 0票数 2

为此,我使用了一组名为“MaryTTS实际上更多的text to speech”的Java库来转换text to speech,为此使用了以下代码:

代码语言:javascript
复制
public class TextToSpeech {

    private AudioPlayer     tts;
    private MaryInterface   marytts;
    Map<Integer,String>     numbersMap  = new HashMap<>();

    /**
     * Constructor
     */
    public TextToSpeech() {
        try {
            marytts = new LocalMaryInterface();

            // Available voices
        Voice.getAvailableVoices().stream().forEach(System.out::println);
            marytts.setVoice("cmu-slt-hsmm");

        } catch (MaryConfigurationException ex) {
            Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
        }

        numbersMap.put(1, "one");
        numbersMap.put(2, "two");
        numbersMap.put(3, "three");
        numbersMap.put(4, "four");
        numbersMap.put(5, "five");
        numbersMap.put(6, "six");
        numbersMap.put(7, "seven");
        numbersMap.put(8, "eight");
        numbersMap.put(9, "nine");
    }

    public void setVoice(String voice) {
        marytts.setVoice(voice);
    }

    /**
     * Transform number to speech
     * 
     * @param number
     */
    public void speak(int number) {
        speak(numbersMap.get(number));
    }

    /**
     * Transform text to speech
     * 
     * @param text
     */
    public void speak(String text) {

        // Stop the previous player
        if (tts != null)
            tts.cancel();

        try (AudioInputStream audio = marytts.generateAudio(text)) {

            // Player is a thread(threads can only run one time) so it can be
            // used has to be initiated every time
            tts = new AudioPlayer();
            tts.setAudio(audio);
            tts.setDaemon(true);
            tts.start();

        } catch (SynthesisException ex) {
            Logger.getLogger(getClass().getName()).log(Level.WARNING, "Error saying phrase.", ex);
        } catch (IOException ex) {
            Logger.getLogger(getClass().getName()).log(Level.WARNING, "IO Exception", ex);
        }
    }
}

问题:

我正在搜索文档,但这是一种混乱,我对此非常陌生。

有用的链接:

http://mary.dfki.de/javadoc/index.html

http://mary.dfki.de/download/index.html

https://github.com/marytts/marytts

我想知道如何将效果应用于我使用的声音.

我什么意思?

看一下这个现场演示http://mary.dfki.de:59125/

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-15 09:39:19

我也在调查这件事。我遇到了这样的问题,但我没有找到太多的活跃的例子。经过一些尝试和错误,我发现了一些事情。

首先,为了获得所有可能的效果,您可以运行以下命令:

代码语言:javascript
复制
for (AudioEffect e : AudioEffects.getEffects()) {
    System.out.println(e.getName());
    System.out.println(e.getHelpText());
    System.out.println();
}

这将打印出可以设置的名称和各种参数。然后,您可以像这样设置字符串:

代码语言:javascript
复制
LocalMaryInterface mary = new LocalMaryInterface();
mary.setAudioEffects("Robot(amount:100)+Stadium(amount:200)");

然而,他们的意图似乎是让人们这样使用它:

代码语言:javascript
复制
RobotiserEffect robotiserEffect = new RobotiserEffect();
robotiserEffect.setParams("amount:100");
StadiumEffect stadiumEffect = new StadiumEffect();
stadiumEffect.setParams("amount:100");
mary.setAudioEffects(robotiserEffect.getFullEffectAsString() + '+' + 
    stadiumEffect.getFullEffectAsString());

还有一个名为EffectsApplier的类,它看起来应该能够处理和优化您所拥有的效果的顺序,但不幸的是,我还没有时间进一步研究这个问题。

我有一个工作的github示例,希望这能帮上忙。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40134409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档