Pranay Airan Pranay Airan - 1 month ago 16
Java Question

how can i store output voice to an audio file in freetts

I am trying to use freetts for a simple java application but i am facing a problem, can anyone tell me how can i save the output voice which is converted from text to speech into a wave file in my program. I want to do it via code.

This is the sample helloworld application which is given with the sample

/**
* Copyright 2003 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and
* redistribution of this file, and for a DISCLAIMER OF ALL
* WARRANTIES.
*/
import com.sun.speech.freetts.FreeTTS;
import com.sun.speech.freetts.Voice;
import com.sun.speech.freetts.VoiceManager;
import com.sun.speech.freetts.audio.JavaClipAudioPlayer;

/**
* Simple program to demonstrate the use of the FreeTTS speech
* synthesizer. This simple program shows how to use FreeTTS
* without requiring the Java Speech API (JSAPI).
*/
public class FreeTTSHelloWorld {

/**
* Example of how to list all the known voices.
*/


public static void main(String[] args) {

// listAllVoices();

FreeTTS freetts;

String voiceName = "kevin16";

System.out.println();
System.out.println("Using voice: " + voiceName);

/* The VoiceManager manages all the voices for FreeTTS.
*/
VoiceManager voiceManager = VoiceManager.getInstance();
Voice helloVoice = voiceManager.getVoice(voiceName);

if (helloVoice == null) {
System.err.println(
"Cannot find a voice named "
+ voiceName + ". Please specify a different voice.");
System.exit(1);
}

/* Allocates the resources for the voice.
*/
helloVoice.allocate();

/* Synthesize speech.
*/


helloVoice.speak("Thank you for giving me a voice. "
+ "I'm so glad to say hello to this world.");


/* Clean up and leave.
*/
helloVoice.deallocate();
System.exit(0);
}
}


This code is working fine I want to save the output as a audio file on my disk.

Thanks
Pranay

Answer

I figured out how to do that you have to simply use SingleFileAudioPlayer pass the file name and file type which you want sample declaration will be like:

audioPlayer = new SingleFileAudioPlayer("output",Type.WAVE);

Now you need to attach the SinglefileAudioplayer object to your VoiceManager object: e.g.

helloVoice.setAudioPlayer(audioPlayer);

Now use:

hellovoice.speak("zyxss"); 

This will save the file with whatever there in speak. Remember to close the audioplayer otherwise the file will not be saved. Put audioPlayer.close(); before exiting.

Here is the complete working code which will dump file in your C directory

    /**
     * Copyright 2003 Sun Microsystems, Inc.
     * 
     * See the file "license.terms" for information on usage and
     * redistribution of this file, and for a DISCLAIMER OF ALL 
     * WARRANTIES.
     */
    import com.sun.speech.freetts.FreeTTS;
    import com.sun.speech.freetts.Voice;
    import com.sun.speech.freetts.VoiceManager;
    import com.sun.speech.freetts.audio.AudioPlayer;
    import com.sun.speech.freetts.audio.SingleFileAudioPlayer;
    import javax.sound.sampled.AudioFileFormat.Type;

    /**
     * Simple program to demonstrate the use of the FreeTTS speech
     * synthesizer.  This simple program shows how to use FreeTTS
     * without requiring the Java Speech API (JSAPI).
     */
    public class FreeTTSHelloWorld {

        /**
         * Example of how to list all the known voices.
         */


        public static void main(String[] args) {

           // listAllVoices();

            FreeTTS freetts;
       AudioPlayer audioPlayer = null;
            String voiceName = "kevin16";

            System.out.println();
            System.out.println("Using voice: " + voiceName);

            /* The VoiceManager manages all the voices for FreeTTS.
             */
            VoiceManager voiceManager = VoiceManager.getInstance();
            Voice helloVoice = voiceManager.getVoice(voiceName);

            if (helloVoice == null) {
                System.err.println(
                    "Cannot find a voice named "
                    + voiceName + ".  Please specify a different voice.");
                System.exit(1);
            }

            /* Allocates the resources for the voice.
             */
            helloVoice.allocate();

            /* Synthesize speech.
             */
//create a audioplayer to dump the output file
           audioPlayer = new SingleFileAudioPlayer("C://output",Type.WAVE);
    //attach the audioplayer 
           helloVoice.setAudioPlayer(audioPlayer);



            helloVoice.speak("Thank you for giving me a voice. "
                             + "I'm so glad to say hello to this world.");



            /* Clean up and leave.
             */
            helloVoice.deallocate();
//don't forget to close the audioplayer otherwise file will not be saved
            audioPlayer.close();
            System.exit(0);
        }
    }