The SpeakText.java file converts the text in the Java tutorial to speech. Listing 7-2 shows the contents of the SpeakText.java file:
/*Import required io classes*/ import java.io.File; /*Import required util classes*/ import java.util.Locale; import java.util.Vector; import javax.speech.synthesis.SynthesizerAdapter; import javax.speech.synthesis.SynthesizerEvent; /*Import required speech classes*/ import javax.speech.Central; import javax.speech.Engine; import javax.speech.EngineList; import javax.speech.synthesis.Synthesizer; import javax.speech.synthesis.SynthesizerModeDesc; import javax.speech.synthesis.SynthesizerProperties; import javax.speech.synthesis.Voice; /* Class:SpeakText-Speaks the text Fields: voiceName:Represents the voice selected by the end user. synthesizer:Represents an object of Synthesizer class. Methods: speakSelText():Uses the object of Synthesizer class to speak the text. closeSynthesizer():Closes the synthesizer and stops the speaking operation. pauseSynthesizer():Pauses the synthesizer. resumeSynthesizer():Resumes the paused speaking operation of the synthesizer. */ public class SpeakText extends SynthesizerAdapter { /*Declare variables*/ String l; String voiceName; SynthesizerModeDesc desc; Synthesizer synthesizer; Tutorial textpad; /* SpeakText(): Parameters: k:String representing the text that the synthesizer speaks. selvoice:String representing the voice selected by the end user. Return Type:NA */ public SpeakText(String k, String selvoice) { /* Set the value of l to the text that the synthesizer speaks */ l=k; /* Set the value of voiceName to the voice selected by the user */ txtpad=new Tutorial(); voiceName = selvoice; System.out.println("Using voice: " + voiceName); try { /* Initialize an object of SynthesizerModeDesc class */ desc = new SynthesizerModeDesc( null, "general", Locale.US, null, null); synthesizer = Central.createSynthesizer(desc); /* Prints the message if no synthesizer is available */ if (synthesizer == null) { String message = "\nCan't find synthesizer.\n" + "Make sure that there is a \"speech.properties\" file" + "at either of these locations: \n"; message += "user.home : " + System.getProperty("user.home") + "\n"; message += "java.home/lib: " + System.getProperty("java.home") + File.separator + "lib\n"; System.err.println(message); System.exit(1); } /* Allocate a synthesizer to speak text. */ synthesizer.allocate(); synthesizer.resume(); desc = (SynthesizerModeDesc) synthesizer.getEngineModeDesc(); /* Retrieve all the available voices in an array */ Voice[] voices = desc.getVoices(); Voice voice = null; for (int i = 0; i < voices.length; i++) { if (voices[i].getName().equals(voiceName)) { voice = voices[i]; break; } } /* Print error message if selected voice is not available */ if(voice == null) { System.err.println("Synthesizer does not have a voice named " + voiceName + "."); System.exit(1); } /* Set the selected voice for the synthesizer */ synthesizer.getSynthesizerProperties().setVoice(voice); } catch(Exception e) { System.out.println(e); } } /* speakSelText():Speaks the text Parameters:NA Return Value:NA */ public void speakSelText(Tutorial st) { try { txtpad=st; /* Invoke speakPlainText() method to speak the text. */ synthesizer.cancelAll(); synthesizer.speakPlainText(l, null); System.out.println("Speaking Text"); } catch (Exception e) { e.printStackTrace(); } try { /* Invoke waitEngineState() method to wait end of speech. */ synthesizer.waitEngineState(Synthesizer.QUEUE_EMPTY); } catch(Exception e) { } } /* closeSynthesizer():Close the synthesizer and stop the speaking operation. Parameters:NA Return Type:NA */ public void closeSynthesizer() { try { /* Stop the synthesizer and cancel the speaking operation */ synthesizer.cancelAll(); System.out.println("Speaking Operation Cancelled"); } catch (Exception e) { e.printStackTrace(); } } /* pauseSynthesizer():Pause the synthesizer. This pauses the text that the synthesizer is currently speaking. Parameters:NA Return Value:NA */ public void pauseSynthesizer() { try { /* Pause the synthesizer */ synthesizer.pause(); System.out.println("Speaking Operation Paused"); } catch(Exception e) { e.printStackTrace(); } } /* resumeSynthesizer():Resumes the speaking operation that is paused by the end user. Parameters:NA Return Value:NA */ public void resumeSynthesizer() { try { /* Resume the synthesizer that speaks the text. */ synthesizer.resume(); System.out.println("Speaking Operation Resumed"); } catch(Exception e) { e.printStackTrace(); } } }
Download this listing .
In the above code, the constructor of the SpeakText class takes two strings as input parameters. The k string represents the text that the synthesizer reads out. The selvoice string represents the voice that an end user selects to read out the text.
The methods defined in Listing 7-2 are:
speakSelText(): Uses the object of the Synthesizer class to read out the text in the selected tutorial.
closeSynthesizer(): Closes the synthesizer and stops the audio operation.
pauseSynthesizer(): Pauses the synthesizer.
resumeSynthesizer(): Resumes the paused synthesizer.