45 lines
1.4 KiB
Java
45 lines
1.4 KiB
Java
package chess.view.audio;
|
|
|
|
import java.io.BufferedInputStream;
|
|
import java.io.InputStream;
|
|
|
|
import javax.sound.sampled.AudioFormat;
|
|
import javax.sound.sampled.AudioInputStream;
|
|
import javax.sound.sampled.AudioSystem;
|
|
import javax.sound.sampled.Clip;
|
|
|
|
public class AudioPlayer {
|
|
public static void playSound(InputStream audio) {
|
|
new Thread(new Runnable() {
|
|
// The wrapper thread is unnecessary, unless it blocks on the
|
|
// Clip finishing; see comments.
|
|
public void run() {
|
|
try {
|
|
Clip clip = AudioSystem.getClip();
|
|
BufferedInputStream bufferedInputStream = new BufferedInputStream(audio);
|
|
AudioInputStream inputStream = AudioSystem.getAudioInputStream(bufferedInputStream);
|
|
clip.open(inputStream);
|
|
clip.start();
|
|
} catch (Exception e) {
|
|
System.err.println(e.getMessage());
|
|
}
|
|
}
|
|
}).start();
|
|
}
|
|
|
|
private static AudioInputStream convertToPCM(AudioInputStream audioInputStream) {
|
|
AudioFormat m_format = audioInputStream.getFormat();
|
|
|
|
if ((m_format.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) &&
|
|
(m_format.getEncoding() != AudioFormat.Encoding.PCM_UNSIGNED)) {
|
|
AudioFormat targetFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
|
|
m_format.getSampleRate(), 16,
|
|
m_format.getChannels(), m_format.getChannels() * 2,
|
|
m_format.getSampleRate(), m_format.isBigEndian());
|
|
audioInputStream = AudioSystem.getAudioInputStream(targetFormat, audioInputStream);
|
|
}
|
|
|
|
return audioInputStream;
|
|
}
|
|
}
|