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 }