From: plassy <pl...@us...> - 2010-02-18 21:03:24
|
Update of /cvsroot/arianne/stendhal/src/games/stendhal/client/sound/system In directory sfp-cvsdas-1.v30.ch3.sourceforge.com:/tmp/cvs-serv12758/system Modified Files: SoundSystem.java Log Message: bugfix: a NullPointerException is thrown if no audio line can be obtained (bug 2954040) The sound system will not throw any exceptions on construction anymore. if no audio line can be opened the sound system won't play any audio and any SoundSystem.Output will act as a dummy. Index: SoundSystem.java =================================================================== RCS file: /cvsroot/arianne/stendhal/src/games/stendhal/client/sound/system/SoundSystem.java,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** SoundSystem.java 14 Feb 2010 17:06:46 -0000 1.7 --- SoundSystem.java 18 Feb 2010 21:03:11 -0000 1.8 *************** *** 30,33 **** --- 30,35 ---- public static abstract class Output extends SignalProcessor { } + private static class DummyOutput extends Output { } + private static class SystemOutput extends Output { *************** *** 167,171 **** { assert format != null; ! mAudioFormat = format; } --- 169,173 ---- { assert format != null; ! mAudioFormat = format; } *************** *** 254,258 **** private final int mMaxNumLines; ! public SoundSystem(AudioFormat audioFormat, Time bufferDuration, int useMaxMixerLines) throws SoundSystemException { assert audioFormat != null; --- 256,260 ---- private final int mMaxNumLines; ! public SoundSystem(AudioFormat audioFormat, Time bufferDuration, int useMaxMixerLines) { assert audioFormat != null; *************** *** 273,281 **** mMixSystemOutput = new SystemOutput(line); - mSystemOutputs.add(mMixSystemOutput); } catch(LineUnavailableException exception) { ! throw new SoundSystemException("line is unavailable - " + exception.toString()); } } --- 275,282 ---- mMixSystemOutput = new SystemOutput(line); } catch(LineUnavailableException exception) { ! // TODO: logging } } *************** *** 290,299 **** mMixSystemOutput = new SystemOutput(line); - mSystemOutputs.add(mMixSystemOutput); } ! catch(LineUnavailableException e) { } } } ! //* public SoundSystem(Mixer mixer, AudioFormat audioFormat, Time bufferDuration, int useMaxMixerLines) { --- 291,302 ---- mMixSystemOutput = new SystemOutput(line); } ! catch(LineUnavailableException e) ! { ! // TODO: logging ! } } } ! public SoundSystem(Mixer mixer, AudioFormat audioFormat, Time bufferDuration, int useMaxMixerLines) { *************** *** 314,327 **** mMixSystemOutput = new SystemOutput(line); - mSystemOutputs.add(mMixSystemOutput); } ! catch(LineUnavailableException e) { } } ! public SoundSystem(SourceDataLine outputLine, Time bufferDuration) throws SoundSystemException { assert outputLine != null; assert bufferDuration != null; if(!outputLine.isOpen()) { --- 317,335 ---- mMixSystemOutput = new SystemOutput(line); } ! catch(LineUnavailableException e) ! { ! // TODO: logging ! } } ! public SoundSystem(SourceDataLine outputLine, Time bufferDuration) { assert outputLine != null; assert bufferDuration != null; + mMaxNumLines = 0; + mBufferDuration = bufferDuration; + if(!outputLine.isOpen()) { *************** *** 332,343 **** catch(LineUnavailableException e) { ! throw new SoundSystemException(e.toString()); } } - mMaxNumLines = 0; - mBufferDuration = bufferDuration; mMixSystemOutput = new SystemOutput(outputLine); - mSystemOutputs.add(mMixSystemOutput); } --- 340,349 ---- catch(LineUnavailableException e) { ! // TODO: logging ! return; } } mMixSystemOutput = new SystemOutput(outputLine); } *************** *** 377,381 **** } ! return null; } --- 383,387 ---- } ! return new DummyOutput(); } *************** *** 418,422 **** double averageTimeToProcessSound = mBufferDuration.getInNanoSeconds(); ! double multiplicator = 0.990; while(mSystemIsRunning.get()) --- 424,428 ---- double averageTimeToProcessSound = mBufferDuration.getInNanoSeconds(); ! double multiplicator = 0.900; while(mSystemIsRunning.get()) *************** *** 440,445 **** --- 446,453 ---- closeAllOutputs(); + closeOutput(mMixSystemOutput); } + @SuppressWarnings("unchecked") private void processOutputs() { *************** *** 457,460 **** --- 465,471 ---- } + if(mMixSystemOutput != null) + sysOutputs.add(mMixSystemOutput); + for(SystemOutput output: sysOutputs) { *************** *** 467,478 **** } ! int numSamples = mMixSystemOutput.getNumBytesToWrite() / mMixSystemOutput.getNumBytesPerSample(); ! mMixBuffer = Field.expand(mMixBuffer, numSamples, false); ! Arrays.fill(mMixBuffer, 0, numSamples, 0.0f); ! for(MixerOutput output: mixOutputs) ! output.mix(mMixBuffer, numSamples); ! mMixSystemOutput.setBuffer(mMixBuffer, numSamples); while(!sysOutputs.isEmpty()) --- 478,492 ---- } ! if(mMixSystemOutput != null) ! { ! int numSamples = mMixSystemOutput.getNumBytesToWrite() / mMixSystemOutput.getNumBytesPerSample(); ! mMixBuffer = Field.expand(mMixBuffer, numSamples, false); ! Arrays.fill(mMixBuffer, 0, numSamples, 0.0f); ! for(MixerOutput output: mixOutputs) ! output.mix(mMixBuffer, numSamples); ! mMixSystemOutput.setBuffer(mMixBuffer, numSamples); ! } while(!sysOutputs.isEmpty()) |