diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/sound/AntSoundPlayer.java b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/sound/AntSoundPlayer.java deleted file mode 100644 index 6fd956083..000000000 --- a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/sound/AntSoundPlayer.java +++ /dev/null @@ -1,239 +0,0 @@ -/* - * Copyright (C) The Apache Software Foundation. All rights reserved. - * - * This software is published under the terms of the Apache Software License - * version 1.1, a copy of which has been included with this distribution in - * the LICENSE.txt file. - */ -package org.apache.tools.ant.taskdefs.optional.sound; - -import java.io.File; -import java.io.IOException; -import javax.sound.sampled.AudioFormat; -import javax.sound.sampled.AudioInputStream; -import javax.sound.sampled.AudioSystem; -import javax.sound.sampled.Clip; -import javax.sound.sampled.DataLine; -import javax.sound.sampled.Line; -import javax.sound.sampled.LineEvent; -import javax.sound.sampled.LineListener; -import javax.sound.sampled.LineUnavailableException; -import javax.sound.sampled.UnsupportedAudioFileException; -import org.apache.avalon.framework.logger.LogEnabled; -import org.apache.avalon.framework.logger.Logger; -import org.apache.myrmidon.listeners.AbstractProjectListener; -import org.apache.myrmidon.listeners.ProjectEvent; -import org.apache.myrmidon.listeners.LogEvent; - -/** - * This class is designed to be used by any AntTask that requires audio output. - * It implements the BuildListener interface to listen for BuildEvents and could - * be easily extended to provide audio output upon any specific build events - * occuring. I have only tested this with .WAV and .AIFF sound file formats. - * Both seem to work fine. - * - * @author Nick Pellow - * @version $Revision$, $Date$ - */ -public class AntSoundPlayer - extends AbstractProjectListener - implements LineListener, LogEnabled -{ - private File m_fileSuccess; - private int m_loopsSuccess; - private Long m_durationSuccess; - - private File m_fileFail; - private int m_loopsFail; - private Long m_durationFail; - - private Logger m_logger; - - /** - * Provide component with a logger. - * - * @param logger the logger - */ - public void enableLogging( final Logger logger ) - { - m_logger = logger; - } - - protected final Logger getLogger() - { - return m_logger; - } - - /** - * Notify listener of projectFinished event. - */ - public void projectFinished( final ProjectEvent event ) - { - success(); - } - - /** - * Notify listener of log message event. - */ - public void log( final LogEvent event ) - { - if( event.getThrowable() != null ) - { - failure(); - } - } - - /** - * @param fileFail The feature to be added to the BuildFailedSound attribute - * @param loopsFail The feature to be added to the BuildFailedSound - * attribute - * @param durationFail The feature to be added to the BuildFailedSound - * attribute - */ - public void addBuildFailedSound( File fileFail, int loopsFail, Long durationFail ) - { - m_fileFail = fileFail; - m_loopsFail = loopsFail; - m_durationFail = durationFail; - } - - /** - * @param loops the number of times the file should be played when the build - * is successful - * @param duration the number of milliseconds the file should be played when - * the build is successful - * @param file The feature to be added to the BuildSuccessfulSound attribute - */ - public void addBuildSuccessfulSound( File file, int loops, Long duration ) - { - m_fileSuccess = file; - m_loopsSuccess = loops; - m_durationSuccess = duration; - } - - /** - * This is implemented to listen for any line events and closes the clip if - * required. - */ - public void update( LineEvent event ) - { - if( event.getType().equals( LineEvent.Type.STOP ) ) - { - Line line = event.getLine(); - line.close(); - } - else if( event.getType().equals( LineEvent.Type.CLOSE ) ) - { - /* - * There is a bug in JavaSound 0.90 (jdk1.3beta). - * It prevents correct termination of the VM. - * So we have to exit ourselves. - */ - //System.exit(0); - } - } - - protected void success() - { - if( null != m_fileSuccess ) - { - // build successfull! - play( m_fileSuccess, m_loopsSuccess, m_durationSuccess ); - } - } - - protected void failure() - { - if( null != m_fileFail ) - { - play( m_fileFail, m_loopsFail, m_durationFail ); - } - } - - /** - * Plays the file for duration milliseconds or loops. - */ - private void play( File file, int loops, Long duration ) - { - Clip audioClip = null; - - AudioInputStream audioInputStream = null; - - try - { - audioInputStream = AudioSystem.getAudioInputStream( file ); - } - catch( UnsupportedAudioFileException uafe ) - { - final String message = "Audio format is not yet supported: " + uafe.getMessage(); - getLogger().info( message ); - } - catch( IOException ioe ) - { - ioe.printStackTrace(); - } - - if( audioInputStream != null ) - { - AudioFormat format = audioInputStream.getFormat(); - DataLine.Info info = new DataLine.Info( Clip.class, format, - AudioSystem.NOT_SPECIFIED ); - try - { - audioClip = (Clip)AudioSystem.getLine( info ); - audioClip.addLineListener( this ); - audioClip.open( audioInputStream ); - } - catch( LineUnavailableException e ) - { - final String message = "The sound device is currently unavailable"; - getLogger().info( message ); - return; - } - catch( IOException e ) - { - e.printStackTrace(); - } - - if( duration != null ) - { - playClip( audioClip, duration.longValue() ); - } - else - { - playClip( audioClip, loops ); - } - audioClip.drain(); - audioClip.close(); - } - else - { - final String message = "Can't get data from file " + file.getName(); - getLogger().info( message ); - } - } - - private void playClip( Clip clip, int loops ) - { - - clip.loop( loops ); - while( clip.isRunning() ) - { - } - } - - private void playClip( Clip clip, long duration ) - { - - long currentTime = System.currentTimeMillis(); - clip.loop( Clip.LOOP_CONTINUOUSLY ); - try - { - Thread.sleep( duration ); - } - catch( InterruptedException e ) - { - } - } -} - diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/sound/BuildAlert.java b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/sound/BuildAlert.java deleted file mode 100644 index e7f65bc33..000000000 --- a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/sound/BuildAlert.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (C) The Apache Software Foundation. All rights reserved. - * - * This software is published under the terms of the Apache Software License - * version 1.1, a copy of which has been included with this distribution in - * the LICENSE.txt file. - */ -package org.apache.tools.ant.taskdefs.optional.sound; - -import java.io.File; - -/** - * A class to be extended by any BuildAlert's that require the output of - * sound. - */ -public class BuildAlert -{ - private File m_source; - private int m_loops; - private Long m_duration; - - /** - * Sets the duration in milliseconds the file should be played. - * - * @param duration The new Duration value - */ - public void setDuration( Long duration ) - { - m_duration = duration; - } - - /** - * Sets the number of times the source file should be played. - * - * @param loops the number of loops to play the source file - */ - public void setLoops( int loops ) - { - m_loops = loops; - } - - /** - * Sets the location of the file to get the audio. - * - * @param source the name of a sound-file directory or of the audio file - */ - public void setSource( final File source ) - { - m_source = source; - } - - /** - * Gets the duration in milliseconds the file should be played. - * - * @return The Duration value - */ - public Long getDuration() - { - return m_duration; - } - - /** - * Sets the number of times the source file should be played. - * - * @return the number of loops to play the source file - */ - public int getLoops() - { - return m_loops; - } - - /** - * Gets the location of the file to get the audio. - * - * @return The Source value - */ - public File getSource() - { - return m_source; - } -} diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/sound/SoundTask.java b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/sound/SoundTask.java deleted file mode 100644 index ad890c244..000000000 --- a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/sound/SoundTask.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (C) The Apache Software Foundation. All rights reserved. - * - * This software is published under the terms of the Apache Software License - * version 1.1, a copy of which has been included with this distribution in - * the LICENSE.txt file. - */ -package org.apache.tools.ant.taskdefs.optional.sound; - -import java.io.File; -import java.util.ArrayList; -import java.util.Random; -import org.apache.myrmidon.api.TaskException; -import org.apache.tools.ant.Task; - -/** - * This is an example of an AntTask that makes of use of the AntSoundPlayer. - * There are three attributes to be set: source: the location of - * the audio file to be played duration: play the sound file - * continuously until "duration" milliseconds has expired loops: - * the number of times the sound file should be played until stopped I have only - * tested this with .WAV and .AIFF sound file formats. Both seem to work fine. - * plans for the future: - use the midi api to define sounds (or drum beat etc) - * in xml and have Ant play them back - * - * @author Nick Pellow - * @version $Revision$, $Date$ - */ -public class SoundTask - extends Task -{ - private BuildAlert m_success; - private BuildAlert m_fail; - - public BuildAlert createFail() - { - m_fail = new BuildAlert(); - return m_fail; - } - - public BuildAlert createSuccess() - { - m_success = new BuildAlert(); - return m_success; - } - - public void execute() - throws TaskException - { - final AntSoundPlayer soundPlayer = new AntSoundPlayer(); - if( null == m_success ) - { - final String message = "No nested success element found."; - getLogger().warn( message ); - } - else - { - soundPlayer.addBuildSuccessfulSound( getRandomSource( m_success ), - m_success.getLoops(), m_success.getDuration() ); - } - - if( null == m_fail ) - { - final String message = "No nested failure element found."; - getLogger().warn( message ); - } - else - { - soundPlayer.addBuildFailedSound( getRandomSource( m_fail ), - m_fail.getLoops(), m_fail.getDuration() ); - } - - getProject().addProjectListener( soundPlayer ); - } - - /** - * Gets the location of the file to get the audio. - */ - private File getRandomSource( final BuildAlert alert ) - throws TaskException - { - final File source = alert.getSource(); - // Check if source is a directory - if( source.exists() ) - { - if( source.isDirectory() ) - { - // get the list of files in the dir - final String[] entries = source.list(); - ArrayList files = new ArrayList(); - for( int i = 0; i < entries.length; i++ ) - { - File f = new File( source, entries[ i ] ); - if( f.isFile() ) - { - files.add( f ); - } - } - if( files.size() < 1 ) - { - final String message = "No files found in directory " + source; - throw new TaskException( message ); - } - final int numfiles = files.size(); - // get a random number between 0 and the number of files - final Random random = new Random(); - final int x = random.nextInt( numfiles ); - // set the source to the file at that location - return (File)files.get( x ); - } - else - { - return null; - } - } - else - { - getLogger().warn( source + ": invalid path." ); - return null; - } - } -} diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/sound/AntSoundPlayer.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/sound/AntSoundPlayer.java deleted file mode 100644 index 6fd956083..000000000 --- a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/sound/AntSoundPlayer.java +++ /dev/null @@ -1,239 +0,0 @@ -/* - * Copyright (C) The Apache Software Foundation. All rights reserved. - * - * This software is published under the terms of the Apache Software License - * version 1.1, a copy of which has been included with this distribution in - * the LICENSE.txt file. - */ -package org.apache.tools.ant.taskdefs.optional.sound; - -import java.io.File; -import java.io.IOException; -import javax.sound.sampled.AudioFormat; -import javax.sound.sampled.AudioInputStream; -import javax.sound.sampled.AudioSystem; -import javax.sound.sampled.Clip; -import javax.sound.sampled.DataLine; -import javax.sound.sampled.Line; -import javax.sound.sampled.LineEvent; -import javax.sound.sampled.LineListener; -import javax.sound.sampled.LineUnavailableException; -import javax.sound.sampled.UnsupportedAudioFileException; -import org.apache.avalon.framework.logger.LogEnabled; -import org.apache.avalon.framework.logger.Logger; -import org.apache.myrmidon.listeners.AbstractProjectListener; -import org.apache.myrmidon.listeners.ProjectEvent; -import org.apache.myrmidon.listeners.LogEvent; - -/** - * This class is designed to be used by any AntTask that requires audio output. - * It implements the BuildListener interface to listen for BuildEvents and could - * be easily extended to provide audio output upon any specific build events - * occuring. I have only tested this with .WAV and .AIFF sound file formats. - * Both seem to work fine. - * - * @author Nick Pellow - * @version $Revision$, $Date$ - */ -public class AntSoundPlayer - extends AbstractProjectListener - implements LineListener, LogEnabled -{ - private File m_fileSuccess; - private int m_loopsSuccess; - private Long m_durationSuccess; - - private File m_fileFail; - private int m_loopsFail; - private Long m_durationFail; - - private Logger m_logger; - - /** - * Provide component with a logger. - * - * @param logger the logger - */ - public void enableLogging( final Logger logger ) - { - m_logger = logger; - } - - protected final Logger getLogger() - { - return m_logger; - } - - /** - * Notify listener of projectFinished event. - */ - public void projectFinished( final ProjectEvent event ) - { - success(); - } - - /** - * Notify listener of log message event. - */ - public void log( final LogEvent event ) - { - if( event.getThrowable() != null ) - { - failure(); - } - } - - /** - * @param fileFail The feature to be added to the BuildFailedSound attribute - * @param loopsFail The feature to be added to the BuildFailedSound - * attribute - * @param durationFail The feature to be added to the BuildFailedSound - * attribute - */ - public void addBuildFailedSound( File fileFail, int loopsFail, Long durationFail ) - { - m_fileFail = fileFail; - m_loopsFail = loopsFail; - m_durationFail = durationFail; - } - - /** - * @param loops the number of times the file should be played when the build - * is successful - * @param duration the number of milliseconds the file should be played when - * the build is successful - * @param file The feature to be added to the BuildSuccessfulSound attribute - */ - public void addBuildSuccessfulSound( File file, int loops, Long duration ) - { - m_fileSuccess = file; - m_loopsSuccess = loops; - m_durationSuccess = duration; - } - - /** - * This is implemented to listen for any line events and closes the clip if - * required. - */ - public void update( LineEvent event ) - { - if( event.getType().equals( LineEvent.Type.STOP ) ) - { - Line line = event.getLine(); - line.close(); - } - else if( event.getType().equals( LineEvent.Type.CLOSE ) ) - { - /* - * There is a bug in JavaSound 0.90 (jdk1.3beta). - * It prevents correct termination of the VM. - * So we have to exit ourselves. - */ - //System.exit(0); - } - } - - protected void success() - { - if( null != m_fileSuccess ) - { - // build successfull! - play( m_fileSuccess, m_loopsSuccess, m_durationSuccess ); - } - } - - protected void failure() - { - if( null != m_fileFail ) - { - play( m_fileFail, m_loopsFail, m_durationFail ); - } - } - - /** - * Plays the file for duration milliseconds or loops. - */ - private void play( File file, int loops, Long duration ) - { - Clip audioClip = null; - - AudioInputStream audioInputStream = null; - - try - { - audioInputStream = AudioSystem.getAudioInputStream( file ); - } - catch( UnsupportedAudioFileException uafe ) - { - final String message = "Audio format is not yet supported: " + uafe.getMessage(); - getLogger().info( message ); - } - catch( IOException ioe ) - { - ioe.printStackTrace(); - } - - if( audioInputStream != null ) - { - AudioFormat format = audioInputStream.getFormat(); - DataLine.Info info = new DataLine.Info( Clip.class, format, - AudioSystem.NOT_SPECIFIED ); - try - { - audioClip = (Clip)AudioSystem.getLine( info ); - audioClip.addLineListener( this ); - audioClip.open( audioInputStream ); - } - catch( LineUnavailableException e ) - { - final String message = "The sound device is currently unavailable"; - getLogger().info( message ); - return; - } - catch( IOException e ) - { - e.printStackTrace(); - } - - if( duration != null ) - { - playClip( audioClip, duration.longValue() ); - } - else - { - playClip( audioClip, loops ); - } - audioClip.drain(); - audioClip.close(); - } - else - { - final String message = "Can't get data from file " + file.getName(); - getLogger().info( message ); - } - } - - private void playClip( Clip clip, int loops ) - { - - clip.loop( loops ); - while( clip.isRunning() ) - { - } - } - - private void playClip( Clip clip, long duration ) - { - - long currentTime = System.currentTimeMillis(); - clip.loop( Clip.LOOP_CONTINUOUSLY ); - try - { - Thread.sleep( duration ); - } - catch( InterruptedException e ) - { - } - } -} - diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/sound/BuildAlert.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/sound/BuildAlert.java deleted file mode 100644 index e7f65bc33..000000000 --- a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/sound/BuildAlert.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (C) The Apache Software Foundation. All rights reserved. - * - * This software is published under the terms of the Apache Software License - * version 1.1, a copy of which has been included with this distribution in - * the LICENSE.txt file. - */ -package org.apache.tools.ant.taskdefs.optional.sound; - -import java.io.File; - -/** - * A class to be extended by any BuildAlert's that require the output of - * sound. - */ -public class BuildAlert -{ - private File m_source; - private int m_loops; - private Long m_duration; - - /** - * Sets the duration in milliseconds the file should be played. - * - * @param duration The new Duration value - */ - public void setDuration( Long duration ) - { - m_duration = duration; - } - - /** - * Sets the number of times the source file should be played. - * - * @param loops the number of loops to play the source file - */ - public void setLoops( int loops ) - { - m_loops = loops; - } - - /** - * Sets the location of the file to get the audio. - * - * @param source the name of a sound-file directory or of the audio file - */ - public void setSource( final File source ) - { - m_source = source; - } - - /** - * Gets the duration in milliseconds the file should be played. - * - * @return The Duration value - */ - public Long getDuration() - { - return m_duration; - } - - /** - * Sets the number of times the source file should be played. - * - * @return the number of loops to play the source file - */ - public int getLoops() - { - return m_loops; - } - - /** - * Gets the location of the file to get the audio. - * - * @return The Source value - */ - public File getSource() - { - return m_source; - } -} diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/sound/SoundTask.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/sound/SoundTask.java deleted file mode 100644 index ad890c244..000000000 --- a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/sound/SoundTask.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (C) The Apache Software Foundation. All rights reserved. - * - * This software is published under the terms of the Apache Software License - * version 1.1, a copy of which has been included with this distribution in - * the LICENSE.txt file. - */ -package org.apache.tools.ant.taskdefs.optional.sound; - -import java.io.File; -import java.util.ArrayList; -import java.util.Random; -import org.apache.myrmidon.api.TaskException; -import org.apache.tools.ant.Task; - -/** - * This is an example of an AntTask that makes of use of the AntSoundPlayer. - * There are three attributes to be set: source: the location of - * the audio file to be played duration: play the sound file - * continuously until "duration" milliseconds has expired loops: - * the number of times the sound file should be played until stopped I have only - * tested this with .WAV and .AIFF sound file formats. Both seem to work fine. - * plans for the future: - use the midi api to define sounds (or drum beat etc) - * in xml and have Ant play them back - * - * @author Nick Pellow - * @version $Revision$, $Date$ - */ -public class SoundTask - extends Task -{ - private BuildAlert m_success; - private BuildAlert m_fail; - - public BuildAlert createFail() - { - m_fail = new BuildAlert(); - return m_fail; - } - - public BuildAlert createSuccess() - { - m_success = new BuildAlert(); - return m_success; - } - - public void execute() - throws TaskException - { - final AntSoundPlayer soundPlayer = new AntSoundPlayer(); - if( null == m_success ) - { - final String message = "No nested success element found."; - getLogger().warn( message ); - } - else - { - soundPlayer.addBuildSuccessfulSound( getRandomSource( m_success ), - m_success.getLoops(), m_success.getDuration() ); - } - - if( null == m_fail ) - { - final String message = "No nested failure element found."; - getLogger().warn( message ); - } - else - { - soundPlayer.addBuildFailedSound( getRandomSource( m_fail ), - m_fail.getLoops(), m_fail.getDuration() ); - } - - getProject().addProjectListener( soundPlayer ); - } - - /** - * Gets the location of the file to get the audio. - */ - private File getRandomSource( final BuildAlert alert ) - throws TaskException - { - final File source = alert.getSource(); - // Check if source is a directory - if( source.exists() ) - { - if( source.isDirectory() ) - { - // get the list of files in the dir - final String[] entries = source.list(); - ArrayList files = new ArrayList(); - for( int i = 0; i < entries.length; i++ ) - { - File f = new File( source, entries[ i ] ); - if( f.isFile() ) - { - files.add( f ); - } - } - if( files.size() < 1 ) - { - final String message = "No files found in directory " + source; - throw new TaskException( message ); - } - final int numfiles = files.size(); - // get a random number between 0 and the number of files - final Random random = new Random(); - final int x = random.nextInt( numfiles ); - // set the source to the file at that location - return (File)files.get( x ); - } - else - { - return null; - } - } - else - { - getLogger().warn( source + ": invalid path." ); - return null; - } - } -}