changeset in /hg/icedtea6: Integrate Gervill.

Mark Wielaard mark at klomp.org
Wed Apr 30 13:09:38 PDT 2008


changeset bcba163568ac in /hg/icedtea6
details: http://icedtea.classpath.org/hg/icedtea6?cmd=changeset;node=bcba163568ac
description:
	Integrate Gervill.

	2008-04-30  Mark Wielaard  <mark at klomp.org>

	        * Makefile.am (ICEDTEA_PATCHES): Add patches/icedtea-gervill.patch.
	        * Makefile.in: Regenerated.
	        * patches/icedtea-gervill.patch: New patch.
	        * overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/*:
	        New Gervill files.

diffstat:

101 files changed, 26224 insertions(+), 2 deletions(-)
ChangeLog                                                                                    |    8 
Makefile.am                                                                                  |    1 
Makefile.in                                                                                  |    4 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/AudioFileSoundbankReader.java     |  141 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/AudioFloatConverter.java          |  670 ++
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/AudioFloatInputStream.java        |  297 +
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/AudioSynthesizer.java             |  132 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/AudioSynthesizerPropertyInfo.java |   85 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/CHANGES.txt                       |  179 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/DLSInfo.java                      |  115 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/DLSInstrument.java                |  384 +
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/DLSModulator.java                 |  284 +
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/DLSRegion.java                    |  162 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/DLSSample.java                    |  131 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/DLSSampleLoop.java                |   62 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/DLSSampleOptions.java             |   85 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/DLSSoundbank.java                 | 1333 ++++
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/DLSSoundbankReader.java           |   82 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/EmergencySoundbank.java           | 2795 ++++++++++
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/FFT.java                          |  771 ++
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/InvalidDataException.java         |   49 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/InvalidFormatException.java       |   48 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/JARSoundbankReader.java           |  118 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/LICENSE                           |  347 +
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/ModelAbstractChannelMixer.java    |  130 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/ModelAbstractOscillator.java      |  205 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/ModelByteBuffer.java              |  347 +
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/ModelByteBufferWavetable.java     |  296 +
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/ModelChannelMixer.java            |   54 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/ModelConnectionBlock.java         |  149 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/ModelDestination.java             |   99 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/ModelDirectedPlayer.java          |   41 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/ModelDirector.java                |   47 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/ModelIdentifier.java              |  153 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/ModelInstrument.java              |  143 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/ModelInstrumentComparator.java    |   55 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/ModelMappedInstrument.java        |   66 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/ModelOscillator.java              |   44 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/ModelOscillatorStream.java        |   46 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/ModelPatch.java                   |   57 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/ModelPerformer.java               |  130 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/ModelSource.java                  |  104 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/ModelStandardDirector.java        |   88 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/ModelStandardTransform.java       |  134 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/ModelTransform.java               |   37 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/ModelWavetable.java               |   50 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/PATInstrument.java                |  536 +
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/PATSample.java                    |  113 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/PATSoundbankReader.java           |  294 +
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/README.txt                        |  403 +
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/RIFFInvalidDataException.java     |   46 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/RIFFInvalidFormatException.java   |   47 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/RIFFReader.java                   |  308 +
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/RIFFWriter.java                   |  377 +
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SF2GlobalRegion.java              |   36 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SF2Instrument.java                |  808 ++
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SF2InstrumentRegion.java          |   46 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SF2Layer.java                     |   85 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SF2LayerRegion.java               |   46 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SF2Modulator.java                 |   96 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SF2Region.java                    |  179 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SF2Sample.java                    |  219 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SF2Soundbank.java                 | 1000 +++
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SF2SoundbankReader.java           |   86 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SimpleInstrument.java             |  210 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SimpleSoundbank.java              |  155 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftAbstractResampler.java        |  422 +
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftAudioBuffer.java              |  112 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftAudioProcessor.java           |   52 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftAudioPusher.java              |  102 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftChannel.java                  | 1502 +++++
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftChannelProxy.java             |  206 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftChorus.java                   |  383 +
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftControl.java                  |   40 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftCubicResampler.java           |   91 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftEnvelopeGenerator.java        |  338 +
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftFilter.java                   |  657 ++
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftInstrument.java               |   95 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftJitterCorrector.java          |  278 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftLanczosResampler.java         |  121 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftLimiter.java                  |  202 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftLinearResampler.java          |   74 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftLinearResampler2.java         |  110 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftLowFrequencyOscillator.java   |  138 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftMainMixer.java                | 1003 +++
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftMidiAudioFileReader.java      |  218 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftPerformer.java                |  763 ++
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftPointResampler.java           |   67 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftProcess.java                  |   43 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftProvider.java                 |   56 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftReceiver.java                 |   93 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftResampler.java                |   39 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftResamplerStreamer.java        |   41 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftReverb.java                   |  500 +
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftShortMessage.java             |   61 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftSincResampler.java            |  144 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftSynthesizer.java              | 1006 +++
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftTuning.java                   |  259 
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/SoftVoice.java                    |  959 +++
overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/WaveFloatFileReader.java          |  173 
patches/icedtea-gervill.patch                                                                |   30 

diffs (truncated from 26651 to 500 lines):

diff -r 1b845dd20b86 -r bcba163568ac ChangeLog
--- a/ChangeLog	Tue Apr 29 12:47:53 2008 -0400
+++ b/ChangeLog	Wed Apr 30 22:09:08 2008 +0200
@@ -1,3 +1,11 @@ 2008-04-29  Lillian Angel  <langel at redha
+2008-04-30  Mark Wielaard  <mark at klomp.org>
+
+	* Makefile.am (ICEDTEA_PATCHES): Add patches/icedtea-gervill.patch.
+	* Makefile.in: Regenerated.
+	* patches/icedtea-gervill.patch: New patch.
+	* overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/*:
+	New Gervill files.
+
 2008-04-29  Lillian Angel  <langel at redhat.com>
 
 	* Makefile.am
diff -r 1b845dd20b86 -r bcba163568ac Makefile.am
--- a/Makefile.am	Tue Apr 29 12:47:53 2008 -0400
+++ b/Makefile.am	Wed Apr 30 22:09:08 2008 +0200
@@ -309,6 +309,7 @@ ICEDTEA_PATCHES = \
 	patches/icedtea-color-createcontext.patch \
 	patches/icedtea-color-profiles.patch \
 	patches/icedtea-fonts.patch \
+	patches/icedtea-gervill.patch \
 	$(GCC_PATCH) \
 	$(DISTRIBUTION_PATCHES)
 
diff -r 1b845dd20b86 -r bcba163568ac Makefile.in
--- a/Makefile.in	Tue Apr 29 12:47:53 2008 -0400
+++ b/Makefile.in	Wed Apr 30 22:09:08 2008 +0200
@@ -412,8 +412,8 @@ ICEDTEA_PATCHES = $(ZERO_PATCHES_COND) \
 	patches/icedtea-LCMS-setTagData.patch \
 	patches/icedtea-color-createcontext.patch \
 	patches/icedtea-color-profiles.patch \
-	patches/icedtea-fonts.patch $(GCC_PATCH) \
-	$(DISTRIBUTION_PATCHES) $(am__append_7)
+	patches/icedtea-fonts.patch patches/icedtea-gervill.patch \
+	$(GCC_PATCH) $(DISTRIBUTION_PATCHES) $(am__append_7)
 
 # Patch OpenJDK for plug replacements and ecj.
 ICEDTEA_ECJ_PATCH = patches/icedtea-ecj.patch
diff -r 1b845dd20b86 -r bcba163568ac overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/AudioFileSoundbankReader.java
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/AudioFileSoundbankReader.java	Wed Apr 30 22:09:08 2008 +0200
@@ -0,0 +1,141 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun in the LICENSE file that accompanied this code.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+package com.sun.media.sound;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+
+import javax.sound.midi.InvalidMidiDataException;
+import javax.sound.midi.Soundbank;
+import javax.sound.midi.spi.SoundbankReader;
+import javax.sound.sampled.AudioInputStream;
+import javax.sound.sampled.AudioSystem;
+import javax.sound.sampled.UnsupportedAudioFileException;
+
+/**
+ * Soundbank reader that uses audio files as soundbanks.
+ * 
+ * @version %I%, %E% 
+ * @author Karl Helgason
+ * 
+ */
+public class AudioFileSoundbankReader extends SoundbankReader {
+
+	public Soundbank getSoundbank(URL url) throws InvalidMidiDataException,
+			IOException {
+		try {
+			AudioInputStream ais = AudioSystem.getAudioInputStream(url);
+			Soundbank sbk = getSoundbank(ais);
+			ais.close();
+			return sbk;
+		} catch (UnsupportedAudioFileException e) {
+			return null;
+		} catch (IOException e) {
+			return null;
+		}
+	}
+
+	public Soundbank getSoundbank(InputStream stream)
+			throws InvalidMidiDataException, IOException {
+
+		stream.mark(512);
+		try {
+			AudioInputStream ais = AudioSystem.getAudioInputStream(stream);
+			Soundbank sbk = getSoundbank(ais);
+			if (sbk != null)
+				return sbk;
+		} catch (UnsupportedAudioFileException e) {
+		} catch (IOException e) {
+		}
+		stream.reset();
+		return null;
+	}
+
+	public Soundbank getSoundbank(AudioInputStream ais)
+			throws InvalidMidiDataException, IOException {
+
+		try {
+			try {
+				byte[] buffer;
+				if (ais.getFrameLength() == -1) {
+					ByteArrayOutputStream baos = new ByteArrayOutputStream();
+					byte[] buff = new byte[1024 - (1024 % ais.getFormat().getFrameSize())];
+					int ret;
+					while ((ret = ais.read(buff)) != -1)
+						baos.write(buff, 0, ret);
+					ais.close();
+					buffer = baos.toByteArray();
+				} else {
+					buffer = new byte[(int) (ais.getFrameLength() * ais
+							.getFormat().getFrameSize())];
+					ais.read(buffer);
+				}
+				ModelByteBufferWavetable osc = new ModelByteBufferWavetable(
+						new ModelByteBuffer(buffer), ais.getFormat(), -4800);
+				ModelPerformer performer = new ModelPerformer();
+				;
+				performer.getOscillators().add(osc);
+
+				SimpleSoundbank sbk = new SimpleSoundbank();
+				SimpleInstrument ins = new SimpleInstrument();
+				ins.add(performer);
+				sbk.addInstrument(ins);
+				return sbk;
+			} finally {
+			}
+		} catch (Exception e) {
+			return null;
+		}
+	}
+
+	public Soundbank getSoundbank(File file) throws InvalidMidiDataException,
+			IOException {
+
+		try {									
+				AudioInputStream ais = AudioSystem.getAudioInputStream(file);
+				ais.close();
+				ModelByteBufferWavetable osc = new ModelByteBufferWavetable(
+					new ModelByteBuffer(file, 0, file.length()), -4800);
+				ModelPerformer performer = new ModelPerformer();				
+				performer.getOscillators().add(osc);
+				SimpleSoundbank sbk = new SimpleSoundbank();
+				SimpleInstrument ins = new SimpleInstrument();
+				ins.add(performer);
+				sbk.addInstrument(ins);
+				return sbk;							
+		} catch (UnsupportedAudioFileException e1) {
+			return null;
+		} catch (IOException e) {
+			return null;
+		}
+
+	}
+	
+	
+}
diff -r 1b845dd20b86 -r bcba163568ac overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/AudioFloatConverter.java
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/overlays/openjdk/jdk/src/share/classes/com/sun/media/sound/AudioFloatConverter.java	Wed Apr 30 22:09:08 2008 +0200
@@ -0,0 +1,670 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun in the LICENSE file that accompanied this code.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+package com.sun.media.sound;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.FloatBuffer;
+
+import javax.sound.sampled.AudioFormat;
+import javax.sound.sampled.AudioFormat.Encoding;
+
+/**
+ * This class is used to convert between 8,16,24,32 bit signed/unsigned
+ * big/litle endian fixed/floating point byte buffers and float buffers.
+ * 
+ * @version %I%, %E%
+ * @author Karl Helgason
+ */
+
+public abstract class AudioFloatConverter {
+
+	public static final Encoding PCM_FLOAT = new Encoding("PCM_FLOAT");
+
+	/***************************************************************************
+	 * 
+	 * 32 bit float, little/big-endian
+	 * 
+	 **************************************************************************/
+
+	// PCM 32 bit float, little-endian
+	private static class AudioFloatConversion32L extends AudioFloatConverter {
+		ByteBuffer bytebuffer = null;
+
+		FloatBuffer floatbuffer = null;
+
+		public float[] toFloatArray(byte[] in_buff, int in_offset,
+				float[] out_buff, int out_offset, int out_len) {
+			int in_len = out_len * 4;
+			if (bytebuffer == null || bytebuffer.capacity() < in_len) {
+				bytebuffer = ByteBuffer.allocate(in_len).order(
+						ByteOrder.LITTLE_ENDIAN);
+				floatbuffer = bytebuffer.asFloatBuffer();
+			}
+			bytebuffer.position(0);
+			floatbuffer.position(0);
+			bytebuffer.put(in_buff, in_offset, in_len);
+			floatbuffer.get(out_buff, out_offset, out_len);
+			return out_buff;
+		}
+
+		public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
+				byte[] out_buff, int out_offset) {
+			int out_len = in_len * 4;
+			if (bytebuffer == null || bytebuffer.capacity() < out_len) {
+				bytebuffer = ByteBuffer.allocate(out_len).order(
+						ByteOrder.LITTLE_ENDIAN);
+				floatbuffer = bytebuffer.asFloatBuffer();
+			}
+			floatbuffer.position(0);
+			bytebuffer.position(0);
+			floatbuffer.put(in_buff, in_offset, in_len);
+			bytebuffer.get(out_buff, out_offset, out_len);
+			return out_buff;
+		}
+	}
+
+	// PCM 32 bit float, big-endian
+	private static class AudioFloatConversion32B extends AudioFloatConverter {
+		ByteBuffer bytebuffer = null;
+
+		FloatBuffer floatbuffer = null;
+
+		public float[] toFloatArray(byte[] in_buff, int in_offset,
+				float[] out_buff, int out_offset, int out_len) {
+			int in_len = out_len * 4;
+			if (bytebuffer == null || bytebuffer.capacity() < in_len) {
+				bytebuffer = ByteBuffer.allocate(in_len).order(
+						ByteOrder.BIG_ENDIAN);
+				floatbuffer = bytebuffer.asFloatBuffer();
+			}
+			bytebuffer.position(0);
+			floatbuffer.position(0);
+			bytebuffer.put(in_buff, in_offset, in_len);
+			floatbuffer.get(out_buff, out_offset, out_len);
+			return out_buff;
+		}
+
+		public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
+				byte[] out_buff, int out_offset) {
+			int out_len = in_len * 4;
+			if (bytebuffer == null || bytebuffer.capacity() < out_len) {
+				bytebuffer = ByteBuffer.allocate(out_len).order(
+						ByteOrder.BIG_ENDIAN);
+				floatbuffer = bytebuffer.asFloatBuffer();
+			}
+			floatbuffer.position(0);
+			bytebuffer.position(0);
+			floatbuffer.put(in_buff, in_offset, in_len);
+			bytebuffer.get(out_buff, out_offset, out_len);
+			return out_buff;
+		}
+	}
+
+	/***************************************************************************
+	 * 
+	 * 8 bit signed/unsigned
+	 * 
+	 **************************************************************************/
+
+	// PCM 8 bit, signed
+	private static class AudioFloatConversion8S extends AudioFloatConverter {
+		public float[] toFloatArray(byte[] in_buff, int in_offset,
+				float[] out_buff, int out_offset, int out_len) {
+			int ix = in_offset;
+			int ox = out_offset;
+			for (int i = 0; i < out_len; i++)
+				out_buff[ox++] = in_buff[ix++] * (1.0f / 127.0f);
+			return out_buff;
+		}
+
+		public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
+				byte[] out_buff, int out_offset) {
+			int ix = in_offset;
+			int ox = out_offset;
+			for (int i = 0; i < in_len; i++)
+				out_buff[ox++] = (byte) (in_buff[ix++] * 127.0f);
+			return out_buff;
+		}
+	}
+
+	// PCM 8 bit, unsigned
+	private static class AudioFloatConversion8U extends AudioFloatConverter {
+		public float[] toFloatArray(byte[] in_buff, int in_offset,
+				float[] out_buff, int out_offset, int out_len) {
+			int ix = in_offset;
+			int ox = out_offset;
+			for (int i = 0; i < out_len; i++)
+				out_buff[ox++] = ((in_buff[ix++]&0xFF) - 127) * (1.0f / 127.0f);
+			return out_buff;
+		}
+
+		public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
+				byte[] out_buff, int out_offset) {
+			int ix = in_offset;
+			int ox = out_offset;
+			for (int i = 0; i < in_len; i++)
+				out_buff[ox++] = (byte) (127 + in_buff[ix++] * 127.0f);
+			return out_buff;
+		}
+	}
+
+	/***************************************************************************
+	 * 
+	 * 16 bit signed/unsigned, little/big-endian
+	 * 
+	 **************************************************************************/
+
+	// PCM 16 bit, signed, little-endian
+	private static class AudioFloatConversion16SL extends AudioFloatConverter {
+		public float[] toFloatArray(byte[] in_buff, int in_offset,
+				float[] out_buff, int out_offset, int out_len) {
+			int ix = in_offset;
+			/*
+			int ox = out_offset;
+			for (int i = 0; i < out_len; i++)
+				out_buff[ox++] = ((short) ((in_buff[ix++] & 0xFF) | (in_buff[ix++] << 8)))
+						* (1.0f / 32767.0f);
+			*/			
+			int len = out_offset + out_len;
+			for (int ox = out_offset; ox < len; ox++)
+				out_buff[ox] = ((short) ((in_buff[ix++] & 0xFF) | (in_buff[ix++] << 8)))
+						* (1.0f / 32767.0f);
+			
+			return out_buff;
+		}
+
+		public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
+				byte[] out_buff, int out_offset) {
+			int ox = out_offset;
+			int len = in_offset + in_len;
+			for (int ix = in_offset; ix < len; ix++) {
+				int x = (int) (in_buff[ix] * 32767.0);
+				out_buff[ox++] = (byte) x;
+				out_buff[ox++] = (byte) (x >>> 8);
+			}
+			return out_buff;
+		}
+	}
+
+	// PCM 16 bit, signed, big-endian
+	private static class AudioFloatConversion16SB extends AudioFloatConverter {
+		public float[] toFloatArray(byte[] in_buff, int in_offset,
+				float[] out_buff, int out_offset, int out_len) {
+			int ix = in_offset;
+			int ox = out_offset;
+			for (int i = 0; i < out_len; i++)
+				out_buff[ox++] = ((short) ((in_buff[ix++] << 8) | (in_buff[ix++] & 0xFF)))
+						* (1.0f / 32767.0f);
+			return out_buff;
+		}
+
+		public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
+				byte[] out_buff, int out_offset) {
+			int ix = in_offset;
+			int ox = out_offset;
+			for (int i = 0; i < in_len; i++) {
+				int x = (int) (in_buff[ix++] * 32767.0);
+				out_buff[ox++] = (byte) (x >>> 8);
+				out_buff[ox++] = (byte) x;
+			}
+			return out_buff;
+		}
+	}
+
+	// PCM 16 bit, unsigned, little-endian
+	private static class AudioFloatConversion16UL extends AudioFloatConverter {
+		public float[] toFloatArray(byte[] in_buff, int in_offset,
+				float[] out_buff, int out_offset, int out_len) {
+			int ix = in_offset;
+			int ox = out_offset;
+			for (int i = 0; i < out_len; i++)
+				out_buff[ox++] = (( ((in_buff[ix++] & 0xFF) | ((in_buff[ix++] & 0xFF) << 8))) - 32767)
+						* (1.0f / 32767.0f);
+			return out_buff;
+		}
+
+		public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
+				byte[] out_buff, int out_offset) {
+			int ix = in_offset;
+			int ox = out_offset;
+			for (int i = 0; i < in_len; i++) {
+				int x = 32767 + (int) (in_buff[ix++] * 32767.0);
+				out_buff[ox++] = (byte) x;
+				out_buff[ox++] = (byte) (x >>> 8);
+			}
+			return out_buff;
+		}
+	}
+
+	// PCM 16 bit, unsigned, big-endian
+	private static class AudioFloatConversion16UB extends AudioFloatConverter {
+		public float[] toFloatArray(byte[] in_buff, int in_offset,
+				float[] out_buff, int out_offset, int out_len) {
+			int ix = in_offset;
+			int ox = out_offset;
+			for (int i = 0; i < out_len; i++)
+				out_buff[ox++] = (( (((in_buff[ix++] & 0xFF) << 8) | (in_buff[ix++] & 0xFF))) - 32767)
+						* (1.0f / 32767.0f);
+			return out_buff;
+		}
+
+		public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
+				byte[] out_buff, int out_offset) {
+			int ix = in_offset;
+			int ox = out_offset;
+			for (int i = 0; i < in_len; i++) {
+				int x = 32767 + (int) (in_buff[ix++] * 32767.0);
+				out_buff[ox++] = (byte) (x >>> 8);
+				out_buff[ox++] = (byte) x;
+			}
+			return out_buff;
+		}
+	}
+
+	/***************************************************************************
+	 * 
+	 * 24 bit signed/unsigned, little/big-endian
+	 * 
+	 **************************************************************************/
+
+	// PCM 24 bit, signed, little-endian
+	private static class AudioFloatConversion24SL extends AudioFloatConverter {
+		public float[] toFloatArray(byte[] in_buff, int in_offset,
+				float[] out_buff, int out_offset, int out_len) {
+			int ix = in_offset;
+			int ox = out_offset;
+			for (int i = 0; i < out_len; i++) {
+				int x = (in_buff[ix++] & 0xFF) | ((in_buff[ix++] & 0xFF) << 8)
+						| ((in_buff[ix++] & 0xFF) << 16);
+				if (x > 8388607)
+					x -= 16777216;
+				out_buff[ox++] = x * (1.0f / 8388607.0f);
+			}
+			return out_buff;
+		}
+
+		public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
+				byte[] out_buff, int out_offset) {



More information about the distro-pkg-dev mailing list