내 스윙 응용 프로그램에서 마우스를 클릭하면 소리를 재생하는 클래스를 사용하고 있습니다. 내가 가지고있는 문제는 소리가 한 번 재생되는 클래스를 호출 할 때 갑자기 다른 버튼을 클릭하면 소리가 재생되지 않습니다. 나는 내 코드에서 지연을 주려고했지만, ID는 예상대로 작동하지 않는다. 스레드와 관련이 있습니까 ?? 나는 실이 좋지 않아 그렇게하는 법을 말해줘. 내가 사용하고있는 코드는Java에서 AudioPlayer로 작업
package utilities;
import java.applet.AudioClip;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import sun.audio.AudioData;
import sun.audio.AudioPlayer;
import sun.audio.AudioStream;
import sun.audio.ContinuousAudioDataStream;
public class Tone {`
File wavFile = new File("sounds/Windows Default.wav");
URL urlClick = Tone.class.getResource("/sounds/WindowsDefault.wav");
AudioClip sound;
public void sound() {
AudioStream as = null;
try {
InputStream in = this.getClass().getResourceAsStream("/sounds/WindowsDefault.wav");
as = new AudioStream(in);
AudioData data = as.getData();
// Create ContinuousAudioDataStream.
ContinuousAudioDataStream cas = new ContinuousAudioDataStream (data);
//System.out.println(as.getLength());
AudioPlayer.player.start(cas);
//System.out.println(urlClick);
//sound = Applet.newAudioClip(urlClick);
//this.wait(1000);
for(int i =0;i<100000;i++){
double k = Math.pow(i, 5);
if(i==99999){
AudioPlayer.player.stop(cas);
return;
}
}
// sound.play();
String relativeDirectory = System.getProperty("user.dir");
System.out.println(relativeDirectory);
} catch (IOException ex) {
Logger.getLogger(Tone.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try {
as.close();
} catch (IOException ex) {
Logger.getLogger(Tone.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
public static void main(String[] args) {
Tone tone = new Tone();
tone.sound();
System.out.println("done");
}
}
--EDIT-- 내가이 aleast 어떤 소리를들을 사용할 때 소리가 전혀 발생하지 않았기 때문에 continuousaudiostream가 사용되는 이유는, 다음과 같습니다. AudioStream을 사용할 때도 문제가있었습니다.
사용'javax.sound .sampled.Clip' 또는'sun. * '클래스로 파고 쓰는 대신 직접'AudioInputStream'을 사용하십시오. –
메서드를 직접 호출하면 (애플릿 외부에서) 사운드를 두 번 재생할 수 있습니까? –
아니요, 직접 메소드를 호출해도 아무 소리도 들리지 않습니다. 내가 직접 말하면, main()에서 호출합니다 – Deepak