diff options
Diffstat (limited to 'songdbj/javazoom/spi/vorbis/sampled/convert/VorbisFormatConversionProvider.java')
-rw-r--r-- | songdbj/javazoom/spi/vorbis/sampled/convert/VorbisFormatConversionProvider.java | 244 |
1 files changed, 244 insertions, 0 deletions
diff --git a/songdbj/javazoom/spi/vorbis/sampled/convert/VorbisFormatConversionProvider.java b/songdbj/javazoom/spi/vorbis/sampled/convert/VorbisFormatConversionProvider.java new file mode 100644 index 0000000000..d1321f2590 --- /dev/null +++ b/songdbj/javazoom/spi/vorbis/sampled/convert/VorbisFormatConversionProvider.java | |||
@@ -0,0 +1,244 @@ | |||
1 | /* | ||
2 | * VorbisFormatConversionProvider. | ||
3 | * | ||
4 | * JavaZOOM : vorbisspi@javazoom.net | ||
5 | * http://www.javazoom.net | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU Library General Public License as published | ||
9 | * by the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU Library General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU Library General Public | ||
18 | * License along with this program; if not, write to the Free Software | ||
19 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
20 | * | ||
21 | */ | ||
22 | |||
23 | package javazoom.spi.vorbis.sampled.convert; | ||
24 | |||
25 | import java.util.Arrays; | ||
26 | import javazoom.spi.vorbis.sampled.file.VorbisEncoding; | ||
27 | import javax.sound.sampled.AudioFormat; | ||
28 | import javax.sound.sampled.AudioInputStream; | ||
29 | |||
30 | import org.tritonus.share.sampled.convert.TMatrixFormatConversionProvider; | ||
31 | |||
32 | /** | ||
33 | * ConversionProvider for VORBIS files. | ||
34 | */ | ||
35 | public class VorbisFormatConversionProvider extends TMatrixFormatConversionProvider | ||
36 | { | ||
37 | private static final AudioFormat[] INPUT_FORMATS = | ||
38 | { | ||
39 | new AudioFormat(VorbisEncoding.VORBISENC, 32000.0F, -1, 1, -1, -1, false), // 0 | ||
40 | new AudioFormat(VorbisEncoding.VORBISENC, 32000.0F, -1, 2, -1, -1, false), // 1 | ||
41 | new AudioFormat(VorbisEncoding.VORBISENC, 44100.0F, -1, 1, -1, -1, false), // 2 | ||
42 | new AudioFormat(VorbisEncoding.VORBISENC, 44100.0F, -1, 2, -1, -1, false), // 3 | ||
43 | new AudioFormat(VorbisEncoding.VORBISENC, 48000.0F, -1, 1, -1, -1, false), // 4 | ||
44 | new AudioFormat(VorbisEncoding.VORBISENC, 48000.0F, -1, 2, -1, -1, false), // 5 | ||
45 | |||
46 | new AudioFormat(VorbisEncoding.VORBISENC, 16000.0F, -1, 1, -1, -1, false), // 18 | ||
47 | new AudioFormat(VorbisEncoding.VORBISENC, 16000.0F, -1, 2, -1, -1, false), // 19 | ||
48 | new AudioFormat(VorbisEncoding.VORBISENC, 22050.0F, -1, 1, -1, -1, false), // 20 | ||
49 | new AudioFormat(VorbisEncoding.VORBISENC, 22050.0F, -1, 2, -1, -1, false), // 21 | ||
50 | new AudioFormat(VorbisEncoding.VORBISENC, 24000.0F, -1, 1, -1, -1, false), // 22 | ||
51 | new AudioFormat(VorbisEncoding.VORBISENC, 24000.0F, -1, 2, -1, -1, false), // 23 | ||
52 | |||
53 | new AudioFormat(VorbisEncoding.VORBISENC, 8000.0F, -1, 1, -1, -1, false), // 36 | ||
54 | new AudioFormat(VorbisEncoding.VORBISENC, 8000.0F, -1, 2, -1, -1, false), // 37 | ||
55 | new AudioFormat(VorbisEncoding.VORBISENC, 11025.0F, -1, 1, -1, -1, false), // 38 | ||
56 | new AudioFormat(VorbisEncoding.VORBISENC, 11025.0F, -1, 2, -1, -1, false), // 39 | ||
57 | new AudioFormat(VorbisEncoding.VORBISENC, 12000.0F, -1, 1, -1, -1, false), // 40 | ||
58 | new AudioFormat(VorbisEncoding.VORBISENC, 12000.0F, -1, 2, -1, -1, false), // 41 | ||
59 | }; | ||
60 | |||
61 | private static final AudioFormat[] OUTPUT_FORMATS = | ||
62 | { | ||
63 | new AudioFormat(8000.0F, 16, 1, true, false), // 0 | ||
64 | new AudioFormat(8000.0F, 16, 1, true, true), // 1 | ||
65 | new AudioFormat(8000.0F, 16, 2, true, false), // 2 | ||
66 | new AudioFormat(8000.0F, 16, 2, true, true), // 3 | ||
67 | /* 24 and 32 bit not yet possible | ||
68 | new AudioFormat(8000.0F, 24, 1, true, false), | ||
69 | new AudioFormat(8000.0F, 24, 1, true, true), | ||
70 | new AudioFormat(8000.0F, 24, 2, true, false), | ||
71 | new AudioFormat(8000.0F, 24, 2, true, true), | ||
72 | new AudioFormat(8000.0F, 32, 1, true, false), | ||
73 | new AudioFormat(8000.0F, 32, 1, true, true), | ||
74 | new AudioFormat(8000.0F, 32, 2, true, false), | ||
75 | new AudioFormat(8000.0F, 32, 2, true, true), | ||
76 | */ | ||
77 | new AudioFormat(11025.0F, 16, 1, true, false), // 4 | ||
78 | new AudioFormat(11025.0F, 16, 1, true, true), // 5 | ||
79 | new AudioFormat(11025.0F, 16, 2, true, false), // 6 | ||
80 | new AudioFormat(11025.0F, 16, 2, true, true), // 7 | ||
81 | /* 24 and 32 bit not yet possible | ||
82 | new AudioFormat(11025.0F, 24, 1, true, false), | ||
83 | new AudioFormat(11025.0F, 24, 1, true, true), | ||
84 | new AudioFormat(11025.0F, 24, 2, true, false), | ||
85 | new AudioFormat(11025.0F, 24, 2, true, true), | ||
86 | new AudioFormat(11025.0F, 32, 1, true, false), | ||
87 | new AudioFormat(11025.0F, 32, 1, true, true), | ||
88 | new AudioFormat(11025.0F, 32, 2, true, false), | ||
89 | new AudioFormat(11025.0F, 32, 2, true, true), | ||
90 | */ | ||
91 | new AudioFormat(12000.0F, 16, 1, true, false), // 8 | ||
92 | new AudioFormat(12000.0F, 16, 1, true, true), // 9 | ||
93 | new AudioFormat(12000.0F, 16, 2, true, false), // 10 | ||
94 | new AudioFormat(12000.0F, 16, 2, true, true), // 11 | ||
95 | /* 24 and 32 bit not yet possible | ||
96 | new AudioFormat(12000.0F, 24, 1, true, false), | ||
97 | new AudioFormat(12000.0F, 24, 1, true, true), | ||
98 | new AudioFormat(12000.0F, 24, 2, true, false), | ||
99 | new AudioFormat(12000.0F, 24, 2, true, true), | ||
100 | new AudioFormat(12000.0F, 32, 1, true, false), | ||
101 | new AudioFormat(12000.0F, 32, 1, true, true), | ||
102 | new AudioFormat(12000.0F, 32, 2, true, false), | ||
103 | new AudioFormat(12000.0F, 32, 2, true, true), | ||
104 | */ | ||
105 | new AudioFormat(16000.0F, 16, 1, true, false), // 12 | ||
106 | new AudioFormat(16000.0F, 16, 1, true, true), // 13 | ||
107 | new AudioFormat(16000.0F, 16, 2, true, false), // 14 | ||
108 | new AudioFormat(16000.0F, 16, 2, true, true), // 15 | ||
109 | /* 24 and 32 bit not yet possible | ||
110 | new AudioFormat(16000.0F, 24, 1, true, false), | ||
111 | new AudioFormat(16000.0F, 24, 1, true, true), | ||
112 | new AudioFormat(16000.0F, 24, 2, true, false), | ||
113 | new AudioFormat(16000.0F, 24, 2, true, true), | ||
114 | new AudioFormat(16000.0F, 32, 1, true, false), | ||
115 | new AudioFormat(16000.0F, 32, 1, true, true), | ||
116 | new AudioFormat(16000.0F, 32, 2, true, false), | ||
117 | new AudioFormat(16000.0F, 32, 2, true, true), | ||
118 | */ | ||
119 | new AudioFormat(22050.0F, 16, 1, true, false), // 16 | ||
120 | new AudioFormat(22050.0F, 16, 1, true, true), // 17 | ||
121 | new AudioFormat(22050.0F, 16, 2, true, false), // 18 | ||
122 | new AudioFormat(22050.0F, 16, 2, true, true), // 19 | ||
123 | /* 24 and 32 bit not yet possible | ||
124 | new AudioFormat(22050.0F, 24, 1, true, false), | ||
125 | new AudioFormat(22050.0F, 24, 1, true, true), | ||
126 | new AudioFormat(22050.0F, 24, 2, true, false), | ||
127 | new AudioFormat(22050.0F, 24, 2, true, true), | ||
128 | new AudioFormat(22050.0F, 32, 1, true, false), | ||
129 | new AudioFormat(22050.0F, 32, 1, true, true), | ||
130 | new AudioFormat(22050.0F, 32, 2, true, false), | ||
131 | new AudioFormat(22050.0F, 32, 2, true, true), | ||
132 | */ | ||
133 | new AudioFormat(24000.0F, 16, 1, true, false), // 20 | ||
134 | new AudioFormat(24000.0F, 16, 1, true, true), // 21 | ||
135 | new AudioFormat(24000.0F, 16, 2, true, false), // 22 | ||
136 | new AudioFormat(24000.0F, 16, 2, true, true), // 23 | ||
137 | /* 24 and 32 bit not yet possible | ||
138 | new AudioFormat(24000.0F, 24, 1, true, false), | ||
139 | new AudioFormat(24000.0F, 24, 1, true, true), | ||
140 | new AudioFormat(24000.0F, 24, 2, true, false), | ||
141 | new AudioFormat(24000.0F, 24, 2, true, true), | ||
142 | new AudioFormat(24000.0F, 32, 1, true, false), | ||
143 | new AudioFormat(24000.0F, 32, 1, true, true), | ||
144 | new AudioFormat(24000.0F, 32, 2, true, false), | ||
145 | new AudioFormat(24000.0F, 32, 2, true, true), | ||
146 | */ | ||
147 | new AudioFormat(32000.0F, 16, 1, true, false), // 24 | ||
148 | new AudioFormat(32000.0F, 16, 1, true, true), // 25 | ||
149 | new AudioFormat(32000.0F, 16, 2, true, false), // 26 | ||
150 | new AudioFormat(32000.0F, 16, 2, true, true), // 27 | ||
151 | /* 24 and 32 bit not yet possible | ||
152 | new AudioFormat(32000.0F, 24, 1, true, false), | ||
153 | new AudioFormat(32000.0F, 24, 1, true, true), | ||
154 | new AudioFormat(32000.0F, 24, 2, true, false), | ||
155 | new AudioFormat(32000.0F, 24, 2, true, true), | ||
156 | new AudioFormat(32000.0F, 32, 1, true, false), | ||
157 | new AudioFormat(32000.0F, 32, 1, true, true), | ||
158 | new AudioFormat(32000.0F, 32, 2, true, false), | ||
159 | new AudioFormat(32000.0F, 32, 2, true, true), | ||
160 | */ | ||
161 | new AudioFormat(44100.0F, 16, 1, true, false), // 28 | ||
162 | new AudioFormat(44100.0F, 16, 1, true, true), // 29 | ||
163 | new AudioFormat(44100.0F, 16, 2, true, false), // 30 | ||
164 | new AudioFormat(44100.0F, 16, 2, true, true), // 31 | ||
165 | /* 24 and 32 bit not yet possible | ||
166 | new AudioFormat(44100.0F, 24, 1, true, false), | ||
167 | new AudioFormat(44100.0F, 24, 1, true, true), | ||
168 | new AudioFormat(44100.0F, 24, 2, true, false), | ||
169 | new AudioFormat(44100.0F, 24, 2, true, true), | ||
170 | new AudioFormat(44100.0F, 32, 1, true, false), | ||
171 | new AudioFormat(44100.0F, 32, 1, true, true), | ||
172 | new AudioFormat(44100.0F, 32, 2, true, false), | ||
173 | new AudioFormat(44100.0F, 32, 2, true, true), | ||
174 | */ | ||
175 | new AudioFormat(48000.0F, 16, 1, true, false), // 32 | ||
176 | new AudioFormat(48000.0F, 16, 1, true, true), // 33 | ||
177 | new AudioFormat(48000.0F, 16, 2, true, false), // 34 | ||
178 | new AudioFormat(48000.0F, 16, 2, true, true), // 35 | ||
179 | /* 24 and 32 bit not yet possible | ||
180 | new AudioFormat(48000.0F, 24, 1, true, false), | ||
181 | new AudioFormat(48000.0F, 24, 1, true, true), | ||
182 | new AudioFormat(48000.0F, 24, 2, true, false), | ||
183 | new AudioFormat(48000.0F, 24, 2, true, true), | ||
184 | new AudioFormat(48000.0F, 32, 1, true, false), | ||
185 | new AudioFormat(48000.0F, 32, 1, true, true), | ||
186 | new AudioFormat(48000.0F, 32, 2, true, false), | ||
187 | new AudioFormat(48000.0F, 32, 2, true, true), | ||
188 | */ | ||
189 | }; | ||
190 | |||
191 | private static final boolean t = true; | ||
192 | private static final boolean f = false; | ||
193 | |||
194 | /* | ||
195 | * One row for each source format. | ||
196 | */ | ||
197 | private static final boolean[][] CONVERSIONS = | ||
198 | { | ||
199 | {f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f,f,f,f,f, f,f,f,f,t,t,f,f,f,f, f,f,f,f,f,f}, // 0 | ||
200 | {f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f,t,t,f,f, f,f,f,f,f,f}, // 1 | ||
201 | {f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f,f,f,t,t, f,f,f,f,f,f}, // 2 | ||
202 | {f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f,f,f,f,f, t,t,f,f,f,f}, // 3 | ||
203 | {f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f,f,f,f,f, f,f,t,t,f,f}, // 4 | ||
204 | {f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f,f,f,f,f, f,f,f,f,t,t}, // 5 | ||
205 | |||
206 | {f,f,f,f,f,f,f,f,f,f, f,f,t,t,f,f,f,f,f,f, f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f}, // 18 | ||
207 | {f,f,f,f,f,f,f,f,f,f, f,f,f,f,t,t,f,f,f,f, f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f}, // 19 | ||
208 | {f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f,t,t,f,f, f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f}, // 20 | ||
209 | {f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f,f,f,t,t, f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f}, // 21 | ||
210 | {f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f,f,f,f,f, t,t,f,f,f,f,f,f,f,f, f,f,f,f,f,f}, // 22 | ||
211 | {f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f,f,f,f,f, f,f,t,t,f,f,f,f,f,f, f,f,f,f,f,f}, // 23 | ||
212 | |||
213 | {t,t,f,f,f,f,f,f,f,f, f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f}, // 36 | ||
214 | {f,f,t,t,f,f,f,f,f,f, f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f}, // 37 | ||
215 | {f,f,f,f,t,t,f,f,f,f, f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f}, // 38 | ||
216 | {f,f,f,f,f,f,t,t,f,f, f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f}, // 39 | ||
217 | {f,f,f,f,f,f,f,f,t,t, f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f}, // 40 | ||
218 | {f,f,f,f,f,f,f,f,f,f, t,t,f,f,f,f,f,f,f,f, f,f,f,f,f,f,f,f,f,f, f,f,f,f,f,f}, // 41 | ||
219 | |||
220 | }; | ||
221 | |||
222 | /** | ||
223 | * Constructor. | ||
224 | */ | ||
225 | public VorbisFormatConversionProvider() | ||
226 | { | ||
227 | super(Arrays.asList(INPUT_FORMATS), Arrays.asList(OUTPUT_FORMATS), CONVERSIONS); | ||
228 | } | ||
229 | |||
230 | /** | ||
231 | * Returns converted AudioInputStream. | ||
232 | */ | ||
233 | public AudioInputStream getAudioInputStream(AudioFormat targetFormat, AudioInputStream audioInputStream) | ||
234 | { | ||
235 | if (isConversionSupported(targetFormat, audioInputStream.getFormat())) | ||
236 | { | ||
237 | return new DecodedVorbisAudioInputStream(targetFormat, audioInputStream); | ||
238 | } | ||
239 | else | ||
240 | { | ||
241 | throw new IllegalArgumentException("conversion not supported"); | ||
242 | } | ||
243 | } | ||
244 | } | ||