From 1ebd28a4505f5eb77229c0a2b0300ed5b064a288 Mon Sep 17 00:00:00 2001 From: Dave Hoover Date: Wed, 17 Oct 2007 23:34:32 +0000 Subject: [PATCH] Little bit of widening, type safety, and flagging overrides. git-svn-id: svn+ssh://src.earth.threerings.net/nenya/trunk@306 ed5b42cb-e716-0410-a449-f6a68f950b19 --- .../threerings/media/sound/MidiPlayer.java | 10 +- .../com/threerings/media/sound/ModPlayer.java | 21 ++- .../com/threerings/media/sound/Mp3Player.java | 19 ++- .../threerings/media/sound/MusicManager.java | 30 ++--- .../threerings/media/sound/SoundCodes.java | 7 +- .../threerings/media/sound/SoundManager.java | 127 +++++++----------- 6 files changed, 87 insertions(+), 127 deletions(-) diff --git a/src/java/com/threerings/media/sound/MidiPlayer.java b/src/java/com/threerings/media/sound/MidiPlayer.java index 88b6ad8f..7154fbe9 100644 --- a/src/java/com/threerings/media/sound/MidiPlayer.java +++ b/src/java/com/threerings/media/sound/MidiPlayer.java @@ -39,7 +39,7 @@ import javax.sound.midi.Synthesizer; public class MidiPlayer extends MusicPlayer implements MetaEventListener { - // documentation inherited + @Override // documentation inherited public void init () throws Exception { @@ -50,13 +50,13 @@ public class MidiPlayer extends MusicPlayer } } - // documentation inherited + @Override // documentation inherited public void shutdown () { _sequencer.close(); } - // documentation inherited + @Override // documentation inherited public void start (InputStream stream) throws Exception { @@ -65,14 +65,14 @@ public class MidiPlayer extends MusicPlayer _sequencer.addMetaEventListener(this); } - // documentation inherited + @Override // documentation inherited public void stop () { _sequencer.removeMetaEventListener(this); _sequencer.stop(); } - // documentation inherited + @Override // documentation inherited public void setVolume (float volume) { if (_channels != null) { diff --git a/src/java/com/threerings/media/sound/ModPlayer.java b/src/java/com/threerings/media/sound/ModPlayer.java index 94e661a2..457f30ed 100644 --- a/src/java/com/threerings/media/sound/ModPlayer.java +++ b/src/java/com/threerings/media/sound/ModPlayer.java @@ -37,7 +37,7 @@ import micromod.resamplers.LinearResampler; */ public class ModPlayer extends MusicPlayer { - // documentation inherited + @Override // documentation inherited public void init () throws Exception { @@ -45,20 +45,19 @@ public class ModPlayer extends MusicPlayer _device.start(); } - // documentation inherited + @Override // documentation inherited public void shutdown () { _device.stop(); } - // documentation inherited + @Override // documentation inherited public void start (InputStream stream) throws Exception { Module module = ModuleLoader.read(new DataInputStream(stream)); - final MicroMod mod = new MicroMod( - module, _device, new LinearResampler()); + final MicroMod mod = new MicroMod(module, _device, new LinearResampler()); _player = new Thread("narya mod player") { public void run () { @@ -86,13 +85,13 @@ public class ModPlayer extends MusicPlayer _player.start(); } - // documentation inherited + @Override // documentation inherited public void stop () { _player = null; } - // documentation inherited + @Override // documentation inherited public void setVolume (float vol) { _device.setVolume(vol); @@ -110,17 +109,13 @@ public class ModPlayer extends MusicPlayer super(new SS16LEAudioFormatConverter(), 44100, 1000); } - /** - * Adjust the volume of the line that we're sending our mod data to. - */ + @Override // documentation inherited public void setVolume (float vol) { SoundManager.adjustVolume(sourceDataLine, vol); } - /** - * Access the drain method of the line. - */ + @Override // documentation inherited public void drain () { sourceDataLine.drain(); diff --git a/src/java/com/threerings/media/sound/Mp3Player.java b/src/java/com/threerings/media/sound/Mp3Player.java index 8b2c9281..48973c32 100644 --- a/src/java/com/threerings/media/sound/Mp3Player.java +++ b/src/java/com/threerings/media/sound/Mp3Player.java @@ -43,7 +43,7 @@ import com.threerings.media.Log; */ public class Mp3Player extends MusicPlayer { - // documentation inherited + @Override // documentation inherited public void init () { // TODO: some stuff needs to move here, like setting up the line @@ -51,12 +51,12 @@ public class Mp3Player extends MusicPlayer // out (the format might always be known..). } - // documentation inherited + @Override // documentation inherited public void shutdown () { } - // documentation inherited + @Override // documentation inherited public void start (final InputStream stream) throws Exception { @@ -74,15 +74,12 @@ public class Mp3Player extends MusicPlayer } AudioFormat sourceFormat = inStream.getFormat(); - AudioFormat.Encoding targetEnc = - AudioFormat.Encoding.PCM_SIGNED; + AudioFormat.Encoding targetEnc = AudioFormat.Encoding.PCM_SIGNED; - inStream = AudioSystem.getAudioInputStream( - targetEnc, inStream); + inStream = AudioSystem.getAudioInputStream(targetEnc, inStream); AudioFormat format = inStream.getFormat(); - DataLine.Info info = new DataLine.Info( - SourceDataLine.class, format); + DataLine.Info info = new DataLine.Info(SourceDataLine.class, format); try { _line = (SourceDataLine) AudioSystem.getLine(info); @@ -122,13 +119,13 @@ public class Mp3Player extends MusicPlayer _player.start(); } - // documentation inherited + @Override // documentation inherited public void stop () { _player = null; } - // documentation inherited + @Override // documentation inherited public void setVolume (float volume) { // TODO : line won't be null when we initialize it in the right place diff --git a/src/java/com/threerings/media/sound/MusicManager.java b/src/java/com/threerings/media/sound/MusicManager.java index 104bdb29..fa61266f 100644 --- a/src/java/com/threerings/media/sound/MusicManager.java +++ b/src/java/com/threerings/media/sound/MusicManager.java @@ -61,8 +61,7 @@ public class MusicManager } /** - * Returns a string summarizing our volume settings and disabled sound - * types. + * Returns a string summarizing our volume settings and disabled sound types. */ public String summarizeState () { @@ -138,7 +137,7 @@ public class MusicManager MusicKey mkey = new MusicKey(pkgPath, key, -1); if (!_musicStack.isEmpty()) { - MusicKey current = (MusicKey) _musicStack.getFirst(); + MusicKey current = _musicStack.getFirst(); // if we're currently playing this song.. if (mkey.equals(current)) { @@ -155,7 +154,7 @@ public class MusicManager } else { // we aren't currently playing this song. Simply remove. - for (Iterator iter=_musicStack.iterator(); iter.hasNext(); ) { + for (Iterator iter=_musicStack.iterator(); iter.hasNext(); ) { if (key.equals(iter.next())) { iter.remove(); return; @@ -165,8 +164,7 @@ public class MusicManager } } - Log.debug("Sequence stopped that wasn't in the stack anymore " + - "[key=" + mkey + "]."); + Log.debug("Sequence stopped that wasn't in the stack anymore [key=" + mkey + "]."); } /** @@ -178,15 +176,14 @@ public class MusicManager return; } - // if the volume is off, we don't actually want to play anything - // but we want to at least decrement any loopers by one - // and keep them on the top of the queue + // if the volume is off, we don't actually want to play anything but we want to at least + // decrement any loopers by one and keep them on the top of the queue if (_musicVol == 0f) { handleMusicStopped(); return; } - MusicKey info = (MusicKey) _musicStack.getFirst(); + MusicKey info = _musicStack.getFirst(); Config c = _smgr.getConfig(info); String[] names = c.getValue(info.key, (String[])null); @@ -208,7 +205,7 @@ public class MusicManager } // shutdown the old player if we're switching music types - if (! playerClass.isInstance(_musicPlayer)) { + if (!playerClass.isInstance(_musicPlayer)) { if (_musicPlayer != null) { _musicPlayer.shutdown(); } @@ -219,8 +216,8 @@ public class MusicManager _musicPlayer.init(_playerListener); } catch (Exception e) { - Log.warning("Unable to instantiate music player [class=" + - playerClass + ", e=" + e + "]."); + Log.warning("Unable to instantiate music player [class=" + playerClass + + ", e=" + e + "]."); // scrap it, try again with the next song _musicPlayer = null; @@ -271,8 +268,7 @@ public class MusicManager } /** - * Stop whatever song is currently playing and deal with the - * MusicKey associated with it. + * Stop whatever song is currently playing and deal with the MusicKey associated with it. */ protected void handleMusicStopped () { @@ -281,7 +277,7 @@ public class MusicManager } // see what was playing - MusicKey current = (MusicKey) _musicStack.getFirst(); + MusicKey current = _musicStack.getFirst(); // see how many times the song was to loop and act accordingly switch (current.loops) { @@ -333,7 +329,7 @@ public class MusicManager protected float _musicVol = 1f; /** The stack of songs that we're playing. */ - protected LinkedList _musicStack = new LinkedList(); + protected LinkedList _musicStack = new LinkedList(); /** The current music player, if any. */ protected MusicPlayer _musicPlayer; diff --git a/src/java/com/threerings/media/sound/SoundCodes.java b/src/java/com/threerings/media/sound/SoundCodes.java index 4a33169d..8d9c1c6a 100644 --- a/src/java/com/threerings/media/sound/SoundCodes.java +++ b/src/java/com/threerings/media/sound/SoundCodes.java @@ -29,14 +29,13 @@ import com.threerings.media.sound.SoundManager.SoundType; public interface SoundCodes { /** - * Alert sounds are the type of sounds a player would hear when - * getting a puzzle challenge. + * Alert sounds are the type of sounds a player would hear when getting a puzzle challenge. */ public static final SoundType ALERT = new SoundType("alert"); /** - * Feedback sounds are the type of sounds a player would here when - * clicking on buttons or performing an action. + * Feedback sounds are the type of sounds a player would here when clicking on buttons or + * performing an action. */ public static final SoundType FEEDBACK = new SoundType("feedback"); diff --git a/src/java/com/threerings/media/sound/SoundManager.java b/src/java/com/threerings/media/sound/SoundManager.java index 7695cc3f..8e4e356c 100644 --- a/src/java/com/threerings/media/sound/SoundManager.java +++ b/src/java/com/threerings/media/sound/SoundManager.java @@ -82,8 +82,7 @@ public class SoundManager { /** * Construct a new SoundType. - * Which should be a static variable stashed somewhere for the - * entire application to share. + * Which should be a static variable stashed somewhere for the entire application to share. * * @param strname a short string identifier, preferably without spaces. */ @@ -92,6 +91,7 @@ public class SoundManager _strname = strname; } + @Override // documentation inherited public String toString () { return _strname; @@ -107,10 +107,9 @@ public class SoundManager { /** * Stop playing or looping the sound. - * At present, the granularity of this command is limited to the - * buffer size of the line spooler, or about 8k of data. Thus, - * if playing an 11khz sample, it could take 8/11ths of a second - * for the sound to actually stop playing. + * At present, the granularity of this command is limited to the buffer size of the + * line spooler, or about 8k of data. Thus, if playing an 11khz sample, it could take + * 8/11ths of a second for the sound to actually stop playing. */ public void stop (); @@ -154,8 +153,7 @@ public class SoundManager * @param defaultClipPath The pathname of a sound clip to use as a * fallback if another sound clip cannot be located. */ - public SoundManager ( - ResourceManager rmgr, String defaultClipBundle, String defaultClipPath) + public SoundManager (ResourceManager rmgr, String defaultClipBundle, String defaultClipPath) { // save things off _rmgr = rmgr; @@ -182,8 +180,7 @@ public class SoundManager } /** - * Returns a string summarizing our volume settings and disabled sound - * types. + * Returns a string summarizing our volume settings and disabled sound types. */ public String summarizeState () { @@ -191,7 +188,7 @@ public class SoundManager buf.append("clipVol=").append(_clipVol); buf.append(", disabled=["); int ii = 0; - for (Iterator iter = _disabledTypes.iterator(); iter.hasNext(); ) { + for (Iterator iter = _disabledTypes.iterator(); iter.hasNext(); ) { if (ii++ > 0) { buf.append(", "); } @@ -311,16 +308,14 @@ public class SoundManager * @param delay the delay in milliseconds. * @param pan a value from -1f (all left) to +1f (all right). */ - public void play ( - SoundType type, String pkgPath, String key, int delay, float pan) + public void play (SoundType type, String pkgPath, String key, int delay, float pan) { if (type == null) { type = DEFAULT; // let the lazy kids play too } if ((_clipVol != 0f) && isEnabled(type)) { - final SoundKey skey = new SoundKey(PLAY, pkgPath, key, delay, - _clipVol, pan); + final SoundKey skey = new SoundKey(PLAY, pkgPath, key, delay, _clipVol, pan); if (delay > 0) { new Interval() { public void expired () { @@ -372,8 +367,8 @@ public class SoundManager } } else /* if (_verbose.getValue()) */ { - Log.warning("SoundManager not playing sound because " + - "too many sounds in queue [key=" + skey + "]."); + Log.warning("SoundManager not playing sound because too many sounds in queue " + + "[key=" + skey + "]."); } } @@ -390,8 +385,7 @@ public class SoundManager } else { _queue.appendLoud(key); queued = true; - add = okToStartNew && (_freeSpoolers == 0) && - (_spoolerCount < MAX_SPOOLERS); + add = okToStartNew && (_freeSpoolers == 0) && (_spoolerCount < MAX_SPOOLERS); if (add) { _spoolerCount++; } @@ -422,12 +416,12 @@ public class SoundManager SoundKey key; synchronized (_queue) { _freeSpoolers++; - key = (SoundKey) _queue.get(MAX_WAIT_TIME); + key = _queue.get(MAX_WAIT_TIME); _freeSpoolers--; if (key == null || key.cmd == DIE) { _spoolerCount--; - // if dieing and there are others to kill, do so + // if dying and there are others to kill, do so if (key != null && _spoolerCount > 0) { _queue.appendLoud(key); } @@ -464,8 +458,7 @@ public class SoundManager // copy cached to lock map _lockedClips.put(key, _clipCache.get(key)); } catch (Exception e) { - // don't whine about LOCK failures unless - // we are verbosely logging + // don't whine about LOCK failures unless we are verbosely logging if (_verbose.getValue()) { throw e; } @@ -568,34 +561,28 @@ public class SoundManager if (sampleSize == AudioSystem.NOT_SPECIFIED) { sampleSize = 16; } - int drainTime = (int) Math.ceil( - (LINEBUF_SIZE * 8 * 1000) / (sampleRate * sampleSize)); + int drainTime = (int) Math.ceil((LINEBUF_SIZE * 8 * 1000) / (sampleRate * sampleSize)); // add in a fudge factor of half a second drainTime += 500; try { Thread.sleep(drainTime); - } catch (InterruptedException ie) { - } + } catch (InterruptedException ie) { } } catch (IOException ioe) { - Log.warning("Error loading sound file [key=" + key + - ", e=" + ioe + "]."); + Log.warning("Error loading sound file [key=" + key + ", e=" + ioe + "]."); } catch (UnsupportedAudioFileException uafe) { - Log.warning("Unsupported sound format [key=" + key + - ", e=" + uafe + "]."); + Log.warning("Unsupported sound format [key=" + key + ", e=" + uafe + "]."); } catch (LineUnavailableException lue) { - String err = "Line not available to play sound [key=" + key.key + - ", e=" + lue + "]."; + String err = "Line not available to play sound [key=" + key.key + ", e=" + lue + "]."; if (_soundSeemsToWork) { Log.warning(err); } else { - // this error comes every goddamned time we play a sound on - // someone with a misconfigured sound card, so let's just keep - // it to ourselves + // this error comes every goddamned time we play a sound on someone with a + // misconfigured sound card, so let's just keep it to ourselves Log.debug(err); } @@ -616,8 +603,7 @@ public class SoundManager } /** - * Called by spooling threads, loads clip data from the resource - * manager or the cache. + * Called by spooling threads, loads clip data from the resource manager or the cache. */ protected byte[] getClipData (SoundKey key) throws IOException, UnsupportedAudioFileException @@ -630,13 +616,13 @@ public class SoundManager _clipCache.clear(); } - data = (byte[][]) _clipCache.get(key); + data = _clipCache.get(key); // see if it's in the locked cache (we first look in the regular // clip cache so that locked clips that are still cached continue // to be moved to the head of the LRU queue) if (data == null) { - data = (byte[][]) _lockedClips.get(key); + data = _lockedClips.get(key); } if (data == null) { @@ -714,8 +700,7 @@ public class SoundManager try { return new FileInputStream(pick); } catch (Exception e) { - Log.warning("Error reading test sound [e=" + e + ", file=" + - pick + "]."); + Log.warning("Error reading test sound [e=" + e + ", file=" + pick + "]."); } } return null; @@ -735,15 +720,13 @@ public class SoundManager try { clipin = _rmgr.getResource(path); } catch (FileNotFoundException fnfe2) { - // only play the default sound if we have verbose sound - // debuggin turned on. + // only play the default sound if we have verbose sound debugging turned on. if (_verbose.getValue()) { - Log.warning("Could not locate sound data [bundle=" + - bundle + ", path=" + path + "]."); + Log.warning("Could not locate sound data [bundle=" + bundle + + ", path=" + path + "]."); if (_defaultClipPath != null) { try { - clipin = _rmgr.getResource( - _defaultClipBundle, _defaultClipPath); + clipin = _rmgr.getResource(_defaultClipBundle, _defaultClipPath); } catch (FileNotFoundException fnfe3) { try { clipin = _rmgr.getResource(_defaultClipPath); @@ -773,7 +756,7 @@ public class SoundManager */ protected Config getConfig (SoundKey key) { - Config c = (Config) _configs.get(key.pkgPath); + Config c = _configs.get(key.pkgPath); if (c == null) { String propPath = key.pkgPath + Sounds.PROP_NAME; Properties props = new Properties(); @@ -818,11 +801,9 @@ public class SoundManager */ protected static void adjustVolume (Line line, float vol) { - FloatControl control = (FloatControl) - line.getControl(FloatControl.Type.MASTER_GAIN); + FloatControl control = (FloatControl) line.getControl(FloatControl.Type.MASTER_GAIN); - // the only problem is that gain is specified in decibals, - // which is a logarithmic scale. + // the only problem is that gain is specified in decibals, which is a logarithmic scale. // Since we want max volume to leave the sample unchanged, our // maximum volume translates into a 0db gain. float gain; @@ -842,8 +823,7 @@ public class SoundManager protected static void adjustPan (Line line, float pan) { try { - FloatControl control = - (FloatControl) line.getControl(FloatControl.Type.PAN); + FloatControl control = (FloatControl) line.getControl(FloatControl.Type.PAN); control.setValue(pan); } catch (Exception e) { Log.debug("Cannot set pan on line: " + e); @@ -897,8 +877,7 @@ public class SoundManager /** * Constructor for a sound effect soundkey. */ - public SoundKey (byte cmd, String pkgPath, String key, int delay, - float volume, float pan) + public SoundKey (byte cmd, String pkgPath, String key, int delay, float volume, float pan) { this(cmd, pkgPath, key); @@ -950,26 +929,24 @@ public class SoundManager return (stamp + MAX_SOUND_DELAY < System.currentTimeMillis()); } - // documentation inherited + @Override // documentation inherited public String toString () { - return "SoundKey{cmd=" + cmd + ", pkgPath=" + pkgPath + - ", key=" + key + "}"; + return "SoundKey{cmd=" + cmd + ", pkgPath=" + pkgPath + ", key=" + key + "}"; } - // documentation inherited + @Override // documentation inherited public int hashCode () { return pkgPath.hashCode() ^ key.hashCode(); } - // documentation inherited + @Override // documentation inherited public boolean equals (Object o) { if (o instanceof SoundKey) { SoundKey that = (SoundKey) o; - return this.pkgPath.equals(that.pkgPath) && - this.key.equals(that.key); + return this.pkgPath.equals(that.pkgPath) && this.key.equals(that.key); } return false; } @@ -982,7 +959,7 @@ public class SoundManager protected ResourceManager _rmgr; /** The queue of sound clips to be played. */ - protected Queue _queue = new Queue(); + protected Queue _queue = new Queue(); /** The number of currently active LineSpoolers. */ protected int _spoolerCount, _freeSpoolers; @@ -994,18 +971,18 @@ public class SoundManager protected float _clipVol = 1f; /** The cache of recent audio clips . */ - protected LRUHashMap _clipCache = new LRUHashMap(10); + protected LRUHashMap _clipCache = new LRUHashMap(10); /** The set of locked audio clips; this is separate from the LRU so * that locking clips doesn't booch up an otherwise normal caching * agenda. */ - protected HashMap _lockedClips = new HashMap(); + protected HashMap _lockedClips = new HashMap(); /** A set of soundTypes for which sound is enabled. */ - protected HashSet _disabledTypes = new HashSet(); + protected HashSet _disabledTypes = new HashSet(); /** A cache of config objects we've created. */ - protected LRUHashMap _configs = new LRUHashMap(5); + protected LRUHashMap _configs = new LRUHashMap(5); /** Soundkey command constants. */ protected static final byte PLAY = 0; @@ -1017,26 +994,22 @@ public class SoundManager /** A pref that specifies a directory for us to get test sounds from. */ protected static RuntimeAdjust.FileAdjust _testDir = new RuntimeAdjust.FileAdjust( - "Test sound directory", "narya.media.sound.test_dir", - MediaPrefs.config, true, ""); + "Test sound directory", "narya.media.sound.test_dir", MediaPrefs.config, true, ""); protected static RuntimeAdjust.BooleanAdjust _verbose = new RuntimeAdjust.BooleanAdjust( - "Verbose sound event logging", "narya.media.sound.verbose", - MediaPrefs.config, false); + "Verbose sound event logging", "narya.media.sound.verbose", MediaPrefs.config, false); /** The queue size at which we start to ignore requests to play sounds. */ protected static final int MAX_QUEUE_SIZE = 25; - /** The maximum time after which we throw away a sound rather - * than play it. */ + /** The maximum time after which we throw away a sound rather than play it. */ protected static final long MAX_SOUND_DELAY = 400L; /** The size of the line's buffer. */ protected static final int LINEBUF_SIZE = 8 * 1024; - /** The maximum time a spooler will wait for a stream before - * deciding to shut down. */ + /** The maximum time a spooler will wait for a stream before deciding to shut down. */ protected static final long MAX_WAIT_TIME = 30000L; /** The maximum number of spoolers we'll allow. This is a lot. */