package me.rkfg.ns2gather.client;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import ru.ppsrk.gwt.client.AlertRuntimeException;
import com.google.gwt.dom.client.MediaElement;
import com.google.gwt.media.client.Audio;
public class SoundManager {
String[] soundURLs = { "chat.ogg", "vote.ogg", "enter.ogg", "leave.ogg", "timer.ogg", "more.ogg", "revote.ogg" };
List<Audio> audios = new ArrayList<>();
Set<NS2Sound> soundsToPlay = new HashSet<NS2Sound>();
public SoundManager() {
for (String soundURL : soundURLs) {
Audio newAudio = Audio.createIfSupported();
if (newAudio == null) {
throw new AlertRuntimeException("Браузер не поддерживает звуки (HTML5 элемент <audio>)");
}
newAudio.setPreload(MediaElement.PRELOAD_AUTO);
newAudio.setSrc("audio/" + soundURL);
newAudio.setAutoplay(false);
audios.add(newAudio);
}
}
public void playSound(NS2Sound sound) {
Audio audio = getSound(sound);
if (!audio.isPaused()) {
stopSound(sound);
}
audio.play();
}
public void stopSound(NS2Sound sound) {
Audio audio = getSound(sound);
audio.pause();
audio.setCurrentTime(0);
}
private Audio getSound(NS2Sound sound) {
if (sound.ordinal() >= audios.size()) {
throw new AlertRuntimeException("no such sound");
}
return audios.get(sound.ordinal());
}
public void setVolume(NS2Sound sound, double volume) {
Audio audio = getSound(sound);
audio.setVolume(volume);
}
public void setLoop(NS2Sound sound, boolean loop) {
Audio audio = getSound(sound);
audio.setLoop(loop);
}
public void queue(NS2Sound sound) {
soundsToPlay.add(sound);
}
public void playQueued() {
for (NS2Sound sound : soundsToPlay) {
playSound(sound);
}
clearQueue();
}
public void clearQueue() {
soundsToPlay.clear();
}
}