package com.flagstone.cookbook; /* * BasicSound.java * Cookbook * * Copyright (c) 2001-2010 Flagstone Software Ltd. All rights reserved. * * This code is distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, * EITHER EXPRESS OR IMPLIED, AND Flagstone HEREBY DISCLAIMS ALL SUCH * WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. */ import java.io.File; import java.io.IOException; import java.util.zip.DataFormatException; import com.flagstone.transform.Background; import com.flagstone.transform.Movie; import com.flagstone.transform.MovieHeader; import com.flagstone.transform.ShowFrame; import com.flagstone.transform.datatype.Bounds; import com.flagstone.transform.datatype.WebPalette; import com.flagstone.transform.sound.DefineSound; import com.flagstone.transform.sound.SoundInfo; import com.flagstone.transform.sound.StartSound; import com.flagstone.transform.util.sound.SoundFactory; /* * This example shows how the SoundConstructor class can be used to generate the * objects used to play a sound in a movie. * * To run this example, type the following on a command line: * * java -cp ... com.flagstone.cookbook.BasicSound sound-file file-out * * where: * * sound-file is the path to a file containing a WAVE or MP3 format sound. * * file-out is the path where the file will be written. If no output file * is specified then a file named after the example will be written to the * current directory. */ public class BasicSound { public static void main(String[] args) { try { String sound = args[0]; String out = args.length == 1 ? "BasicSound.swf" : args[1]; BasicSound example = new BasicSound(); Movie movie = new Movie(); example.createMovie(movie, sound); movie.encodeToFile(new File(out)); } catch (Exception e) { e.printStackTrace(); } } void createMovie(Movie movie, String soundFile) throws DataFormatException, IOException { float framesPerSecond = 12.0f; /* * Load the sound and create the definition. */ final SoundFactory factory = new SoundFactory(); factory.read(new File(soundFile)); final DefineSound sound = factory.defineSound(1); /* * Calculate the time it takes to play the sound and the number of * frames this represents. */ final float duration = ((float) sound.getSampleCount() / (float) sound.getRate()); final int numberOfFrames = (int) (duration * framesPerSecond); /*************************************************** * Put all the objects together in a movie ***************************************************/ final MovieHeader header = new MovieHeader(); header.setFrameRate(framesPerSecond); header.setFrameSize(new Bounds(0, 0, 8000, 4000)); movie.add(header); movie.add(new Background(WebPalette.LIGHT_BLUE.color())); movie.add(sound); /* * Signal the Flash Player to begin playing the sound. */ movie.add(new StartSound(new SoundInfo(sound.getIdentifier(), SoundInfo.Mode.START, 0, null))); /* * Add enough frames to give the sound time to play. */ for (int i = 0; i < numberOfFrames; i++) movie.add(ShowFrame.getInstance()); } }