MBROLA voices with FreeTTS - Windows

前端 未结 3 531
无人及你
无人及你 2020-12-03 13:09

Using MBROLA voices in a Java program with FreeTTS...

I am working on a simple text-to-speech program in Java. I have decided to use FreeTT

3条回答
  •  一整个雨季
    2020-12-03 13:43

    Please find working example from here:

    https://github.com/sunrise-projects/sphinx4/tree/glass

    package com.sunriseprojects.freetts.demo;
    
    import java.beans.PropertyVetoException;
    import java.util.Locale;
    
    import javax.speech.AudioException;
    import javax.speech.Central;
    import javax.speech.EngineException;
    import javax.speech.EngineStateError;
    import javax.speech.synthesis.Synthesizer;
    import javax.speech.synthesis.SynthesizerModeDesc;
    import javax.speech.synthesis.Voice;
    
    public class SpeechUtils {
    	SynthesizerModeDesc desc;
    	Synthesizer synthesizer;
    	Voice voice;
    
    	public void init(String voiceName) throws EngineException, AudioException,
    			EngineStateError, PropertyVetoException {
    		if (desc == null) {
    			//default
    //			System.setProperty("freetts.voices",
    //					"com.sun.speech.freetts.en.us.cmu_us_kal.KevinVoiceDirectory");
    			
    			//have to be setup
    			System.setProperty("freetts.voices",
    					"de.dfki.lt.freetts.en.us.MbrolaVoiceDirectory");
    			desc = new SynthesizerModeDesc(Locale.US);
    			Central.registerEngineCentral("com.sun.speech.freetts.jsapi.FreeTTSEngineCentral");
    			synthesizer = Central.createSynthesizer(desc);
    			synthesizer.allocate();
    			synthesizer.resume();
    			SynthesizerModeDesc smd = (SynthesizerModeDesc) synthesizer
    					.getEngineModeDesc();
    			Voice[] voices = smd.getVoices();
    			Voice voice = null;
    			for (int i = 0; i < voices.length; i++) {
    				if (voices[i].getName().equals(voiceName)) {
    					voice = voices[i];
    					break;
    				}
    			}
    			synthesizer.getSynthesizerProperties().setVoice(voice);
    		}
    	}
    
    	public void terminate() throws EngineException, EngineStateError {
    		synthesizer.deallocate();
    	}
    
    	public void doSpeak(String speakText) throws EngineException,
    			AudioException, IllegalArgumentException, InterruptedException {
    		synthesizer.speakPlainText(speakText, null);
    		synthesizer.waitEngineState(Synthesizer.QUEUE_EMPTY);
    	}
    
    	public static void main(String[] args) throws Exception {
    		System.setProperty("mbrola.base", "C:\\lnx1\\home\\ggon\\git-projects\\mbrola");
    		SpeechUtils su = new SpeechUtils();
    		
    		//have to be setup on your env
    		su.init("mbrola_us1");
    		
    		//default
    		//su.init("kevin16");	
    		//su.init("kevin");
    		//su.doSpeak("Hello world!");
    		su.doSpeak(SAMPLE);
    		su.terminate();
    	}
    	
    	final static String SAMPLE = "Wiki said, Floyd Mayweather, Jr. is an American professional boxer. He is currently undefeated as a professional and is a five-division world champion, having won ten world titles and the lineal championship in four different weight classes";
    }

提交回复
热议问题