/* * Created on Jun 2, 2005 * */ package jmsltestsuite; import java.applet.Applet; import java.io.IOException; import java.io.InputStream; import java.net.URL; import javax.sound.midi.*; /** * @author Nick Didkovsky, didkovn@mail.rockefeller.edu * */ public class TestSoundbankMemoryLeak extends Applet { Soundbank soundbank; private void doMidiTest() throws InvalidMidiDataException, IOException, MidiUnavailableException { System.out.println("Soundbank: " + soundbank); Synthesizer synthesizer; if ((synthesizer = MidiSystem.getSynthesizer()) == null) { throw new RuntimeException("MidiSystem.getSynthesizer() failed!"); } synthesizer.open(); if (soundbank == null) { // JavaSound bug? Cannot repeatedly load soundbank. After 5 loops // get error: javax.sound.midi.InvalidMidiDataException: cannot get soundbank from // stream // so store the soundbank as a field and reuse it instead. soundbank = synthesizer.getDefaultSoundbank(); } else { System.out.println("TestSoundbankMemoryLeak: we have a soundbank we'll reuse"); } if (soundbank == null) { System.out.println("TestSoundbankMemoryLeak: No soundbank installed on client"); } if (soundbank == null) { System.out.println("default Soundbank null, trying URL"); URL soundbankURL = new URL("http://www.algomusic.com/javasound/soundbank.gm"); try { System.out.println("Loading soundbank from " + soundbankURL); InputStream in = soundbankURL.openStream(); soundbank = MidiSystem.getSoundbank(in); in.close(); } catch (InvalidMidiDataException e) { System.err.println("ERROR!!! " + e); } } if (soundbank != null) { System.out.println("synthesizer.loadAllInstruments(soundbank)"); synthesizer.loadAllInstruments(soundbank); } synthesizer.close(); } public void start() { for (int i = 0; i < 20; i++) { try { System.out.println("LOOP " + i); doMidiTest(); } catch (InvalidMidiDataException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (MidiUnavailableException e) { e.printStackTrace(); } } } }