Java InstantCode. Developing Applications using Java Speech API
The SpeakCounting.java file converts the count values to speech in the voice selected by an end user . Listing 5-3 shows the contents of SpeakCounting.java file:
Listing 5-3: The SpeakCounting.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: SpeakCounting-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 SpeakCounting extends SynthesizerAdapter { /*Declare objects of String class.*/ String l; String voiceName; /* Declare objects of SynthesizerModeDesc class. */ SynthesizerModeDesc desc; /* Declare objects of SynthesizerModeDesc class. */ Synthesizer synthesizer; /* SpeakCounting(): Parameters: k: String representing the text that the synthesizer speaks. selvoice: String representing the voice selected by the end user. Return Type: NA */ public SpeakCounting(String k, String selvoice) { /* Sets the value of l to the text that the synthesizer speaks. */ l=k; /*Sets the value of voiceName to the voice selected by the user.*/ 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() { try { /* 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 SpeakCounting class takes two strings as input parameters. The k string represents the count values that the synthesizer reads out. The selvoice string represents the voice that an end user selects to read out count values.
The methods defined in Listing 5-3 are:
-
speakSelText(): Uses the object of the Synthesizer class to convert text to speech.
-
closeSynthesizer(): Closes the synthesizer and stops the audio operation.
-
pauseSynthesizer(): Pauses the synthesizer.
-
resumeSynthesizer(): Resumes the paused audio operation of the synthesizer.
Категории