2017-02-04 11 views
0

getoutputメソッドが呼び出されたときに音楽を再生し、呼び出しが終了したら音楽を停止したい。私は前者をすることはできるが、後者はできない。 getoutputメソッドの呼び出しが終了したら、音楽を停止するにはどうすればよいですか?Javaでオーディオを停止するにはどうすればよいですか?

import java.io.InputStream; 
import javax.sound.sampled.AudioSystem; 

import sun.audio.AudioPlayer; 
import sun.audio.AudioStream; 

public class Student { 

    public void music() { 

     try { 
      // open the sound file as a Java input stream 
      String gongFile = "C:\\Users\\wei liang\\Documents\\Programming fundamentals\\T7-Arrays\\Assignment\\TT.wav"; 
      InputStream in = new FileInputStream(gongFile); 

      // create an audiostream from the inputstream 
      AudioStream audioStream = new AudioStream(in); 

      // play the audio clip with the audioplayer class 
      AudioPlayer.player.start(audioStream); 

     } catch (Exception ex) { 
      System.out.println("Error! Can't find file."); 
      ex.printStackTrace(); 
     } 
    } 
} 

これは私の主な方法で、音楽メソッドとStudentクラスには表示されない別のメソッドを呼び出す方法です。

public class StudentUser { 

    //Main method 
    public static void main(String args[]) { 

     //creating a new Student object 
     Student stud = new Student(); 

     //Calling the music method 
     stud.music(); 

     //Calling the getoutput method 
     stud.getoutput(); 

    } 
} 
+0

'日は使用しないでください*'パッケージ、彼らは文書化されていないで、いつでも消えてしまう。

あなたStudentクラスは次のようになります。オーディオを保存/再生するには、 'AudioInputStream'と' Clip'を使用する必要があります。 – Brendan

+0

あなたが答えを必要とするなら、私はあなたに書きました、あなたは答えなかったと私に知らせてください。 –

答えて

0

スレッドを使用することをお勧めします。スレッドは、音楽ファイルが再生され、自動的に終了するまでライブ状態になります。

メソッドを提供していないので、musicメソッドを呼び出すだけで、音楽を再生して終了します。

import javax.sound.sampled.*; 
import java.io.File; 

class Student { 

    public synchronized void music(final String fileName, final SoundOptions mode) { 
     Thread music = new Thread(new Runnable() { 

      @Override 
      public void run() { 
       try { 
        AudioInputStream inputStream = AudioSystem.getAudioInputStream(
          new File(fileName)); 

        final Clip audioLineClip = (Clip) AudioSystem.getLine(
          new Line.Info(Clip.class)); 
        audioLineClip.open(inputStream); 
        audioLineClip.setFramePosition(0); 

        audioLineClip.addLineListener(new LineListener() { 
         @Override 
         public void update(LineEvent event) { 
          LineEvent.Type type = event.getType(); 
          if (type == LineEvent.Type.OPEN) { 
          } else if (type == LineEvent.Type.CLOSE) { 
           System.exit(0); 
          } else if (type == LineEvent.Type.START) { 
          } else if (type == LineEvent.Type.STOP) { 
           audioLineClip.close(); 
          } 
         } 
        }); 

        switch (mode) { 
         case Stop: 
          audioLineClip.stop(); 
          break; 
         case Play: 
          audioLineClip.start(); 
          break; 
         case Loop: 
          audioLineClip.loop(Clip.LOOP_CONTINUOUSLY); 
          break; 
        } 
       } catch (Exception e) { 
        System.err.println(e.getMessage()); 
       } 
      } 
     }); 

     if (mode != SoundOptions.Stop) { 
      music.start(); 

      synchronized (music) { 
       while (true) { 
        try { 
         music.wait(); 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 

     } else { 
      music.interrupt(); 
     } 
    } 


} 

enum SoundOptions { 
    Play, Loop, Stop 
} 

StudentUserクラス:

public class StudentUser { 

    private static String gongFile = "C:\\Users\\wei liang\\Documents\\Programming fundamentals\\T7-Arrays\\Assignment\\TT.wav"; 

    //Main method 
    public static void main(String args[]) { 

     //Creating a new Student object 
     Student stud = new Student(); 

     //Calling the music method and it is stops when music ends 
     stud.music(gongFile, SoundOptions.Play); 
    } 
} 
関連する問題