package gdi1sokoban.sound;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URISyntaxException;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;
/**
* Sound Entity class
*
* manages a thread which plays a predefined sound
*
*/
public class SoundEntity {
private volatile Player sndPlayer = null;
private volatile boolean play = false;
/**
* plays a sound
* @param fileName filename of the sound file
* @param sndOptions output options (SND_LOOP, SND_ASYNC, SND_SYNC - see SoundEngine for further details)
*/
protected void playSound
(final String fileName,
final int sndOptions
) {
final boolean loop = ((sndOptions & SoundEngine.SND_LOOP) == SoundEngine.SND_LOOP);
final boolean async = ((sndOptions & SoundEngine.SND_ASYNC) == SoundEngine.SND_ASYNC);
play = true;
public void run() {
while (play) {
try {
sndPlayer = new Player(sndStream);
sndPlayer.play();
sndPlayer.close();
} catch (final JavaLayerException e) {
break;
}
if (loop == false)
play = false;
}
play = false;
if (sndPlayer != null)
sndPlayer.close();
}
};
if (async)
soundThread.start();
else
soundThread.run();
}
/**
* stops the sound
*/
protected void stopSound() {
play = false;
if (sndPlayer != null)
sndPlayer.close();
}
/**
* checks whether the sound is still playing or not
* @return true if sound has already stopped playing, else false
*/
protected boolean hasStopped() {
return !play;
}
}