1

私は 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/

4

1 に答える 1

4

これは私も調べていたものでした。この非常に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の例を持っています。うまくいけば、これが役に立ちます。

于 2016-11-15T09:39:19.193 に答える