summaryrefslogtreecommitdiff
path: root/songdbj/javazoom/spi/mpeg/sampled/convert/MpegFormatConversionProvider.java
diff options
context:
space:
mode:
Diffstat (limited to 'songdbj/javazoom/spi/mpeg/sampled/convert/MpegFormatConversionProvider.java')
-rw-r--r--songdbj/javazoom/spi/mpeg/sampled/convert/MpegFormatConversionProvider.java120
1 files changed, 120 insertions, 0 deletions
diff --git a/songdbj/javazoom/spi/mpeg/sampled/convert/MpegFormatConversionProvider.java b/songdbj/javazoom/spi/mpeg/sampled/convert/MpegFormatConversionProvider.java
new file mode 100644
index 0000000000..1a3d51d9ad
--- /dev/null
+++ b/songdbj/javazoom/spi/mpeg/sampled/convert/MpegFormatConversionProvider.java
@@ -0,0 +1,120 @@
1/*
2 * MpegFormatConversionProvider.
3 *
4 * JavaZOOM : mp3spi@javazoom.net
5 * http://www.javazoom.net
6 *
7 * ---------------------------------------------------------------------------
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU Library General Public License as published
10 * by the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU Library General Public License for more details.
17 *
18 * You should have received a copy of the GNU Library General Public
19 * License along with this program; if not, write to the Free Software
20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 * --------------------------------------------------------------------------
22 */
23
24
25package javazoom.spi.mpeg.sampled.convert;
26
27
28import java.util.Arrays;
29
30import javax.sound.sampled.AudioFormat;
31import javax.sound.sampled.AudioInputStream;
32import javax.sound.sampled.AudioSystem;
33
34import javazoom.spi.mpeg.sampled.file.MpegEncoding;
35
36import org.tritonus.share.TDebug;
37import org.tritonus.share.sampled.Encodings;
38import org.tritonus.share.sampled.convert.TEncodingFormatConversionProvider;
39
40/**
41 * ConversionProvider for MPEG files.
42 */
43public class MpegFormatConversionProvider extends TEncodingFormatConversionProvider
44{
45 private static final AudioFormat.Encoding MP3 = Encodings.getEncoding("MP3");
46 private static final AudioFormat.Encoding PCM_SIGNED = Encodings.getEncoding("PCM_SIGNED");
47
48 private static final AudioFormat[] INPUT_FORMATS =
49 {
50 // mono
51 new AudioFormat(MP3, -1.0F, -1, 1, -1, -1.0F, false),
52 new AudioFormat(MP3, -1.0F, -1, 1, -1, -1.0F, true),
53 // stereo
54 new AudioFormat(MP3, -1.0F, -1, 2, -1, -1.0F, false),
55 new AudioFormat(MP3, -1.0F, -1, 2, -1, -1.0F, true),
56 };
57
58
59 private static final AudioFormat[] OUTPUT_FORMATS =
60 {
61 // mono, 16 bit signed
62 new AudioFormat(PCM_SIGNED, -1.0F, 16, 1, 2, -1.0F, false),
63 new AudioFormat(PCM_SIGNED, -1.0F, 16, 1, 2, -1.0F, true),
64 // stereo, 16 bit signed
65 new AudioFormat(PCM_SIGNED, -1.0F, 16, 2, 4, -1.0F, false),
66 new AudioFormat(PCM_SIGNED, -1.0F, 16, 2, 4, -1.0F, true),
67 };
68
69 /**
70 * Constructor.
71 */
72 public MpegFormatConversionProvider()
73 {
74 super(Arrays.asList(INPUT_FORMATS), Arrays.asList(OUTPUT_FORMATS));
75 if (TDebug.TraceAudioConverter)
76 {
77 TDebug.out(">MpegFormatConversionProvider()");
78 }
79 }
80
81 public AudioInputStream getAudioInputStream(AudioFormat targetFormat, AudioInputStream audioInputStream)
82 {
83 if (TDebug.TraceAudioConverter)
84 {
85 TDebug.out(">MpegFormatConversionProvider.getAudioInputStream(AudioFormat targetFormat, AudioInputStream audioInputStream):");
86 }
87 return new DecodedMpegAudioInputStream(targetFormat, audioInputStream);
88 }
89
90 /**
91 * Add conversion support for any MpegEncoding source with FrameRate or FrameSize not empty.
92 * @param targetFormat
93 * @param sourceFormat
94 * @return
95 */
96 public boolean isConversionSupported(AudioFormat targetFormat, AudioFormat sourceFormat)
97 {
98 if (TDebug.TraceAudioConverter)
99 {
100 TDebug.out(">MpegFormatConversionProvider.isConversionSupported(AudioFormat targetFormat, AudioFormat sourceFormat):");
101 TDebug.out("checking if conversion possible");
102 TDebug.out("from: " + sourceFormat);
103 TDebug.out("to: " + targetFormat);
104 }
105
106 boolean conversion = super.isConversionSupported(targetFormat, sourceFormat);
107 if (conversion == false)
108 {
109 AudioFormat.Encoding enc = sourceFormat.getEncoding();
110 if (enc instanceof MpegEncoding)
111 {
112 if ((sourceFormat.getFrameRate() != AudioSystem.NOT_SPECIFIED) || (sourceFormat.getFrameSize() != AudioSystem.NOT_SPECIFIED))
113 {
114 conversion = true;
115 }
116 }
117 }
118 return conversion;
119 }
120}