/*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; private String filePath; File audioFile; // constructor to initialize streams and clip public AudioFilePlayer(String newFilePath) { filePath = newFilePath; audioFile = new File(filePath); // create AudioInputStream object try { audioInputStream = AudioSystem.getAudioInputStream(new File(filePath).getAbsoluteFile()); } catch (UnsupportedAudioFileException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // create clip reference try { clip = AudioSystem.getClip(); } catch (LineUnavailableException e) { // TODO Auto-generated catch block e.printStackTrace(); } // open audioInputStream to the clip try { clip.open(audioInputStream); } catch (LineUnavailableException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // public static void main(String[] args) // { // try // { // filePath = "src/assets/BookBetrayal.wav3"; // 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 public 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); } }