aboutsummaryrefslogtreecommitdiff
path: root/src/sound
diff options
context:
space:
mode:
Diffstat (limited to 'src/sound')
-rw-r--r--src/sound/AudioFilePlayer.java197
-rw-r--r--src/sound/ShortAudioPlayer.java103
2 files changed, 300 insertions, 0 deletions
diff --git a/src/sound/AudioFilePlayer.java b/src/sound/AudioFilePlayer.java
new file mode 100644
index 0000000..06f728b
--- /dev/null
+++ b/src/sound/AudioFilePlayer.java
@@ -0,0 +1,197 @@
+/*Name:
+ *Date:
+ *Period:
+ *Teacher:
+ *Description:
+ */
+package sound;
+//Java program to play audio files. imports file scanning and various
+//methods from the java audio class in order to do so.
+import java.io.File;
+import java.io.IOException;
+import java.util.Scanner;
+
+import javax.sound.sampled.AudioInputStream;
+import javax.sound.sampled.AudioSystem;
+import javax.sound.sampled.Clip;
+import javax.sound.sampled.LineUnavailableException;
+import javax.sound.sampled.UnsupportedAudioFileException;
+
+public class AudioFilePlayer
+{
+
+ // to store current position
+ Long currentFrame;
+ Clip clip;
+
+ // current status of clip
+ String status;
+
+ AudioInputStream audioInputStream;
+ static String filePath;
+
+ // constructor to initialize streams and clip
+ public AudioFilePlayer() throws UnsupportedAudioFileException,
+ IOException, LineUnavailableException
+ {
+ // create AudioInputStream object
+ audioInputStream =
+ AudioSystem.getAudioInputStream(new File(filePath).getAbsoluteFile());
+
+ // create clip reference
+ clip = AudioSystem.getClip();
+
+ // open audioInputStream to the clip
+ clip.open(audioInputStream);
+
+ clip.loop(Clip.LOOP_CONTINUOUSLY);
+ }
+
+ public static void main(String[] args)
+ {
+ try
+ {
+ filePath = "GH3Intro.wav";
+ AudioFilePlayer audioPlayer = new AudioFilePlayer();
+
+ audioPlayer.play();
+ Scanner sc = new Scanner(System.in);
+
+ while (true) //until the thread closes, ask the user what they want to do with the audio file
+ {
+ System.out.println("1. pause");
+ System.out.println("2. resume");
+ System.out.println("3. restart");
+ System.out.println("4. stop");
+ System.out.println("5. Jump to specific time");
+ int c = sc.nextInt();
+ audioPlayer.gotoChoice(c);
+ if (c == 4)
+ break;
+ }
+ sc.close();
+ }
+
+ catch (Exception ex)
+ {
+ System.out.println("Error with playing sound.");
+ ex.printStackTrace();
+
+ }
+ }
+
+ // Work as the user enters his choice
+
+ private void gotoChoice(int c)throws IOException, LineUnavailableException, UnsupportedAudioFileException
+ {
+ //reads the users input and chooses what to do based on said input
+ switch (c)
+ {
+ case 1:
+ pause();
+ break;
+ case 2:
+ resumeAudio();
+ break;
+ case 3:
+ restart();
+ break;
+ case 4:
+ stop();
+ break;
+ case 5:
+ System.out.println("Enter time (" + 0 +
+ ", " + clip.getMicrosecondLength() + ")");
+ Scanner sc = new Scanner(System.in);
+ long c1 = sc.nextLong();
+ jump(c1);
+ break;
+
+ }
+
+ }
+
+ // Method to play the audio
+ public void play()
+ {
+ //start the clip
+ clip.start();
+
+ status = "play";
+ }
+
+ // Method to pause the audio
+ public void pause()
+ {
+ if (status.equals("paused"))
+ {
+ System.out.println("audio is already paused");
+ return;
+ }
+ this.currentFrame = this.clip.getMicrosecondPosition();
+ clip.stop();
+ status = "paused";
+ }
+
+ // Method to resume the audio
+ public void resumeAudio() throws UnsupportedAudioFileException,
+ IOException, LineUnavailableException
+ {
+ if (status.equals("play"))
+ {
+ System.out.println("Audio is already "+
+ "being played");
+ return;
+ }
+ clip.close();
+ resetAudioStream();
+ clip.setMicrosecondPosition(currentFrame);
+ this.play();
+ }
+
+ // Method to restart the audio
+ public void restart() throws IOException, LineUnavailableException,
+ UnsupportedAudioFileException
+ {
+ clip.stop();
+ clip.close();
+ resetAudioStream();
+ currentFrame = 0L;
+ clip.setMicrosecondPosition(0);
+ this.play();
+ }
+
+ // Method to stop the audio
+ public void stop() throws UnsupportedAudioFileException,
+ IOException, LineUnavailableException
+ {
+ currentFrame = 0L;
+ clip.stop();
+ clip.close();
+ }
+
+ // Method to jump over a specific part
+ public void jump(long c) throws UnsupportedAudioFileException, IOException,
+ LineUnavailableException
+ {
+ if (c > 0 && c < clip.getMicrosecondLength())
+ {
+ clip.stop();
+ clip.close();
+ resetAudioStream();
+ currentFrame = c;
+ clip.setMicrosecondPosition(c);
+ this.play();
+ }
+ }
+
+ // Method to reset audio stream
+ public void resetAudioStream() throws UnsupportedAudioFileException, IOException, LineUnavailableException
+ {
+ audioInputStream = AudioSystem.getAudioInputStream(
+ new File(filePath).getAbsoluteFile());
+ clip.open(audioInputStream);
+ clip.loop(Clip.LOOP_CONTINUOUSLY);
+ }
+
+} \ No newline at end of file
diff --git a/src/sound/ShortAudioPlayer.java b/src/sound/ShortAudioPlayer.java
new file mode 100644
index 0000000..ed3417b
--- /dev/null
+++ b/src/sound/ShortAudioPlayer.java
@@ -0,0 +1,103 @@
+/*Name:
+ *Date:
+ *Period:
+ *Teacher:
+ *Description:
+ */
+package sound;
+
+ //Java program to play audio files. imports file scanning and various
+ //methods from the java audio class in order to do so.
+ 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.LineEvent;
+ import javax.sound.sampled.LineListener;
+ import javax.sound.sampled.LineUnavailableException;
+ import javax.sound.sampled.UnsupportedAudioFileException;
+
+ public class ShortAudioPlayer implements LineListener
+ {
+ //indicates whether the playback completes or not
+ boolean playCompleted;
+ Clip audioClip;
+
+ public void play(String audioFilePath)
+ {
+ File audioFile = new File(audioFilePath);
+
+ try
+ {
+ //creates an audioInput object using the file we
+ //declared earlier
+ AudioInputStream audioStream = AudioSystem.getAudioInputStream(audioFile);
+
+ //gets the format of the audioStream object
+ AudioFormat format = audioStream.getFormat();
+
+ DataLine.Info info = new DataLine.Info(Clip.class, format);
+
+ audioClip = (Clip) AudioSystem.getLine(info);
+
+ audioClip.addLineListener(this);
+
+ audioClip.open(audioStream);
+
+ audioClip.start();
+
+ while (!playCompleted)
+ {
+ // wait for the playback to complete
+ try
+ {
+ Thread.sleep(1000);
+ }
+ catch (InterruptedException ex)
+ {
+ ex.printStackTrace();
+ }
+ }
+ audioClip.close(); //stops the audio clip
+ }
+ catch (UnsupportedAudioFileException ex)
+ {
+ System.out.println("The specified audio file is not supported.");
+ ex.printStackTrace();
+ }
+ catch (LineUnavailableException ex)
+ {
+ System.out.println("Audio line for playing back is unavailable.");
+ ex.printStackTrace();
+ }
+ catch (IOException ex)
+ {
+ System.out.println("Error playing the audio file.");
+ ex.printStackTrace();
+ }
+ }
+
+
+ /**
+ * Listens to the START and STOP events of the audio line.
+ */
+ @Override
+ public void update(LineEvent event)
+ {
+ LineEvent.Type type = event.getType();
+
+ if (type == LineEvent.Type.START)
+ {
+ System.out.println("Playback started.");
+ }
+ else if (type == LineEvent.Type.STOP)
+ {
+ playCompleted = true;
+ System.out.println("Playback completed.");
+ }
+ }
+ }