Language Java
(Singing with Java Speech API)
Date: | 05/04/06 |
Author: | Kevin Seifert |
URL: | http://members.sigecom.net/kseifert/ |
Comments: | 2 |
Info: | http://java.sun.com/products/java-media/speech/ |
Score: | (2.98 in 43 votes) |
/** This program sings the song "99 Bottles" using the Java Speech API (JSAPI). FreeTTS is a free JSAPI implementation. To install: 1. Download and unzip FreeTTS from http://freetts.sourceforge.net/ 2. To accept the license agreement, find the lib folder, then: for Windows run: jsapi.exe for unix/linux type: sh ./jsapi.sh 3. Create a file named "speech.propeties" in your home directory, with a line: FreeTTSSynthEngineCentral=com.sun.speech.freetts.jsapi.FreeTTSEngineCentral 4. To compile/run, classpath must include freetts.jar and jsapi.jar, such as: javac -cp "/freetts/lib/freetts.jar;/freetts/lib/jsapi.jar;." Bottles.java java -cp "/freetts/lib/freetts.jar;/freetts/lib/jsapi.jar;." Bottles */ import java.util.Locale; import javax.speech.Central; import javax.speech.synthesis.Synthesizer; import javax.speech.synthesis.SynthesizerModeDesc; import javax.speech.synthesis.Voice; public class Bottles { public static final int NUM_BOTTLES = 99; //define scale frequencies in hertz public static final int G_1 = 196; public static final int A_2 = 220; public static final int B_2 = 246; public static final int C_2 = 260; public static final int D_2 = 292; public Voice kevinHQ; public SynthesizerModeDesc generalDesc; public Synthesizer synth; public void openMouth() { try { System.out.print( " Loading voice..." ); kevinHQ = new Voice( "kevin16", Voice.GENDER_DONT_CARE, Voice.AGE_DONT_CARE, null ); generalDesc = new SynthesizerModeDesc( null, // engine name "general", // mode name Locale.US, // locale null, // running null ); // voice synth = Central.createSynthesizer( generalDesc ); if ( synth == null ) { System.err.println( "Could not load general domain synthesizer. " + "You probably need to configure a speech.properties file. " ); System.exit( 1 ); } synth.allocate(); synth.getSynthesizerProperties().setVoice( kevinHQ ); synth.getSynthesizerProperties().setPitchRange(0.0f); synth.resume(); System.out.print( "...\n\n" ); } catch ( Exception e ) { e.printStackTrace(); } } public void closeMouth() { try { synth.deallocate(); } catch ( Exception e ) { e.printStackTrace(); } } public void sing( String lyrics, int pitch ) { try { System.out.print( lyrics ); synth.getSynthesizerProperties().setPitch( pitch ); synth.speakPlainText( lyrics, null ); synth.waitEngineState( Synthesizer.QUEUE_EMPTY ); } catch ( Exception e ) { System.err.println( e ); } } public String getBottle( int i ) { if ( i != 1 ) return "bottles "; return "bottle "; } public String getNumber( int i ) { if ( i == 0 ) return "No more "; return String.valueOf( i ) + " "; } public void singSong() { openMouth(); int j; for ( int i = NUM_BOTTLES; i >= 0; i-- ) { sing( getNumber( i ) , C_2 ); sing( getBottle( i ) + "of " , G_1 ); sing( "beer on the wall, " , C_2 ); sing( getNumber( i ) , D_2 ); sing( getBottle( i ) + "of " , A_2 ); sing( "beer.\n" , D_2 ); if ( i > 0 ) { sing( "Take one down and pass it around, " , B_2 ); j = i-1; } else { sing( "Go to the store and buy some more, " , B_2 ); j = NUM_BOTTLES; } sing( getNumber( j ) , G_1 ); sing( getBottle( j ) , A_2 ); sing( "of " , B_2 ); sing( "beer on the wall.\n\n" , C_2 ); } closeMouth(); } public static void main( String[] argv ) { Bottles beer = new Bottles(); beer.singSong(); } }
Download Source | Write Comment
Alternative Versions
Version | Author | Date | Comments | Rate |
---|---|---|---|---|
object-oriented version | Anonymous | 04/20/05 | 33 | |
standard version | Sean Russell | 04/20/05 | 12 | |
exception oriented | Jarek Ratajski | 09/08/05 | 5 | |
bytecode-version with loader | Tilo Dickopp | 05/23/06 | 10 | |
Java 5.0 object-oriented version | Kvols | 11/19/05 | 3 |
Download Source | Write Comment
Add Comment
Please provide a value for the fields Name,
Comment and Security Code.
This is a gravatar-friendly website.
E-mail addresses will never be shown.
Enter your e-mail address to use your gravatar.
Please don't post large portions of code here! Use the form to submit new examples or updates instead!
Comments
Jasdeep said on 08/12/07 05:10:12
The code looks like great...
have not tested it yet ...
Pascal said on 09/28/09 19:15:41
The Home Directory is the Home Directory of your machine. So on Windows vista: C:\Users\yourUserName\