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