package krasa.grepconsole.model; import java.io.File; import java.io.IOException; import javax.media.*; import krasa.grepconsole.filter.support.SoundMode; import com.intellij.openapi.diagnostic.Logger; /** * @author Vojtech Krasa */ public class Sound extends DomainObject implements ControllerListener { private static final Logger log = Logger.getInstance(Sound.class.getName()); public static SoundMode soundMode = SoundMode.ENABLED; private String path; private boolean enabled; private volatile transient boolean playing; public String getPath() { return path; } public synchronized void play() { if (enabled && soundMode == SoundMode.ENABLED && !playing && isNotBlank(path)) { try { playing = true; getPlayer().start(); } catch (Exception ex) { playing = false; log.error("Playing of sound failed. Sound file path=" + path + ", exists:" + new File(path).exists() + ".", ex); } } } private boolean isNotBlank(String path) { return path != null && path.length() != 0; } private Player getPlayer() throws IOException, NoPlayerException { Player player = Manager.createPlayer(new File(path).toURI().toURL()); player.addControllerListener(this); return player; } public void setPath(String path) { this.path = path; } public boolean isEnabled() { return enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } @Override public void controllerUpdate(ControllerEvent controllerEvent) { if (controllerEvent instanceof StopEvent) { playing = false; } } }