- removed verbose logging.

- when stopping a midi, remove the meta listener first so that we
  don't get the event after we've tossed the sequencer.
- changed some variable names for clarity.
- added code to shutdown the midi system when we shutdown the rest.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@1952 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Ray Greenwell
2002-11-15 21:38:31 +00:00
parent 9e881810a9
commit 1d602849f0
@@ -1,5 +1,5 @@
// //
// $Id: SoundManager.java,v 1.14 2002/11/15 20:52:31 ray Exp $ // $Id: SoundManager.java,v 1.15 2002/11/15 21:38:31 ray Exp $
package com.threerings.media; package com.threerings.media;
@@ -154,6 +154,7 @@ public class SoundManager
} else if (DIE == command) { } else if (DIE == command) {
_resourceFreer.stop(); _resourceFreer.stop();
flushResources(true); flushResources(true);
shutdownMidi();
} }
} catch (Exception e) { } catch (Exception e) {
Log.warning("Captured exception in SoundManager loop."); Log.warning("Captured exception in SoundManager loop.");
@@ -440,9 +441,9 @@ public class SoundManager
if (_midiStack.isEmpty()) { if (_midiStack.isEmpty()) {
// no more to play? Stop and shutdown. // no more to play? Stop and shutdown.
_sequencer.removeMetaEventListener(this);
_sequencer.stop(); _sequencer.stop();
_sequencer.close(); _sequencer.close();
_sequencer.removeMetaEventListener(this);
_sequencer = null; _sequencer = null;
_midiChannels = null; _midiChannels = null;
@@ -453,6 +454,22 @@ public class SoundManager
} }
} }
/**
* Stop playing and shutdown the midi system.
*/
protected void shutdownMidi ()
{
// remove all songs but the currently playing
while (_midiStack.size() > 1) {
_midiStack.removeLast();
}
// then stop the currently playing
if (! _midiStack.isEmpty()) {
stopSequence((String) _midiStack.getFirst());
}
}
/** /**
* Attempt to modify the music volume for any playing tracks. * Attempt to modify the music volume for any playing tracks.
*/ */
@@ -463,10 +480,8 @@ public class SoundManager
} else { } else {
int setting = (int) (_musicVol * 127.0); int setting = (int) (_musicVol * 127.0);
Log.info("setting musicvol: " + setting +
", chans=" + _midiChannels.length);
for (int ii=0; ii < _midiChannels.length; ii++) { for (int ii=0; ii < _midiChannels.length; ii++) {
_midiChannels[ii].controlChange(7, (int) (_musicVol * 127)); _midiChannels[ii].controlChange(7, setting);
} }
} }
} }
@@ -720,9 +735,9 @@ public class SoundManager
/** /**
* Use the gain control to implement volume. * Use the gain control to implement volume.
*/ */
protected void adjustVolume (float volume) protected void adjustVolume (float vol)
{ {
FloatControl vol = (FloatControl) FloatControl control = (FloatControl)
_clip.getControl(FloatControl.Type.MASTER_GAIN); _clip.getControl(FloatControl.Type.MASTER_GAIN);
// the only problem is that gain is specified in decibals, // the only problem is that gain is specified in decibals,
@@ -730,14 +745,14 @@ public class SoundManager
// Since we want max volume to leave the sample unchanged, our // Since we want max volume to leave the sample unchanged, our
// maximum volume translates into a 0db gain. // maximum volume translates into a 0db gain.
float gain; float gain;
if (volume == 0f) { if (vol == 0f) {
gain = vol.getMinimum(); gain = control.getMinimum();
} else { } else {
gain = (float) ((Math.log(volume) / Math.log(10.0)) * 20.0); gain = (float) ((Math.log(vol) / Math.log(10.0)) * 20.0);
} }
vol.setValue(gain); control.setValue(gain);
Log.info("Set gain: " + gain); //Log.info("Set gain: " + gain);
} }
/** The timestamp of the moment this clip last stopped playing. */ /** The timestamp of the moment this clip last stopped playing. */