aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/sound/SoundTask.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/sound/SoundTask.java')
-rw-r--r--framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/sound/SoundTask.java193
1 files changed, 193 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/sound/SoundTask.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/sound/SoundTask.java
new file mode 100644
index 00000000..dfb6e69a
--- /dev/null
+++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/sound/SoundTask.java
@@ -0,0 +1,193 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.tools.ant.taskdefs.optional.sound;
+
+import java.io.File;
+import java.util.Random;
+import java.util.Vector;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+
+/**
+ * Plays a sound file at the end of the build, according to whether the build failed or succeeded.
+ *
+ * There are three attributes to be set:
+ *
+ * <code>source</code>: the location of the audio file to be played
+ * <code>duration</code>: play the sound file continuously until "duration" milliseconds has expired
+ * <code>loops</code>: 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
+ *
+ */
+
+public class SoundTask extends Task {
+
+ private BuildAlert success = null;
+ private BuildAlert fail = null;
+
+ /**
+ * add a sound when the build succeeds
+ * @return a BuildAlert to be configured
+ */
+ public BuildAlert createSuccess() {
+ success = new BuildAlert();
+ return success;
+ }
+
+ /**
+ * add a sound when the build fails
+ * @return a BuildAlert to be configured
+ */
+ public BuildAlert createFail() {
+ fail = new BuildAlert();
+ return fail;
+ }
+
+ /** Constructor for SoundTask. */
+ public SoundTask() {
+ }
+
+ /**
+ * Initialize the task.
+ */
+ public void init() {
+ }
+
+ /**
+ * Execute the task.
+ */
+ public void execute() {
+
+ AntSoundPlayer soundPlayer = new AntSoundPlayer();
+
+ if (success == null) {
+ log("No nested success element found.", Project.MSG_WARN);
+ } else {
+ soundPlayer.addBuildSuccessfulSound(success.getSource(),
+ success.getLoops(), success.getDuration());
+ }
+
+ if (fail == null) {
+ log("No nested failure element found.", Project.MSG_WARN);
+ } else {
+ soundPlayer.addBuildFailedSound(fail.getSource(),
+ fail.getLoops(), fail.getDuration());
+ }
+
+ getProject().addBuildListener(soundPlayer);
+
+ }
+
+ /**
+ * A class to be extended by any BuildAlert's that require the output
+ * of sound.
+ */
+ public class BuildAlert {
+ private File source = null;
+ private int loops = 0;
+ private Long duration = null;
+
+ /**
+ * Sets the duration in milliseconds the file should be played; optional.
+ * @param duration the duration in milliseconds
+ */
+ public void setDuration(Long duration) {
+ this.duration = duration;
+ }
+
+ /**
+ * Sets the location of the file to get the audio; required.
+ *
+ * @param source the name of a sound-file directory or of the audio file
+ */
+ public void setSource(File source) {
+ this.source = source;
+ }
+
+ /**
+ * Sets the number of times the source file should be played; optional.
+ *
+ * @param loops the number of loops to play the source file
+ */
+ public void setLoops(int loops) {
+ this.loops = loops;
+ }
+
+ /**
+ * Gets the location of the file to get the audio.
+ * @return the file location
+ */
+ public File getSource() {
+ File nofile = null;
+ // Check if source is a directory
+ if (source.exists()) {
+ if (source.isDirectory()) {
+ // get the list of files in the dir
+ String[] entries = source.list();
+ Vector files = new Vector();
+ for (int i = 0; i < entries.length; i++) {
+ File f = new File(source, entries[i]);
+ if (f.isFile()) {
+ files.addElement(f);
+ }
+ }
+ if (files.size() < 1) {
+ throw new BuildException("No files found in directory " + source);
+ }
+ int numfiles = files.size();
+ // get a random number between 0 and the number of files
+ Random rn = new Random();
+ int x = rn.nextInt(numfiles);
+ // set the source to the file at that location
+ this.source = (File) files.elementAt(x);
+ }
+ } else {
+ log(source + ": invalid path.", Project.MSG_WARN);
+ this.source = nofile;
+ }
+ return this.source;
+ }
+
+ /**
+ * 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 this.loops;
+ }
+
+ /**
+ * Gets the duration in milliseconds the file should be played.
+ * @return the duration in milliseconds
+ */
+ public Long getDuration() {
+ return this.duration;
+ }
+ }
+}
+