package org.geogebra.web.html5.sound; import org.geogebra.common.kernel.geos.GeoFunction; import org.geogebra.common.sound.SoundManager; import org.geogebra.common.util.debug.Log; import org.geogebra.web.html5.gui.tooltip.ToolTipManagerW; import org.geogebra.web.html5.main.AppW; /** * */ public class SoundManagerW implements SoundManager /* , MidiSoundListenerW */ { private AppW app; /** * @param app * App */ public SoundManagerW(AppW app) { this.app = app; // getMidiSound().setListener(this); } @Override public void pauseResumeSound(boolean b) { FunctionSoundW.INSTANCE.pause(b); } @Override public void playSequenceNote(int note, double duration, int instrument, int velocity) { stopCurrentSound(); // getMidiSound().playSequenceNote(instrument, note, velocity, // duration); } @Override public void playSequenceFromString(String string, int double1) { Log.debug("playSequenceFromString"); } @Override public void playFunction(GeoFunction geoFunction, double min, double max) { FunctionSoundW.INSTANCE.playFunction(geoFunction, min, max); } @Override public void playFile(String url0) { String url = url0; // eg PlaySound["#12345"] to play material 12345 from GeoGebraTube boolean fmtMp3 = url.startsWith("#"); boolean fmtMidi = url.startsWith("@"); if (fmtMp3 || fmtMidi) { String id = url.substring(1); url = app.getURLforID(id); } if (fmtMidi || url.endsWith(".mid") || url.endsWith(".midi")) { Log.debug("MIDI not supported"); return; } Log.debug("playing URL as MP3: " + url); playMP3(url); // TODO check extension, play MIDI .mid files // if (url.endsWith(".mid") || url.endsWith(".midi")) { // getMidiSound().playMidiFile(url); // } else { // playMP3(url); // } } // MidiSoundW getMidiSound() { // return MidiSoundW.INSTANCE; // } FunctionSoundW getFunctionSound() { return FunctionSoundW.INSTANCE; } public void stopCurrentSound() { // getMidiSound().stop(); } @Override public void playFunction(GeoFunction geoFunction, double min, double max, int sampleRate, int bitDepth) { FunctionSoundW.INSTANCE.playFunction(geoFunction, min, max, sampleRate, bitDepth); } /** * @param url * eg * http://www.geogebra.org/static/spelling/spanish/00/00002.mp3 */ native void playMP3(String url) /*-{ var audioElement = $doc.createElement('audio'); audioElement.setAttribute('src', url); audioElement.load(); audioElement.addEventListener("canplay", function() { audioElement.play(); }); }-*/; public void onError(int errorCode) { // if (errorCode == MidiSoundW.MIDI_ERROR_PORT) { // ToolTipManagerW.sharedInstance().showBottomMessage( // "No valid MIDI output port was found.", true, (AppW) app); // } } public void onInfo(String msg) { ToolTipManagerW.sharedInstance().showBottomMessage(msg, true, app); } }