[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [cp-patches] Patch: RFC: make applet use javax.sound.sampled
From: |
Thomas Fitzsimmons |
Subject: |
Re: [cp-patches] Patch: RFC: make applet use javax.sound.sampled |
Date: |
Mon, 14 Nov 2005 14:31:28 -0500 |
On Mon, 2005-11-14 at 12:24 -0700, Tom Tromey wrote:
> I'm not checking this in yet -- I would like someone more familiar
> with Applet to look at it first.
>
> This changes Applet to use javax.sound.sampled to implement
> AudioClip. It also updates DummyAppletContext to use this.
>
> I don't know why there is a separate newAudioClip... is the idea that
> a typical AppletContext should do caching?
newAudioClip is static so it can be used in applications. Apparently it
was added in 1.2 so that non-applets could load and play sound clips
without using the impure sun.audio package.
This patch looks good, please commit.
Tom
>
> Tom
>
>
> 2005-11-14 Tom Tromey <address@hidden>
>
> * java/applet/Applet.java (URLAudioClip): New class.
> (newAudioClip): Implemented.
> * gnu/java/beans/DummyAppletContext.java (getAudioClip): Use
> Applet.newAudioClip.
> (DUMMY_CLIP): Removed.
> (DummyAudioClip): Removed.
>
> Index: gnu/java/beans/DummyAppletContext.java
> ===================================================================
> RCS file:
> /cvsroot/classpath/classpath/gnu/java/beans/DummyAppletContext.java,v
> retrieving revision 1.2
> diff -u -r1.2 DummyAppletContext.java
> --- gnu/java/beans/DummyAppletContext.java 2 Jul 2005 20:32:12 -0000
> 1.2
> +++ gnu/java/beans/DummyAppletContext.java 14 Nov 2005 18:27:02 -0000
> @@ -63,7 +63,6 @@
> class DummyAppletContext implements AppletContext
> {
> private static final Enumeration EMPTY_ENUMERATION =
> Collections.enumeration(Collections.EMPTY_SET);
> - private static final AudioClip DUMMY_CLIP = new DummyAudioClip();
>
> DummyAppletContext()
> {
> @@ -80,14 +79,7 @@
> */
> public AudioClip getAudioClip(URL url)
> {
> - try
> - {
> - return (url.openConnection() != null ? DUMMY_CLIP : null);
> - }
> - catch (IOException ioe)
> - {
> - return null;
> - }
> + return Applet.newAudioClip(url);
> }
>
> /** Loads the <code>Image</code> instance by delegating to
> @@ -169,32 +161,5 @@
> public Iterator getStreamKeys()
> {
> return Collections.EMPTY_SET.iterator();
> - }
> -
> - /** Dummy <code>AudioClip</code> implementation that does nothing but
> - * preventing <code>NullPointerException</code>S being thrown in programs
> - * that expect a valid <code>AudioClip</code> instance to be returned by
> - * their Applet.
> - *
> - * @author Robert Schuster
> - */
> - static class DummyAudioClip implements AudioClip
> - {
> - public void play()
> - {
> - }
> -
> - public void stop()
> - {
> - }
> -
> - public void loop()
> - {
> - }
> -
> - public String toString()
> - {
> - return "DummyAudioClip never plays anything - implement javax.sound
> and make us happy :)";
> - }
> }
> }
> Index: java/applet/Applet.java
> ===================================================================
> RCS file: /cvsroot/classpath/classpath/java/applet/Applet.java,v
> retrieving revision 1.14
> diff -u -r1.14 Applet.java
> --- java/applet/Applet.java 5 Jul 2005 14:46:11 -0000 1.14
> +++ java/applet/Applet.java 14 Nov 2005 18:27:03 -0000
> @@ -54,6 +54,10 @@
> import javax.accessibility.AccessibleRole;
> import javax.accessibility.AccessibleState;
> import javax.accessibility.AccessibleStateSet;
> +import javax.sound.sampled.AudioSystem;
> +import javax.sound.sampled.Clip;
> +import javax.sound.sampled.LineUnavailableException;
> +import javax.sound.sampled.UnsupportedAudioFileException;
>
> /**
> * This is the base applet class. An applet is a Java program that
> @@ -257,8 +261,6 @@
> * Returns an audio clip from the specified URL. This clip is not tied to
> * any particular applet.
> *
> - * XXX Classpath does not yet implement this.
> - *
> * @param url the URL of the audio clip
> * @return the retrieved audio clip
> * @throws NullPointerException if url is null
> @@ -267,8 +269,7 @@
> */
> public static final AudioClip newAudioClip(URL url)
> {
> - // This requires an implementation of AudioClip in gnu.java.applet.
> - throw new Error("Not implemented");
> + return new URLAudioClip(url);
> }
>
> /**
> @@ -521,4 +522,71 @@
> return s;
> }
> } // class AccessibleApplet
> +
> + private static class URLAudioClip implements AudioClip
> + {
> + // The URL we will try to play.
> + // This is null if we have already tried to create an
> + // audio input stream from this URL.
> + private URL url;
> +
> + // The real audio clip. This is null before the URL is read,
> + // and might be null afterward if we were unable to read the URL
> + // for some reason.
> + private Clip clip;
> +
> + public URLAudioClip(URL url)
> + {
> + this.url = url;
> + }
> +
> + private synchronized Clip getClip()
> + {
> + if (url == null)
> + return clip;
> + try
> + {
> + clip = AudioSystem.getClip();
> + clip.open(AudioSystem.getAudioInputStream(url));
> + }
> + catch (LineUnavailableException _)
> + {
> + // Ignore.
> + }
> + catch (IOException _)
> + {
> + // Ignore.
> + }
> + catch (UnsupportedAudioFileException _)
> + {
> + // Ignore.
> + }
> + url = null;
> + return clip;
> + }
> +
> + public void loop()
> + {
> + Clip myclip = getClip();
> + if (myclip != null)
> + myclip.loop(Clip.LOOP_CONTINUOUSLY);
> + }
> +
> + public void play()
> + {
> + Clip myclip = getClip();
> + if (myclip != null)
> + myclip.start();
> + }
> +
> + public void stop()
> + {
> + Clip myclip = getClip();
> + if (myclip != null)
> + {
> + myclip.stop();
> + myclip.setFramePosition(0);
> + }
> + }
> + }
> } // class Applet
>
>
> _______________________________________________
> Classpath-patches mailing list
> address@hidden
> http://lists.gnu.org/mailman/listinfo/classpath-patches