001 package com.croftsoft.core.media.sound;
002
003 import java.applet.*;
004 import java.net.*;
005 import java.util.*;
006
007 /*********************************************************************
008 * Manages the play of multiple AudioClips.
009 *
010 * @author
011 * <a href="http://www.CroftSoft.com/">David Wallace Croft</a>
012 * @version
013 * 1999-11-26
014 *********************************************************************/
015
016 public final class AudioJukebox
017 //////////////////////////////////////////////////////////////////////
018 //////////////////////////////////////////////////////////////////////
019 {
020
021 private final Map nameToClipMap;
022
023 private AudioClip audioClip;
024
025 //////////////////////////////////////////////////////////////////////
026 // Static methods
027 //////////////////////////////////////////////////////////////////////
028
029 public static void main ( String [ ] args )
030 throws MalformedURLException
031 //////////////////////////////////////////////////////////////////////
032 {
033 randomPlay ( 1000, args );
034 }
035
036 public static void randomPlay (
037 long playTime,
038 String [ ] audioClipNames )
039 throws MalformedURLException
040 //////////////////////////////////////////////////////////////////////
041 {
042 Map nameToClipMap = new HashMap ( );
043
044 for ( int i = 0; i < audioClipNames.length; i++ )
045 {
046 URL audioClipURL = nameToClipMap.getClass ( ).getResource (
047 audioClipNames [ i ] );
048
049 AudioClip audioClip = Applet.newAudioClip ( audioClipURL );
050
051 nameToClipMap.put ( audioClipNames [ i ], audioClip );
052 }
053
054 AudioJukebox audioJukebox = new AudioJukebox ( nameToClipMap );
055
056 Random random = new Random ( );
057
058 while ( true )
059 {
060 audioJukebox.play (
061 audioClipNames [ random.nextInt ( audioClipNames.length ) ] );
062
063 try
064 {
065 Thread.sleep ( playTime );
066 }
067 catch ( InterruptedException ex )
068 {
069 }
070 }
071 }
072
073 //////////////////////////////////////////////////////////////////////
074 // Constructor methods
075 //////////////////////////////////////////////////////////////////////
076
077 public AudioJukebox ( Map nameToClipMap )
078 //////////////////////////////////////////////////////////////////////
079 {
080 if ( nameToClipMap == null )
081 {
082 throw new IllegalArgumentException ( "null nameToClipMap" );
083 }
084
085 this.nameToClipMap = nameToClipMap;
086 }
087
088 //////////////////////////////////////////////////////////////////////
089 // Instance methods
090 //////////////////////////////////////////////////////////////////////
091
092 // addAudioClip()
093
094 // removeAudioClip()
095
096 // public void play ( String audioClipName, int priority.....? )
097
098 public void play ( String audioClipName )
099 //////////////////////////////////////////////////////////////////////
100 {
101 stop ( );
102
103 audioClip = ( AudioClip ) nameToClipMap.get ( audioClipName );
104
105 try
106 {
107 audioClip.play ( );
108 }
109 catch ( NullPointerException ex )
110 {
111 }
112 }
113
114 public void stop ( )
115 //////////////////////////////////////////////////////////////////////
116 {
117 try
118 {
119 audioClip.stop ( );
120 }
121 catch ( NullPointerException ex )
122 {
123 }
124 }
125
126 //////////////////////////////////////////////////////////////////////
127 //////////////////////////////////////////////////////////////////////
128 }