package com.iambookmaster.client.player; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Element; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Window; import com.iambookmaster.client.common.JSONParser; /* //other solution //http://code.google.com/p/gwt-voices/wiki/GettingStarted // // Sound sound = soundController.createSound(Sound.MIME_TYPE_AUDIO_MPEG,url); // sound.play(); <embed src="http://www.yoursite.com/music/musicfile.wav" autostart="true" loop="false" hidden="true"> <embed src="/music/musicfile.wav" autostart="true" loop="false" width="350" height="200"> */ public class ContentPlayerImpl implements com.iambookmaster.client.model.ContentPlayer { /** * IANA assigned media type <code>audio/basic</code> for RFC 2045/2046. * Typical filename extensions include <code>.au</code> and * <code>.snd</code>. */ private static final String MIME_TYPE_AUDIO_BASIC = "audio/basic"; /** * IANA assigned media type <code>audio/mpeg</code> for RFC 3003. Typical * filename extensions include <code>.mp1</code>, <code>.mp2</code> and * <code>.mp3</code>. */ private static final String MIME_TYPE_AUDIO_MPEG = "audio/mpeg"; /** * Using <code>audio/x-aiff</code> instead of the more popular, but * unregistered, <code>audio/aiff</code>. Typical filename extension is * <code>.aif</code>. */ private static final String MIME_TYPE_AUDIO_X_AIFF = "audio/x-aiff"; /** * Using <code>audio/x-midi</code> instead of the more popular, but * unregistered, <code>audio/midi</code>. Typical filename extensions * include <code>.mid</code> and <code>.midi</code>. */ private static final String MIME_TYPE_AUDIO_X_MIDI = "audio/x-midi"; /** * Using <code>audio/x-wav</code> instead of the more popular, but * unregistered, <code>audio/wav</code>. Typical filename extension is * <code>.wav</code>. */ private static final String MIME_TYPE_AUDIO_X_WAV = "audio/x-wav"; private Element soundPlayer; private Element backgroundPlayer; // private SoundController soundController = new SoundController(); public ContentPlayerImpl() { } public void openURL(String url) { Window.open(url, "_blank", ""); } public void playBackgroundSound(String url) { stopBackgroundSound(); backgroundPlayer = DOM.createElement("EMBED"); setMIMEAndStart(backgroundPlayer,url,true); } public void playSound(String url, boolean loop) { stopSound(); soundPlayer = DOM.createElement("EMBED"); setMIMEAndStart(soundPlayer,url,loop); } private void setMIMEAndStart(Element soundElement, String url,boolean loop) { //try to detect type of content by extention int i = url.lastIndexOf('.'); if (i>0) { String ext = url.substring(i+1).toLowerCase(); if (ext.startsWith("mp")) { soundElement.setAttribute("type",MIME_TYPE_AUDIO_MPEG); } else if (ext.startsWith("mid")) { soundElement.setAttribute("type",MIME_TYPE_AUDIO_X_MIDI); } else if (ext.startsWith("wav")) { soundElement.setAttribute("type",MIME_TYPE_AUDIO_X_WAV); } else if (ext.startsWith("au") || "snd".equals(ext)) { soundElement.setAttribute("type",MIME_TYPE_AUDIO_BASIC); } else if ("aif".equals(ext)) { soundElement.setAttribute("type",MIME_TYPE_AUDIO_X_AIFF); } else { soundElement.setAttribute("type",MIME_TYPE_AUDIO_MPEG); } } else { soundElement.setAttribute("type",MIME_TYPE_AUDIO_MPEG); } soundElement.setAttribute("hidden","true"); soundElement.setAttribute("src",JSONParser.escape(url)); soundElement.setAttribute("loop",String.valueOf(loop)); soundElement.setAttribute("autostart","true"); soundElement.setAttribute("enablejavascript","true"); Document.get().getBody().appendChild(soundElement); } private native void stopPlayer(Element soundPlayer) /*-{ try { soundPlayer.Stop(); } catch (e){ } }-*/; public void stopSound() { if (soundPlayer!=null) { soundPlayer.setAttribute("loop","false"); Document.get().getBody().removeChild(soundPlayer); stopPlayer(soundPlayer); soundPlayer = null; } } public void stopBackgroundSound() { if (backgroundPlayer!=null) { backgroundPlayer.setAttribute("loop","false"); Document.get().getBody().removeChild(backgroundPlayer); stopPlayer(backgroundPlayer); backgroundPlayer = null; } } }