< prev index next >

src/java.desktop/share/classes/com/sun/media/sound/JavaSoundAudioClip.java

Print this page

        

*** 171,203 **** lastPlayCall = currentTime; if (DEBUG || Printer.debug) Printer.debug("JavaSoundAudioClip.startImpl(loop="+loop+")"); try { if (clip != null) { if (!clip.isOpen()) { ! if (DEBUG || Printer.trace)Printer.trace("JavaSoundAudioClip: clip.open()"); ! clip.open(loadedAudioFormat, loadedAudio, 0, loadedAudioByteLength); } else { - if (DEBUG || Printer.trace)Printer.trace("JavaSoundAudioClip: clip.flush()"); clip.flush(); if (loop != clipLooping) { // need to stop in case the looped status changed - if (DEBUG || Printer.trace)Printer.trace("JavaSoundAudioClip: clip.stop()"); clip.stop(); } } clip.setFramePosition(0); if (loop) { - if (DEBUG || Printer.trace)Printer.trace("JavaSoundAudioClip: clip.loop()"); clip.loop(Clip.LOOP_CONTINUOUSLY); } else { - if (DEBUG || Printer.trace)Printer.trace("JavaSoundAudioClip: clip.start()"); clip.start(); } clipLooping = loop; ! if (DEBUG || Printer.debug)Printer.debug("Clip should be playing/looping"); ! } else if (datapusher != null ) { datapusher.start(loop); if (DEBUG || Printer.debug)Printer.debug("Stream should be playing/looping"); } else if (sequencer != null) { --- 171,205 ---- lastPlayCall = currentTime; if (DEBUG || Printer.debug) Printer.debug("JavaSoundAudioClip.startImpl(loop="+loop+")"); try { if (clip != null) { + // We need to disable autoclosing mechanism otherwise the clip + // can be closed after "!clip.isOpen()" check, because of + // previous inactivity. + clip.setAutoClosing(false); + try { if (!clip.isOpen()) { ! clip.open(loadedAudioFormat, loadedAudio, 0, ! loadedAudioByteLength); } else { clip.flush(); if (loop != clipLooping) { // need to stop in case the looped status changed clip.stop(); } } clip.setFramePosition(0); if (loop) { clip.loop(Clip.LOOP_CONTINUOUSLY); } else { clip.start(); } clipLooping = loop; ! } finally { ! clip.setAutoClosing(true); ! } } else if (datapusher != null ) { datapusher.start(loop); if (DEBUG || Printer.debug)Printer.debug("Stream should be playing/looping"); } else if (sequencer != null) {
< prev index next >