From 9fee0ec4ca0c5b7a334cc29dbb58e76c7a4c736e Mon Sep 17 00:00:00 2001 From: Michiel Van Der Kolk Date: Mon, 11 Jul 2005 15:42:37 +0000 Subject: Songdb java version, source. only 1.5 compatible git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7101 a1c6a512-1295-4272-9138-f99709370657 --- .../convert/VorbisFormatConversionProvider.java | 244 +++++++++++++++++++++ 1 file changed, 244 insertions(+) create mode 100644 songdbj/javazoom/spi/vorbis/sampled/convert/VorbisFormatConversionProvider.java (limited to 'songdbj/javazoom/spi/vorbis/sampled/convert/VorbisFormatConversionProvider.java') 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 @@ +/* + * VorbisFormatConversionProvider. + * + * JavaZOOM : vorbisspi@javazoom.net + * http://www.javazoom.net + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +package javazoom.spi.vorbis.sampled.convert; + +import java.util.Arrays; +import javazoom.spi.vorbis.sampled.file.VorbisEncoding; +import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioInputStream; + +import org.tritonus.share.sampled.convert.TMatrixFormatConversionProvider; + +/** + * ConversionProvider for VORBIS files. + */ +public class VorbisFormatConversionProvider extends TMatrixFormatConversionProvider +{ + private static final AudioFormat[] INPUT_FORMATS = + { + new AudioFormat(VorbisEncoding.VORBISENC, 32000.0F, -1, 1, -1, -1, false), // 0 + new AudioFormat(VorbisEncoding.VORBISENC, 32000.0F, -1, 2, -1, -1, false), // 1 + new AudioFormat(VorbisEncoding.VORBISENC, 44100.0F, -1, 1, -1, -1, false), // 2 + new AudioFormat(VorbisEncoding.VORBISENC, 44100.0F, -1, 2, -1, -1, false), // 3 + new AudioFormat(VorbisEncoding.VORBISENC, 48000.0F, -1, 1, -1, -1, false), // 4 + new AudioFormat(VorbisEncoding.VORBISENC, 48000.0F, -1, 2, -1, -1, false), // 5 + + new AudioFormat(VorbisEncoding.VORBISENC, 16000.0F, -1, 1, -1, -1, false), // 18 + new AudioFormat(VorbisEncoding.VORBISENC, 16000.0F, -1, 2, -1, -1, false), // 19 + new AudioFormat(VorbisEncoding.VORBISENC, 22050.0F, -1, 1, -1, -1, false), // 20 + new AudioFormat(VorbisEncoding.VORBISENC, 22050.0F, -1, 2, -1, -1, false), // 21 + new AudioFormat(VorbisEncoding.VORBISENC, 24000.0F, -1, 1, -1, -1, false), // 22 + new AudioFormat(VorbisEncoding.VORBISENC, 24000.0F, -1, 2, -1, -1, false), // 23 + + new AudioFormat(VorbisEncoding.VORBISENC, 8000.0F, -1, 1, -1, -1, false), // 36 + new AudioFormat(VorbisEncoding.VORBISENC, 8000.0F, -1, 2, -1, -1, false), // 37 + new AudioFormat(VorbisEncoding.VORBISENC, 11025.0F, -1, 1, -1, -1, false), // 38 + new AudioFormat(VorbisEncoding.VORBISENC, 11025.0F, -1, 2, -1, -1, false), // 39 + new AudioFormat(VorbisEncoding.VORBISENC, 12000.0F, -1, 1, -1, -1, false), // 40 + new AudioFormat(VorbisEncoding.VORBISENC, 12000.0F, -1, 2, -1, -1, false), // 41 + }; + + private static final AudioFormat[] OUTPUT_FORMATS = + { + new AudioFormat(8000.0F, 16, 1, true, false), // 0 + new AudioFormat(8000.0F, 16, 1, true, true), // 1 + new AudioFormat(8000.0F, 16, 2, true, false), // 2 + new AudioFormat(8000.0F, 16, 2, true, true), // 3 + /* 24 and 32 bit not yet possible + new AudioFormat(8000.0F, 24, 1, true, false), + new AudioFormat(8000.0F, 24, 1, true, true), + new AudioFormat(8000.0F, 24, 2, true, false), + new AudioFormat(8000.0F, 24, 2, true, true), + new AudioFormat(8000.0F, 32, 1, true, false), + new AudioFormat(8000.0F, 32, 1, true, true), + new AudioFormat(8000.0F, 32, 2, true, false), + new AudioFormat(8000.0F, 32, 2, true, true), + */ + new AudioFormat(11025.0F, 16, 1, true, false), // 4 + new AudioFormat(11025.0F, 16, 1, true, true), // 5 + new AudioFormat(11025.0F, 16, 2, true, false), // 6 + new AudioFormat(11025.0F, 16, 2, true, true), // 7 + /* 24 and 32 bit not yet possible + new AudioFormat(11025.0F, 24, 1, true, false), + new AudioFormat(11025.0F, 24, 1, true, true), + new AudioFormat(11025.0F, 24, 2, true, false), + new AudioFormat(11025.0F, 24, 2, true, true), + new AudioFormat(11025.0F, 32, 1, true, false), + new AudioFormat(11025.0F, 32, 1, true, true), + new AudioFormat(11025.0F, 32, 2, true, false), + new AudioFormat(11025.0F, 32, 2, true, true), + */ + new AudioFormat(12000.0F, 16, 1, true, false), // 8 + new AudioFormat(12000.0F, 16, 1, true, true), // 9 + new AudioFormat(12000.0F, 16, 2, true, false), // 10 + new AudioFormat(12000.0F, 16, 2, true, true), // 11 + /* 24 and 32 bit not yet possible + new AudioFormat(12000.0F, 24, 1, true, false), + new AudioFormat(12000.0F, 24, 1, true, true), + new AudioFormat(12000.0F, 24, 2, true, false), + new AudioFormat(12000.0F, 24, 2, true, true), + new AudioFormat(12000.0F, 32, 1, true, false), + new AudioFormat(12000.0F, 32, 1, true, true), + new AudioFormat(12000.0F, 32, 2, true, false), + new AudioFormat(12000.0F, 32, 2, true, true), + */ + new AudioFormat(16000.0F, 16, 1, true, false), // 12 + new AudioFormat(16000.0F, 16, 1, true, true), // 13 + new AudioFormat(16000.0F, 16, 2, true, false), // 14 + new AudioFormat(16000.0F, 16, 2, true, true), // 15 + /* 24 and 32 bit not yet possible + new AudioFormat(16000.0F, 24, 1, true, false), + new AudioFormat(16000.0F, 24, 1, true, true), + new AudioFormat(16000.0F, 24, 2, true, false), + new AudioFormat(16000.0F, 24, 2, true, true), + new AudioFormat(16000.0F, 32, 1, true, false), + new AudioFormat(16000.0F, 32, 1, true, true), + new AudioFormat(16000.0F, 32, 2, true, false), + new AudioFormat(16000.0F, 32, 2, true, true), + */ + new AudioFormat(22050.0F, 16, 1, true, false), // 16 + new AudioFormat(22050.0F, 16, 1, true, true), // 17 + new AudioFormat(22050.0F, 16, 2, true, false), // 18 + new AudioFormat(22050.0F, 16, 2, true, true), // 19 + /* 24 and 32 bit not yet possible + new AudioFormat(22050.0F, 24, 1, true, false), + new AudioFormat(22050.0F, 24, 1, true, true), + new AudioFormat(22050.0F, 24, 2, true, false), + new AudioFormat(22050.0F, 24, 2, true, true), + new AudioFormat(22050.0F, 32, 1, true, false), + new AudioFormat(22050.0F, 32, 1, true, true), + new AudioFormat(22050.0F, 32, 2, true, false), + new AudioFormat(22050.0F, 32, 2, true, true), + */ + new AudioFormat(24000.0F, 16, 1, true, false), // 20 + new AudioFormat(24000.0F, 16, 1, true, true), // 21 + new AudioFormat(24000.0F, 16, 2, true, false), // 22 + new AudioFormat(24000.0F, 16, 2, true, true), // 23 + /* 24 and 32 bit not yet possible + new AudioFormat(24000.0F, 24, 1, true, false), + new AudioFormat(24000.0F, 24, 1, true, true), + new AudioFormat(24000.0F, 24, 2, true, false), + new AudioFormat(24000.0F, 24, 2, true, true), + new AudioFormat(24000.0F, 32, 1, true, false), + new AudioFormat(24000.0F, 32, 1, true, true), + new AudioFormat(24000.0F, 32, 2, true, false), + new AudioFormat(24000.0F, 32, 2, true, true), + */ + new AudioFormat(32000.0F, 16, 1, true, false), // 24 + new AudioFormat(32000.0F, 16, 1, true, true), // 25 + new AudioFormat(32000.0F, 16, 2, true, false), // 26 + new AudioFormat(32000.0F, 16, 2, true, true), // 27 + /* 24 and 32 bit not yet possible + new AudioFormat(32000.0F, 24, 1, true, false), + new AudioFormat(32000.0F, 24, 1, true, true), + new AudioFormat(32000.0F, 24, 2, true, false), + new AudioFormat(32000.0F, 24, 2, true, true), + new AudioFormat(32000.0F, 32, 1, true, false), + new AudioFormat(32000.0F, 32, 1, true, true), + new AudioFormat(32000.0F, 32, 2, true, false), + new AudioFormat(32000.0F, 32, 2, true, true), + */ + new AudioFormat(44100.0F, 16, 1, true, false), // 28 + new AudioFormat(44100.0F, 16, 1, true, true), // 29 + new AudioFormat(44100.0F, 16, 2, true, false), // 30 + new AudioFormat(44100.0F, 16, 2, true, true), // 31 + /* 24 and 32 bit not yet possible + new AudioFormat(44100.0F, 24, 1, true, false), + new AudioFormat(44100.0F, 24, 1, true, true), + new AudioFormat(44100.0F, 24, 2, true, false), + new AudioFormat(44100.0F, 24, 2, true, true), + new AudioFormat(44100.0F, 32, 1, true, false), + new AudioFormat(44100.0F, 32, 1, true, true), + new AudioFormat(44100.0F, 32, 2, true, false), + new AudioFormat(44100.0F, 32, 2, true, true), + */ + new AudioFormat(48000.0F, 16, 1, true, false), // 32 + new AudioFormat(48000.0F, 16, 1, true, true), // 33 + new AudioFormat(48000.0F, 16, 2, true, false), // 34 + new AudioFormat(48000.0F, 16, 2, true, true), // 35 + /* 24 and 32 bit not yet possible + new AudioFormat(48000.0F, 24, 1, true, false), + new AudioFormat(48000.0F, 24, 1, true, true), + new AudioFormat(48000.0F, 24, 2, true, false), + new AudioFormat(48000.0F, 24, 2, true, true), + new AudioFormat(48000.0F, 32, 1, true, false), + new AudioFormat(48000.0F, 32, 1, true, true), + new AudioFormat(48000.0F, 32, 2, true, false), + new AudioFormat(48000.0F, 32, 2, true, true), + */ + }; + + private static final boolean t = true; + private static final boolean f = false; + + /* + * One row for each source format. + */ + private static final boolean[][] CONVERSIONS = + { + {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 + {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 + {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 + {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 + {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 + {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 + + {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 + {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 + {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 + {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 + {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 + {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 + + {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 + {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 + {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 + {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 + {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 + {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 + + }; + + /** + * Constructor. + */ + public VorbisFormatConversionProvider() + { + super(Arrays.asList(INPUT_FORMATS), Arrays.asList(OUTPUT_FORMATS), CONVERSIONS); + } + + /** + * Returns converted AudioInputStream. + */ + public AudioInputStream getAudioInputStream(AudioFormat targetFormat, AudioInputStream audioInputStream) + { + if (isConversionSupported(targetFormat, audioInputStream.getFormat())) + { + return new DecodedVorbisAudioInputStream(targetFormat, audioInputStream); + } + else + { + throw new IllegalArgumentException("conversion not supported"); + } + } +} -- cgit v1.2.3