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="https://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         }