From 7039a05147b8bbfc829babea1c65bd436450b505 Mon Sep 17 00:00:00 2001 From: Björn Stenberg Date: Mon, 8 Jan 2007 23:53:00 +0000 Subject: Splitting out songdbj git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11953 a1c6a512-1295-4272-9138-f99709370657 --- .../util/audio/FadeableAudioInputStream.java | 62 ---- songdbj/de/jarnbjo/util/io/BitInputStream.java | 185 ----------- .../jarnbjo/util/io/ByteArrayBitInputStream.java | 352 --------------------- songdbj/de/jarnbjo/util/io/HuffmanNode.java | 144 --------- 4 files changed, 743 deletions(-) delete mode 100644 songdbj/de/jarnbjo/util/audio/FadeableAudioInputStream.java delete mode 100644 songdbj/de/jarnbjo/util/io/BitInputStream.java delete mode 100644 songdbj/de/jarnbjo/util/io/ByteArrayBitInputStream.java delete mode 100644 songdbj/de/jarnbjo/util/io/HuffmanNode.java (limited to 'songdbj/de/jarnbjo/util') diff --git a/songdbj/de/jarnbjo/util/audio/FadeableAudioInputStream.java b/songdbj/de/jarnbjo/util/audio/FadeableAudioInputStream.java deleted file mode 100644 index 4916102d4b..0000000000 --- a/songdbj/de/jarnbjo/util/audio/FadeableAudioInputStream.java +++ /dev/null @@ -1,62 +0,0 @@ -package de.jarnbjo.util.audio; - -import java.io.*; -import javax.sound.sampled.*; - -public class FadeableAudioInputStream extends AudioInputStream { - - private AudioInputStream stream; - private boolean fading=false; - private double phi=0.0; - - public FadeableAudioInputStream(AudioInputStream stream) throws IOException { - super(stream, stream.getFormat(), -1L); - } - - public void fadeOut() { - fading=true; - phi=0.0; - } - - public int read(byte[] b) throws IOException { - return read(b, 0, b.length); - } - - public int read(byte[] b, int offset, int length) throws IOException { - int read=super.read(b, offset, length); - - //System.out.println("read "+read); - - if(fading) { - int j=0, l=0, r=0; - double gain=0.0; - - for(int i=offset; i>8)&0xff); - b[j++]=(byte)(r&0xff); - b[j++]=(byte)((r>>8)&0xff); - } - } - - return read; - } - -} \ No newline at end of file diff --git a/songdbj/de/jarnbjo/util/io/BitInputStream.java b/songdbj/de/jarnbjo/util/io/BitInputStream.java deleted file mode 100644 index 89cadb8380..0000000000 --- a/songdbj/de/jarnbjo/util/io/BitInputStream.java +++ /dev/null @@ -1,185 +0,0 @@ -/* - * $ProjectName$ - * $ProjectRevision$ - * ----------------------------------------------------------- - * $Id$ - * ----------------------------------------------------------- - * - * $Author$ - * - * Description: - * - * Copyright 2002-2003 Tor-Einar Jarnbjo - * ----------------------------------------------------------- - * - * Change History - * ----------------------------------------------------------- - * $Log$ - * Revision 1.1 2005/07/11 15:42:36 hcl - * Songdb java version, source. only 1.5 compatible - * - * Revision 1.1.1.1 2004/04/04 22:09:12 shred - * First Import - * - * Revision 1.5 2003/04/10 19:48:31 jarnbjo - * no message - * - * Revision 1.4 2003/03/16 20:57:06 jarnbjo - * no message - * - * Revision 1.3 2003/03/16 20:56:56 jarnbjo - * no message - * - * Revision 1.2 2003/03/16 01:11:39 jarnbjo - * no message - * - * Revision 1.1 2003/03/03 21:02:20 jarnbjo - * no message - * - */ - -package de.jarnbjo.util.io; - -import java.io.IOException; - -/** - * An interface with methods allowing bit-wise reading from - * an input stream. All methods in this interface are optional - * and an implementation not support a method or a specific state - * (e.g. endian) will throw an UnspportedOperationException if - * such a method is being called. This should be speicified in - * the implementation documentation. - */ - -public interface BitInputStream { - - /** - * constant for setting this stream's mode to little endian - * - * @see #setEndian(int) - */ - - public static final int LITTLE_ENDIAN = 0; - - /** - * constant for setting this stream's mode to big endian - * - * @see #setEndian(int) - */ - - public static final int BIG_ENDIAN = 1; - - /** - * reads one bit (as a boolean) from the input stream - * - * @return true if the next bit is 1, - * false otherwise - * - * @throws IOException if an I/O error occurs - * @throws UnsupportedOperationException if the method is not supported by the implementation - */ - - public boolean getBit() throws IOException; - - /** - * reads bits number of bits from the input - * stream - * - * @return the unsigned integer value read from the stream - * - * @throws IOException if an I/O error occurs - * @throws UnsupportedOperationException if the method is not supported by the implementation - */ - - public int getInt(int bits) throws IOException; - - /** - * reads bits number of bits from the input - * stream - * - * @return the signed integer value read from the stream - * - * @throws IOException if an I/O error occurs - * @throws UnsupportedOperationException if the method is not supported by the implementation - */ - - public int getSignedInt(int bits) throws IOException; - - /** - * reads a huffman codeword based on the root - * parameter and returns the decoded value - * - * @param root the root of the Huffman tree used to decode the codeword - * @return the decoded unsigned integer value read from the stream - * - * @throws IOException if an I/O error occurs - * @throws UnsupportedOperationException if the method is not supported by the implementation - */ - - public int getInt(HuffmanNode root) throws IOException; - - /** - * reads an integer encoded as "signed rice" as described in - * the FLAC audio format specification - * - * @param order - * @return the decoded integer value read from the stream - * - * @throws IOException if an I/O error occurs - * @throws UnsupportedOperationException if the method is not supported by the implementation - */ - - public int readSignedRice(int order) throws IOException; - - /** - * fills the array from offset with len - * integers encoded as "signed rice" as described in - * the FLAC audio format specification - * - * @param order - * @param buffer - * @param offset - * @param len - * @return the decoded integer value read from the stream - * - * @throws IOException if an I/O error occurs - * @throws UnsupportedOperationException if the method is not supported by the implementation - */ - - public void readSignedRice(int order, int[] buffer, int offset, int len) throws IOException; - - /** - * reads bits number of bits from the input - * stream - * - * @return the unsigned long value read from the stream - * - * @throws IOException if an I/O error occurs - * @throws UnsupportedOperationException if the method is not supported by the implementation - */ - - public long getLong(int bits) throws IOException; - - /** - * causes the read pointer to be moved to the beginning - * of the next byte, remaining bits in the current byte - * are discarded - * - * @throws UnsupportedOperationException if the method is not supported by the implementation - */ - - public void align(); - - /** - * changes the endian mode used when reading bit-wise from - * the stream, changing the mode mid-stream will cause the - * read cursor to move to the beginning of the next byte - * (as if calling the allign method - * - * @see #align() - * - * @throws UnsupportedOperationException if the method is not supported by the implementation - */ - - public void setEndian(int endian); -} \ No newline at end of file diff --git a/songdbj/de/jarnbjo/util/io/ByteArrayBitInputStream.java b/songdbj/de/jarnbjo/util/io/ByteArrayBitInputStream.java deleted file mode 100644 index 9c84c7daca..0000000000 --- a/songdbj/de/jarnbjo/util/io/ByteArrayBitInputStream.java +++ /dev/null @@ -1,352 +0,0 @@ -/* - * $ProjectName$ - * $ProjectRevision$ - * ----------------------------------------------------------- - * $Id$ - * ----------------------------------------------------------- - * - * $Author$ - * - * Description: - * - * Copyright 2002-2003 Tor-Einar Jarnbjo - * ----------------------------------------------------------- - * - * Change History - * ----------------------------------------------------------- - * $Log$ - * Revision 1.1 2005/07/11 15:42:36 hcl - * Songdb java version, source. only 1.5 compatible - * - * Revision 1.1.1.1 2004/04/04 22:09:12 shred - * First Import - * - * Revision 1.3 2003/04/10 19:48:31 jarnbjo - * no message - * - * Revision 1.2 2003/03/16 01:11:39 jarnbjo - * no message - * - * Revision 1.1 2003/03/03 21:02:20 jarnbjo - * no message - * - */ - -package de.jarnbjo.util.io; - -import java.io.IOException; - -/** - * Implementation of the BitInputStream interface, - * using a byte array as data source. -*/ - -public class ByteArrayBitInputStream implements BitInputStream { - - private byte[] source; - private byte currentByte; - - private int endian; - - private int byteIndex=0; - private int bitIndex=0; - - public ByteArrayBitInputStream(byte[] source) { - this(source, LITTLE_ENDIAN); - } - - public ByteArrayBitInputStream(byte[] source, int endian) { - this.endian=endian; - this.source=source; - currentByte=source[0]; - bitIndex=(endian==LITTLE_ENDIAN)?0:7; - } - - public boolean getBit() throws IOException { - if(endian==LITTLE_ENDIAN) { - if(bitIndex>7) { - bitIndex=0; - currentByte=source[++byteIndex]; - } - return (currentByte&(1<<(bitIndex++)))!=0; - } - else { - if(bitIndex<0) { - bitIndex=7; - currentByte=source[++byteIndex]; - } - return (currentByte&(1<<(bitIndex--)))!=0; - } - } - - public int getInt(int bits) throws IOException { - if(bits>32) { - throw new IllegalArgumentException("Argument \"bits\" must be <= 32"); - } - int res=0; - if(endian==LITTLE_ENDIAN) { - for(int i=0; i>offset; - bitIndex-=bits; - } - else { - res=(((int)currentByte)&0xff&((1<<(bitIndex+1))-1))<<(bits-bitIndex-1); - bits-=bitIndex+1; - currentByte=source[++byteIndex]; - while(bits>=8) { - bits-=8; - res|=(((int)source[byteIndex])&0xff)<0) { - int ci=((int)source[byteIndex])&0xff; - res|=(ci>>(8-bits))&((1<=1<<(bits-1)) { - raw-=1<7) { - bitIndex=0; - currentByte=source[++byteIndex]; - } - root=(currentByte&(1<<(bitIndex++)))!=0?root.o1:root.o0; - } - return root.value.intValue(); - } - - public long getLong(int bits) throws IOException { - if(bits>64) { - throw new IllegalArgumentException("Argument \"bits\" must be <= 64"); - } - long res=0; - if(endian==LITTLE_ENDIAN) { - for(int i=0; i=0; i--) { - if(getBit()) { - res|=(1L<reads an integer encoded as "signed rice" as described in - * the FLAC audio format specification

- * - *

not supported for little endian

- * - * @param order - * @return the decoded integer value read from the stream - * - * @throws IOException if an I/O error occurs - * @throws UnsupportedOperationException if the method is not supported by the implementation - */ - - public int readSignedRice(int order) throws IOException { - - int msbs=-1, lsbs=0, res=0; - - if(endian==LITTLE_ENDIAN) { - // little endian - throw new UnsupportedOperationException("ByteArrayBitInputStream.readSignedRice() is only supported in big endian mode"); - } - else { - // big endian - - byte cb=source[byteIndex]; - do { - msbs++; - if(bitIndex<0) { - bitIndex=7; - byteIndex++; - cb=source[byteIndex]; - } - } while((cb&(1<>offset; - bitIndex-=bits; - } - else { - lsbs=(((int)source[byteIndex])&0xff&((1<<(bitIndex+1))-1))<<(bits-bitIndex-1); - bits-=bitIndex+1; - byteIndex++; - while(bits>=8) { - bits-=8; - lsbs|=(((int)source[byteIndex])&0xff)<0) { - int ci=((int)source[byteIndex])&0xff; - lsbs|=(ci>>(8-bits))&((1<>1)-1:(res>>1); - } - - /** - *

fills the array from offset with len - * integers encoded as "signed rice" as described in - * the FLAC audio format specification

- * - *

not supported for little endian

- * - * @param order - * @param buffer - * @param offset - * @param len - * @return the decoded integer value read from the stream - * - * @throws IOException if an I/O error occurs - * @throws UnsupportedOperationException if the method is not supported by the implementation - */ - - public void readSignedRice(int order, int[] buffer, int off, int len) throws IOException { - - if(endian==LITTLE_ENDIAN) { - // little endian - throw new UnsupportedOperationException("ByteArrayBitInputStream.readSignedRice() is only supported in big endian mode"); - } - else { - // big endian - for(int i=off; i>offset; - bitIndex-=bits; - } - else { - lsbs=(((int)source[byteIndex])&0xff&((1<<(bitIndex+1))-1))<<(bits-bitIndex-1); - bits-=bitIndex+1; - byteIndex++; - while(bits>=8) { - bits-=8; - lsbs|=(((int)source[byteIndex])&0xff)<0) { - int ci=((int)source[byteIndex])&0xff; - lsbs|=(ci>>(8-bits))&((1<>1)-1:(res>>1); - } - } - } - - public void align() { - if(endian==BIG_ENDIAN && bitIndex>=0) { - bitIndex=7; - byteIndex++; - } - else if(endian==LITTLE_ENDIAN && bitIndex<=7) { - bitIndex=0; - byteIndex++; - } - } - - public void setEndian(int endian) { - if(this.endian==BIG_ENDIAN && endian==LITTLE_ENDIAN) { - bitIndex=0; - byteIndex++; - } - else if(this.endian==LITTLE_ENDIAN && endian==BIG_ENDIAN) { - bitIndex=7; - byteIndex++; - } - this.endian=endian; - } - - /** - * @return the byte array used as a source for this instance - */ - - public byte[] getSource() { - return source; - } -} \ No newline at end of file diff --git a/songdbj/de/jarnbjo/util/io/HuffmanNode.java b/songdbj/de/jarnbjo/util/io/HuffmanNode.java deleted file mode 100644 index 88600a4ddd..0000000000 --- a/songdbj/de/jarnbjo/util/io/HuffmanNode.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * $ProjectName$ - * $ProjectRevision$ - * ----------------------------------------------------------- - * $Id$ - * ----------------------------------------------------------- - * - * $Author$ - * - * Description: - * - * Copyright 2002-2003 Tor-Einar Jarnbjo - * ----------------------------------------------------------- - * - * Change History - * ----------------------------------------------------------- - * $Log$ - * Revision 1.1 2005/07/11 15:42:36 hcl - * Songdb java version, source. only 1.5 compatible - * - * Revision 1.1.1.1 2004/04/04 22:09:12 shred - * First Import - * - * Revision 1.2 2003/04/10 19:48:31 jarnbjo - * no message - * - */ - -package de.jarnbjo.util.io; - -import java.io.IOException; -import de.jarnbjo.util.io.BitInputStream; - -/** - * Representation of a node in a Huffman tree, used to read - * Huffman compressed codewords from e.g. a Vorbis stream. - */ - -final public class HuffmanNode { - - private HuffmanNode parent; - private int depth=0; - protected HuffmanNode o0, o1; - protected Integer value; - private boolean full=false; - - /** - * creates a new Huffman tree root node - */ - - public HuffmanNode() { - this(null); - } - - protected HuffmanNode(HuffmanNode parent) { - this.parent=parent; - if(parent!=null) { - depth=parent.getDepth()+1; - } - } - - protected HuffmanNode(HuffmanNode parent, int value) { - this(parent); - this.value=new Integer(value); - full=true; - } - - protected int read(BitInputStream bis) throws IOException { - HuffmanNode iter=this; - while(iter.value==null) { - iter=bis.getBit()?iter.o1:iter.o0; - } - return iter.value.intValue(); - } - - protected HuffmanNode get0() { - return o0==null?set0(new HuffmanNode(this)):o0; - } - - protected HuffmanNode get1() { - return o1==null?set1(new HuffmanNode(this)):o1; - } - - protected Integer getValue() { - return value; - } - - private HuffmanNode getParent() { - return parent; - } - - protected int getDepth() { - return depth; - } - - private boolean isFull() { - return full?true:(full=o0!=null&&o0.isFull()&&o1!=null&&o1.isFull()); - } - - private HuffmanNode set0(HuffmanNode value) { - return o0=value; - } - - private HuffmanNode set1(HuffmanNode value) { - return o1=value; - } - - private void setValue(Integer value) { - full=true; - this.value=value; - } - - /** - * creates a new tree node at the first free location at the given - * depth, and assigns the value to it - * - * @param depth the tree depth of the new node (codeword length in bits) - * @param value the node's new value - */ - - public boolean setNewValue(int depth, int value) { - if(isFull()) { - return false; - } - if(depth==1) { - if(o0==null) { - set0(new HuffmanNode(this, value)); - return true; - } - else if(o1==null) { - set1(new HuffmanNode(this, value)); - return true; - } - else { - return false; - } - } - else { - return get0().setNewValue(depth-1, value)? - true: - get1().setNewValue(depth-1, value); - } - } -} -- cgit v1.2.3