28 import java.io.DataInputStream;
29 import java.io.File;
30 import java.io.IOException;
31 import java.io.InputStream;
32 import java.net.URL;
33
34 import javax.sound.midi.InvalidMidiDataException;
35 import javax.sound.midi.Soundbank;
36 import javax.sound.midi.spi.SoundbankReader;
37 import javax.sound.sampled.AudioInputStream;
38 import javax.sound.sampled.AudioSystem;
39 import javax.sound.sampled.UnsupportedAudioFileException;
40
41 /**
42 * Soundbank reader that uses audio files as soundbanks.
43 *
44 * @author Karl Helgason
45 */
46 public final class AudioFileSoundbankReader extends SoundbankReader {
47
48 public Soundbank getSoundbank(URL url)
49 throws InvalidMidiDataException, IOException {
50 try {
51 AudioInputStream ais = AudioSystem.getAudioInputStream(url);
52 Soundbank sbk = getSoundbank(ais);
53 ais.close();
54 return sbk;
55 } catch (UnsupportedAudioFileException e) {
56 return null;
57 } catch (IOException e) {
58 return null;
59 }
60 }
61
62 public Soundbank getSoundbank(InputStream stream)
63 throws InvalidMidiDataException, IOException {
64 stream.mark(512);
65 try {
66 AudioInputStream ais = AudioSystem.getAudioInputStream(stream);
67 Soundbank sbk = getSoundbank(ais);
68 if (sbk != null)
69 return sbk;
70 } catch (UnsupportedAudioFileException e) {
71 } catch (IOException e) {
72 }
73 stream.reset();
74 return null;
75 }
76
77 public Soundbank getSoundbank(AudioInputStream ais)
78 throws InvalidMidiDataException, IOException {
79 try {
80 byte[] buffer;
81 if (ais.getFrameLength() == -1) {
91 } else {
92 buffer = new byte[(int) (ais.getFrameLength()
93 * ais.getFormat().getFrameSize())];
94 new DataInputStream(ais).readFully(buffer);
95 }
96 ModelByteBufferWavetable osc = new ModelByteBufferWavetable(
97 new ModelByteBuffer(buffer), ais.getFormat(), -4800);
98 ModelPerformer performer = new ModelPerformer();
99 performer.getOscillators().add(osc);
100
101 SimpleSoundbank sbk = new SimpleSoundbank();
102 SimpleInstrument ins = new SimpleInstrument();
103 ins.add(performer);
104 sbk.addInstrument(ins);
105 return sbk;
106 } catch (Exception e) {
107 return null;
108 }
109 }
110
111 public Soundbank getSoundbank(File file)
112 throws InvalidMidiDataException, IOException {
113 try {
114 AudioInputStream ais = AudioSystem.getAudioInputStream(file);
115 ais.close();
116 ModelByteBufferWavetable osc = new ModelByteBufferWavetable(
117 new ModelByteBuffer(file, 0, file.length()), -4800);
118 ModelPerformer performer = new ModelPerformer();
119 performer.getOscillators().add(osc);
120 SimpleSoundbank sbk = new SimpleSoundbank();
121 SimpleInstrument ins = new SimpleInstrument();
122 ins.add(performer);
123 sbk.addInstrument(ins);
124 return sbk;
125 } catch (UnsupportedAudioFileException e1) {
126 return null;
127 } catch (IOException e) {
128 return null;
129 }
130 }
|
28 import java.io.DataInputStream;
29 import java.io.File;
30 import java.io.IOException;
31 import java.io.InputStream;
32 import java.net.URL;
33
34 import javax.sound.midi.InvalidMidiDataException;
35 import javax.sound.midi.Soundbank;
36 import javax.sound.midi.spi.SoundbankReader;
37 import javax.sound.sampled.AudioInputStream;
38 import javax.sound.sampled.AudioSystem;
39 import javax.sound.sampled.UnsupportedAudioFileException;
40
41 /**
42 * Soundbank reader that uses audio files as soundbanks.
43 *
44 * @author Karl Helgason
45 */
46 public final class AudioFileSoundbankReader extends SoundbankReader {
47
48 @Override
49 public Soundbank getSoundbank(URL url)
50 throws InvalidMidiDataException, IOException {
51 try {
52 AudioInputStream ais = AudioSystem.getAudioInputStream(url);
53 Soundbank sbk = getSoundbank(ais);
54 ais.close();
55 return sbk;
56 } catch (UnsupportedAudioFileException e) {
57 return null;
58 } catch (IOException e) {
59 return null;
60 }
61 }
62
63 @Override
64 public Soundbank getSoundbank(InputStream stream)
65 throws InvalidMidiDataException, IOException {
66 stream.mark(512);
67 try {
68 AudioInputStream ais = AudioSystem.getAudioInputStream(stream);
69 Soundbank sbk = getSoundbank(ais);
70 if (sbk != null)
71 return sbk;
72 } catch (UnsupportedAudioFileException e) {
73 } catch (IOException e) {
74 }
75 stream.reset();
76 return null;
77 }
78
79 public Soundbank getSoundbank(AudioInputStream ais)
80 throws InvalidMidiDataException, IOException {
81 try {
82 byte[] buffer;
83 if (ais.getFrameLength() == -1) {
93 } else {
94 buffer = new byte[(int) (ais.getFrameLength()
95 * ais.getFormat().getFrameSize())];
96 new DataInputStream(ais).readFully(buffer);
97 }
98 ModelByteBufferWavetable osc = new ModelByteBufferWavetable(
99 new ModelByteBuffer(buffer), ais.getFormat(), -4800);
100 ModelPerformer performer = new ModelPerformer();
101 performer.getOscillators().add(osc);
102
103 SimpleSoundbank sbk = new SimpleSoundbank();
104 SimpleInstrument ins = new SimpleInstrument();
105 ins.add(performer);
106 sbk.addInstrument(ins);
107 return sbk;
108 } catch (Exception e) {
109 return null;
110 }
111 }
112
113 @Override
114 public Soundbank getSoundbank(File file)
115 throws InvalidMidiDataException, IOException {
116 try {
117 AudioInputStream ais = AudioSystem.getAudioInputStream(file);
118 ais.close();
119 ModelByteBufferWavetable osc = new ModelByteBufferWavetable(
120 new ModelByteBuffer(file, 0, file.length()), -4800);
121 ModelPerformer performer = new ModelPerformer();
122 performer.getOscillators().add(osc);
123 SimpleSoundbank sbk = new SimpleSoundbank();
124 SimpleInstrument ins = new SimpleInstrument();
125 ins.add(performer);
126 sbk.addInstrument(ins);
127 return sbk;
128 } catch (UnsupportedAudioFileException e1) {
129 return null;
130 } catch (IOException e) {
131 return null;
132 }
133 }
|