warherolion:
私は、彼らが利用できる曲のリストのうち、再生すると、曲が終わる一度ユーザーを一つ選択した後に、それは彼らが再び再生したい曲をユーザに要求する曲をユーザーに求められますプログラムを持っています。私の質問は、私は、彼らが選択した曲が終了するまで、彼らは繰り返しませんので、再生したい曲をユーザに尋ねるからループを防ぐどうすればよいのですか?
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String[] pathnames;
File MusicFileChosen;
String musicDir;
boolean songComplete = false;
pathnames = ProgramMap.musicDir.list();
// Print the names of files and directories
for (int ListNum = 0; ListNum < pathnames.length; ListNum++) {
System.out.println(ListNum + 1 + ". " + pathnames[ListNum]);
}
for (int playlistLength = 0; playlistLength < pathnames.length; playlistLength++){
if (!songComplete) {
System.out.println("Which Song would you like to play?");
int musicChoice = input.nextInt();
musicDir = ProgramMap.userDir + "\\src\\Music\\" + pathnames[musicChoice - 1];
MusicFileChosen = new File(musicDir);
PlaySound(MusicFileChosen, pathnames[musicChoice - 1]);
}
}
}
public static void PlaySound(File sound, String FileName){
try{
// Inits the Audio System
Clip clip = AudioSystem.getClip();
AudioInputStream AudioInput = AudioSystem.getAudioInputStream(sound);
//Finds and accesses the clip
clip.open(AudioInput);
//Starts the clip
clip.start();
System.out.println("Now Playing " + FileName);
clip.drain();
}catch (Exception e){
System.out.println("Error playing music");
}
}
}
フィルFreihofner:
あなたは使用することができLineListenerを。その後、登録しをリッスンLineEvent.Type.CLOSE。
ところで、あなたは使用することをお勧めするかもしれないSourceDataLine
よりClip
。そうでないかもしれない大したことが、あなたはコード化されたもの、ファイルのサイズ、あなたがクリップを開いて、メモリに完全なファイルをロードするたびに応じて、可聴遅れがある可能性が与えられた(これは、缶を再生する前に完了する必要があります開始)。SourceDataLine
ほとんどすぐに(プレーを開始する前にのみ負荷1のバッファ)を再生開始し、唯一の代わりにサウンドファイル全体のメモリの一つのバッファを消費します。
新しく追加された多くの人々がjavax.sound.sampled
使用しての警戒しているSourceDataLine
が、それは本当にはるかに難しいコードに比べてではないClip
、とあなたが表示されている使用のために、それはより良いフィット感だろう。