Java — Применить эффекты к голосу MaryTTS

#java #text-to-speech #marytts

#java #преобразование текста в речь #marytts

Вопрос:

Я использую набор библиотек на Java, называемых ( MaryTTS [на самом деле их гораздо больше]) для преобразования text to speech для этой цели используется приведенный ниже код:

 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

Ответ №1:

Это было то, что я тоже изучал. Я наткнулся на этот самый вопрос SO, но я не нашел там слишком много активных примеров. Методом проб и ошибок я кое-что выяснил.

Сначала, чтобы просто получить все возможные эффекты, вы можете запустить это:

 for (AudioEffect e : AudioEffects.getEffects()) {
    System.out.println(e.getName());
    System.out.println(e.getHelpText());
    System.out.println();
}
  

При этом выводится имя и различные параметры, которые вы можете установить. Затем вы можете установить строку следующим образом:

 LocalMaryInterface mary = new LocalMaryInterface();
mary.setAudioEffects("Robot(amount:100) Stadium(amount:200)");
  

Однако, похоже, что они намерены, чтобы люди использовали его таким образом:

 RobotiserEffect robotiserEffect = new RobotiserEffect();
robotiserEffect.setParams("amount:100");
StadiumEffect stadiumEffect = new StadiumEffect();
stadiumEffect.setParams("amount:100");
mary.setAudioEffects(robotiserEffect.getFullEffectAsString()   ' '   
    stadiumEffect.getFullEffectAsString());
  

Существует также класс с именем EffectsApplier , который, похоже, должен быть способен обрабатывать и оптимизировать порядок имеющихся у вас эффектов, но, к сожалению, у меня не было времени углубляться в это.

У меня есть рабочий пример github, надеюсь, это поможет.

Комментарии:

1. Большое вам спасибо !!, я попробую все ваши примеры… тогда я отмечу это как ответ, если ничего не пойдет не так :). Я хочу спросить кое-что еще.. Как вы запускаете примеры без библиотек? Я новичок в этом, я имею в виду, что вы берете их из Интернета, используя Maven или что-то в этом роде? Потому что я скачал их и добавил в проект в виде файлов jar…

2. AudioPlayer Библиотека, похоже, немного глючит, поэтому я внедрил новую версию. Если вам интересно, вы можете найти это здесь: github.com/goxr3plus/Java-Text-To-Speech-Tutorial/blob/master /…

3. Да, я получил библиотеку с maven. Если вы посмотрите на мой проект на github, вы можете увидеть мой POM-файл здесь . Обратите внимание на репозитории и зависимости.

4. Хм, я прочитал файл POM, поэтому для запуска проекта требуется подключение к Интернету :)?

5. «Лучше» зависит от того, что вам нужно. Если вам просто нужно управление зависимостями, то любой из них будет работать произвольно. Посмотрите на compairisons и используйте инструмент, который соответствует вашим потребностям: gradle.org/maven_vs_gradle