72 public Soundbank getSoundbank(URL url) 73 throws InvalidMidiDataException, IOException { 74 if (!isZIP(url)) 75 return null; 76 ArrayList<Soundbank> soundbanks = new ArrayList<Soundbank>(); 77 URLClassLoader ucl = URLClassLoader.newInstance(new URL[]{url}); 78 InputStream stream = ucl.getResourceAsStream( 79 "META-INF/services/javax.sound.midi.Soundbank"); 80 if (stream == null) 81 return null; 82 try 83 { 84 BufferedReader r = new BufferedReader(new InputStreamReader(stream)); 85 String line = r.readLine(); 86 while (line != null) { 87 if (!line.startsWith("#")) { 88 try { 89 Class<?> c = Class.forName(line.trim(), false, ucl); 90 if (Soundbank.class.isAssignableFrom(c)) { 91 ReflectUtil.checkPackageAccess(c); 92 Object o = c.newInstance(); 93 soundbanks.add((Soundbank) o); 94 } 95 } catch (ClassNotFoundException ignored) { 96 } catch (InstantiationException ignored) { 97 } catch (IllegalAccessException ignored) { 98 } 99 } 100 line = r.readLine(); 101 } 102 } 103 finally 104 { 105 stream.close(); 106 } 107 if (soundbanks.size() == 0) 108 return null; 109 if (soundbanks.size() == 1) 110 return soundbanks.get(0); 111 SimpleSoundbank sbk = new SimpleSoundbank(); 112 for (Soundbank soundbank : soundbanks) 113 sbk.addAllInstruments(soundbank); 114 return sbk; 115 } 116 117 public Soundbank getSoundbank(InputStream stream) | 72 public Soundbank getSoundbank(URL url) 73 throws InvalidMidiDataException, IOException { 74 if (!isZIP(url)) 75 return null; 76 ArrayList<Soundbank> soundbanks = new ArrayList<Soundbank>(); 77 URLClassLoader ucl = URLClassLoader.newInstance(new URL[]{url}); 78 InputStream stream = ucl.getResourceAsStream( 79 "META-INF/services/javax.sound.midi.Soundbank"); 80 if (stream == null) 81 return null; 82 try 83 { 84 BufferedReader r = new BufferedReader(new InputStreamReader(stream)); 85 String line = r.readLine(); 86 while (line != null) { 87 if (!line.startsWith("#")) { 88 try { 89 Class<?> c = Class.forName(line.trim(), false, ucl); 90 if (Soundbank.class.isAssignableFrom(c)) { 91 ReflectUtil.checkPackageAccess(c); 92 @SuppressWarnings("deprecation") 93 Object o = c.newInstance(); 94 soundbanks.add((Soundbank) o); 95 } 96 } catch (ClassNotFoundException | 97 InstantiationException | 98 IllegalAccessException ignored) { 99 } 100 } 101 line = r.readLine(); 102 } 103 } 104 finally 105 { 106 stream.close(); 107 } 108 if (soundbanks.size() == 0) 109 return null; 110 if (soundbanks.size() == 1) 111 return soundbanks.get(0); 112 SimpleSoundbank sbk = new SimpleSoundbank(); 113 for (Soundbank soundbank : soundbanks) 114 sbk.addAllInstruments(soundbank); 115 return sbk; 116 } 117 118 public Soundbank getSoundbank(InputStream stream) |