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
---
songdbj/de/jarnbjo/ogg/BasicStream.java | 121 ------
songdbj/de/jarnbjo/ogg/CachedUrlStream.java | 252 ------------
.../de/jarnbjo/ogg/EndOfOggStreamException.java | 45 ---
songdbj/de/jarnbjo/ogg/FileStream.java | 154 --------
songdbj/de/jarnbjo/ogg/LogicalOggStream.java | 151 --------
songdbj/de/jarnbjo/ogg/LogicalOggStreamImpl.java | 213 ----------
songdbj/de/jarnbjo/ogg/OggFormatException.java | 50 ---
songdbj/de/jarnbjo/ogg/OggPage.java | 431 ---------------------
songdbj/de/jarnbjo/ogg/OnDemandUrlStream.java | 127 ------
songdbj/de/jarnbjo/ogg/PhysicalOggStream.java | 124 ------
songdbj/de/jarnbjo/ogg/UncachedUrlStream.java | 207 ----------
.../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 -------
songdbj/de/jarnbjo/vorbis/AudioPacket.java | 328 ----------------
songdbj/de/jarnbjo/vorbis/CodeBook.java | 275 -------------
songdbj/de/jarnbjo/vorbis/CommentHeader.java | 244 ------------
songdbj/de/jarnbjo/vorbis/Floor.java | 124 ------
songdbj/de/jarnbjo/vorbis/Floor0.java | 74 ----
songdbj/de/jarnbjo/vorbis/Floor1.java | 324 ----------------
.../de/jarnbjo/vorbis/IdentificationHeader.java | 120 ------
songdbj/de/jarnbjo/vorbis/Mapping.java | 59 ---
songdbj/de/jarnbjo/vorbis/Mapping0.java | 146 -------
songdbj/de/jarnbjo/vorbis/MdctFloat.java | 321 ---------------
songdbj/de/jarnbjo/vorbis/Mode.java | 75 ----
songdbj/de/jarnbjo/vorbis/Residue.java | 260 -------------
songdbj/de/jarnbjo/vorbis/Residue0.java | 53 ---
songdbj/de/jarnbjo/vorbis/Residue1.java | 55 ---
songdbj/de/jarnbjo/vorbis/Residue2.java | 123 ------
songdbj/de/jarnbjo/vorbis/SetupHeader.java | 131 -------
songdbj/de/jarnbjo/vorbis/Util.java | 127 ------
.../de/jarnbjo/vorbis/VorbisAudioFileReader.java | 217 -----------
.../de/jarnbjo/vorbis/VorbisFormatException.java | 51 ---
songdbj/de/jarnbjo/vorbis/VorbisStream.java | 247 ------------
35 files changed, 5972 deletions(-)
delete mode 100644 songdbj/de/jarnbjo/ogg/BasicStream.java
delete mode 100644 songdbj/de/jarnbjo/ogg/CachedUrlStream.java
delete mode 100644 songdbj/de/jarnbjo/ogg/EndOfOggStreamException.java
delete mode 100644 songdbj/de/jarnbjo/ogg/FileStream.java
delete mode 100644 songdbj/de/jarnbjo/ogg/LogicalOggStream.java
delete mode 100644 songdbj/de/jarnbjo/ogg/LogicalOggStreamImpl.java
delete mode 100644 songdbj/de/jarnbjo/ogg/OggFormatException.java
delete mode 100644 songdbj/de/jarnbjo/ogg/OggPage.java
delete mode 100644 songdbj/de/jarnbjo/ogg/OnDemandUrlStream.java
delete mode 100644 songdbj/de/jarnbjo/ogg/PhysicalOggStream.java
delete mode 100644 songdbj/de/jarnbjo/ogg/UncachedUrlStream.java
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
delete mode 100644 songdbj/de/jarnbjo/vorbis/AudioPacket.java
delete mode 100644 songdbj/de/jarnbjo/vorbis/CodeBook.java
delete mode 100644 songdbj/de/jarnbjo/vorbis/CommentHeader.java
delete mode 100644 songdbj/de/jarnbjo/vorbis/Floor.java
delete mode 100644 songdbj/de/jarnbjo/vorbis/Floor0.java
delete mode 100644 songdbj/de/jarnbjo/vorbis/Floor1.java
delete mode 100644 songdbj/de/jarnbjo/vorbis/IdentificationHeader.java
delete mode 100644 songdbj/de/jarnbjo/vorbis/Mapping.java
delete mode 100644 songdbj/de/jarnbjo/vorbis/Mapping0.java
delete mode 100644 songdbj/de/jarnbjo/vorbis/MdctFloat.java
delete mode 100644 songdbj/de/jarnbjo/vorbis/Mode.java
delete mode 100644 songdbj/de/jarnbjo/vorbis/Residue.java
delete mode 100644 songdbj/de/jarnbjo/vorbis/Residue0.java
delete mode 100644 songdbj/de/jarnbjo/vorbis/Residue1.java
delete mode 100644 songdbj/de/jarnbjo/vorbis/Residue2.java
delete mode 100644 songdbj/de/jarnbjo/vorbis/SetupHeader.java
delete mode 100644 songdbj/de/jarnbjo/vorbis/Util.java
delete mode 100644 songdbj/de/jarnbjo/vorbis/VorbisAudioFileReader.java
delete mode 100644 songdbj/de/jarnbjo/vorbis/VorbisFormatException.java
delete mode 100644 songdbj/de/jarnbjo/vorbis/VorbisStream.java
(limited to 'songdbj/de/jarnbjo')
diff --git a/songdbj/de/jarnbjo/ogg/BasicStream.java b/songdbj/de/jarnbjo/ogg/BasicStream.java
deleted file mode 100644
index 9939524d6c..0000000000
--- a/songdbj/de/jarnbjo/ogg/BasicStream.java
+++ /dev/null
@@ -1,121 +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.3 2004/09/21 12:09:45 shred
- * *** empty log message ***
- *
- * Revision 1.2 2004/09/21 06:38:45 shred
- * Importe reorganisiert, damit Eclipse Ruhe gibt. ;-)
- *
- * Revision 1.1.1.1 2004/04/04 22:09:12 shred
- * First Import
- *
- *
- */
-
-package de.jarnbjo.ogg;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.LinkedList;
-
-/**
- * Implementation of the PhysicalOggStream
interface for reading
- * an Ogg stream from a URL. This class performs
- * no internal caching, and will not read data from the network before
- * requested to do so. It is intended to be used in non-realtime applications
- * like file download managers or similar.
- */
-
-public class BasicStream implements PhysicalOggStream {
-
- private boolean closed=false;
- private InputStream sourceStream;
- private Object drainLock=new Object();
- private LinkedList pageCache=new LinkedList();
- private long numberOfSamples=-1;
- private int position=0;
-
- private HashMap logicalStreams=new HashMap();
- private OggPage firstPage;
-
- public BasicStream(InputStream sourceStream) throws OggFormatException, IOException {
- firstPage=OggPage.create(sourceStream);
- position+=firstPage.getTotalLength();
- LogicalOggStreamImpl los=new LogicalOggStreamImpl(this, firstPage.getStreamSerialNumber());
- logicalStreams.put(new Integer(firstPage.getStreamSerialNumber()), los);
- los.checkFormat(firstPage);
- }
-
- public Collection getLogicalStreams() {
- return logicalStreams.values();
- }
-
- public boolean isOpen() {
- return !closed;
- }
-
- public void close() throws IOException {
- closed=true;
- sourceStream.close();
- }
-
- public int getContentLength() {
- return -1;
- }
-
- public int getPosition() {
- return position;
- }
-
- int pageNumber=2;
-
- public OggPage getOggPage(int index) throws IOException {
- if(firstPage!=null) {
- OggPage tmp=firstPage;
- firstPage=null;
- return tmp;
- }
- else {
- OggPage page=OggPage.create(sourceStream);
- position+=page.getTotalLength();
- return page;
- }
- }
-
- private LogicalOggStream getLogicalStream(int serialNumber) {
- return (LogicalOggStream)logicalStreams.get(new Integer(serialNumber));
- }
-
- public void setTime(long granulePosition) throws IOException {
- throw new UnsupportedOperationException("Method not supported by this class");
- }
-
- /**
- * @return always false
- */
-
- public boolean isSeekable() {
- return false;
- }
-
-}
\ No newline at end of file
diff --git a/songdbj/de/jarnbjo/ogg/CachedUrlStream.java b/songdbj/de/jarnbjo/ogg/CachedUrlStream.java
deleted file mode 100644
index 86f792e272..0000000000
--- a/songdbj/de/jarnbjo/ogg/CachedUrlStream.java
+++ /dev/null
@@ -1,252 +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.1 2003/04/10 19:48:22 jarnbjo
- * no message
- *
- *
- */
-
-package de.jarnbjo.ogg;
-
-import java.io.*;
-import java.net.*;
-import java.util.*;
-
-/**
- * Implementation of the PhysicalOggStream
interface for reading
- * and caching an Ogg stream from a URL. This class reads the data as fast as
- * possible from the URL, caches it locally either in memory or on disk, and
- * supports seeking within the available data.
- */
-
-public class CachedUrlStream implements PhysicalOggStream {
-
- private boolean closed=false;
- private URLConnection source;
- private InputStream sourceStream;
- private Object drainLock=new Object();
- private RandomAccessFile drain;
- private byte[] memoryCache;
- private ArrayList pageOffsets=new ArrayList();
- private ArrayList pageLengths=new ArrayList();
- private long numberOfSamples=-1;
- private long cacheLength;
-
- private HashMap logicalStreams=new HashMap();
-
- private LoaderThread loaderThread;
-
- /**
- * Creates an instance of this class, using a memory cache.
- */
-
- public CachedUrlStream(URL source) throws OggFormatException, IOException {
- this(source, null);
- }
-
- /**
- * Creates an instance of this class, using the specified file as cache. The
- * file is not automatically deleted when this class is disposed.
- */
-
- public CachedUrlStream(URL source, RandomAccessFile drain) throws OggFormatException, IOException {
-
- this.source=source.openConnection();
-
- if(drain==null) {
- int contentLength=this.source.getContentLength();
- if(contentLength==-1) {
- throw new IOException("The URLConncetion's content length must be set when operating with a in-memory cache.");
- }
- memoryCache=new byte[contentLength];
- }
-
- this.drain=drain;
- this.sourceStream=this.source.getInputStream();
-
- loaderThread=new LoaderThread(sourceStream, drain, memoryCache);
- new Thread(loaderThread).start();
-
- while(!loaderThread.isBosDone() || pageOffsets.size()<20) {
- System.out.print("pageOffsets.size(): "+pageOffsets.size()+"\r");
- try {
- Thread.sleep(200);
- }
- catch (InterruptedException ex) {
- }
- }
- System.out.println();
- System.out.println("caching "+pageOffsets.size()+"/20 pages\r");
- }
-
- public Collection getLogicalStreams() {
- return logicalStreams.values();
- }
-
- public boolean isOpen() {
- return !closed;
- }
-
- public void close() throws IOException {
- closed=true;
- sourceStream.close();
- }
-
- public long getCacheLength() {
- return cacheLength;
- }
-
- /*
- private OggPage getNextPage() throws EndOfOggStreamException, IOException, OggFormatException {
- return getNextPage(false);
- }
-
- private OggPage getNextPage(boolean skipData) throws EndOfOggStreamException, IOException, OggFormatException {
- return OggPage.create(sourceStream, skipData);
- }
- */
-
- public OggPage getOggPage(int index) throws IOException {
- synchronized(drainLock) {
- Long offset=(Long)pageOffsets.get(index);
- Long length=(Long)pageLengths.get(index);
- if(offset!=null) {
- if(drain!=null) {
- drain.seek(offset.longValue());
- return OggPage.create(drain);
- }
- else {
- byte[] tmpArray=new byte[length.intValue()];
- System.arraycopy(memoryCache, offset.intValue(), tmpArray, 0, length.intValue());
- return OggPage.create(tmpArray);
- }
- }
- else {
- return null;
- }
- }
- }
-
- private LogicalOggStream getLogicalStream(int serialNumber) {
- return (LogicalOggStream)logicalStreams.get(new Integer(serialNumber));
- }
-
- public void setTime(long granulePosition) throws IOException {
- for(Iterator iter=logicalStreams.values().iterator(); iter.hasNext(); ) {
- LogicalOggStream los=(LogicalOggStream)iter.next();
- los.setTime(granulePosition);
- }
- }
-
- public class LoaderThread implements Runnable {
-
- private InputStream source;
- private RandomAccessFile drain;
- private byte[] memoryCache;
-
- private boolean bosDone=false;
-
- private int pageNumber;
-
- public LoaderThread(InputStream source, RandomAccessFile drain, byte[] memoryCache) {
- this.source=source;
- this.drain=drain;
- this.memoryCache=memoryCache;
- }
-
- public void run() {
- try {
- boolean eos=false;
- byte[] buffer=new byte[8192];
- while(!eos) {
- OggPage op=OggPage.create(source);
- synchronized (drainLock) {
- int listSize=pageOffsets.size();
-
- long pos=
- listSize>0?
- ((Long)pageOffsets.get(listSize-1)).longValue()+
- ((Long)pageLengths.get(listSize-1)).longValue():
- 0;
-
- byte[] arr1=op.getHeader();
- byte[] arr2=op.getSegmentTable();
- byte[] arr3=op.getData();
-
- if(drain!=null) {
- drain.seek(pos);
- drain.write(arr1);
- drain.write(arr2);
- drain.write(arr3);
- }
- else {
- System.arraycopy(arr1, 0, memoryCache, (int)pos, arr1.length);
- System.arraycopy(arr2, 0, memoryCache, (int)pos+arr1.length, arr2.length);
- System.arraycopy(arr3, 0, memoryCache, (int)pos+arr1.length+arr2.length, arr3.length);
- }
-
- pageOffsets.add(new Long(pos));
- pageLengths.add(new Long(arr1.length+arr2.length+arr3.length));
- }
-
- if(!op.isBos()) {
- bosDone=true;
- //System.out.println("bosDone=true;");
- }
- if(op.isEos()) {
- eos=true;
- }
-
- LogicalOggStreamImpl los=(LogicalOggStreamImpl)getLogicalStream(op.getStreamSerialNumber());
- if(los==null) {
- los=new LogicalOggStreamImpl(CachedUrlStream.this, op.getStreamSerialNumber());
- logicalStreams.put(new Integer(op.getStreamSerialNumber()), los);
- los.checkFormat(op);
- }
-
- los.addPageNumberMapping(pageNumber);
- los.addGranulePosition(op.getAbsoluteGranulePosition());
-
- pageNumber++;
- cacheLength=op.getAbsoluteGranulePosition();
- //System.out.println("read page: "+pageNumber);
- }
- }
- catch(EndOfOggStreamException e) {
- // ok
- }
- catch(IOException e) {
- e.printStackTrace();
- }
- }
-
- public boolean isBosDone() {
- return bosDone;
- }
- }
-
- public boolean isSeekable() {
- return true;
- }
-}
\ No newline at end of file
diff --git a/songdbj/de/jarnbjo/ogg/EndOfOggStreamException.java b/songdbj/de/jarnbjo/ogg/EndOfOggStreamException.java
deleted file mode 100644
index 4a0c3200f4..0000000000
--- a/songdbj/de/jarnbjo/ogg/EndOfOggStreamException.java
+++ /dev/null
@@ -1,45 +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.2 2005/02/09 23:10:47 shred
- * Serial UID für jarnbjo
- *
- * Revision 1.1.1.1 2004/04/04 22:09:12 shred
- * First Import
- *
- * Revision 1.1 2003/03/03 21:02:20 jarnbjo
- * no message
- *
- */
-
- package de.jarnbjo.ogg;
-
-import java.io.IOException;
-
-/**
- * Exception thrown when reaching the end of an Ogg stream
- */
-
-public class EndOfOggStreamException extends IOException {
- private static final long serialVersionUID = 3907210438109444408L;
-
- public EndOfOggStreamException() {
- }
-}
\ No newline at end of file
diff --git a/songdbj/de/jarnbjo/ogg/FileStream.java b/songdbj/de/jarnbjo/ogg/FileStream.java
deleted file mode 100644
index 5a526300bf..0000000000
--- a/songdbj/de/jarnbjo/ogg/FileStream.java
+++ /dev/null
@@ -1,154 +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.1 2003/04/10 19:48:22 jarnbjo
- * no message
- *
- *
- */
-
-package de.jarnbjo.ogg;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * Implementation of the PhysicalOggStream
interface for accessing
- * normal disk files.
- */
-
-public class FileStream implements PhysicalOggStream {
-
- private boolean closed=false;
- private RandomAccessFile source;
- private long[] pageOffsets;
- private long numberOfSamples=-1;
-
- private HashMap logicalStreams=new HashMap();
-
- /**
- * Creates access to the specified file through the PhysicalOggStream
interface.
- * The specified source file must have been opened for reading.
- *
- * @param source the file to read from
- *
- * @throws OggFormatException if the stream format is incorrect
- * @throws IOException if some other IO error occurs when reading the file
- */
-
- public FileStream(RandomAccessFile source) throws OggFormatException, IOException {
- this.source=source;
-
- ArrayList po=new ArrayList();
- int pageNumber=0;
- try {
- while(true) {
- po.add(new Long(this.source.getFilePointer()));
-
- // skip data if pageNumber>0
- OggPage op=getNextPage(pageNumber>0);
- if(op==null) {
- break;
- }
-
- LogicalOggStreamImpl los=(LogicalOggStreamImpl)getLogicalStream(op.getStreamSerialNumber());
- if(los==null) {
- los=new LogicalOggStreamImpl(this, op.getStreamSerialNumber());
- logicalStreams.put(new Integer(op.getStreamSerialNumber()), los);
- }
-
- if(pageNumber==0) {
- los.checkFormat(op);
- }
-
- los.addPageNumberMapping(pageNumber);
- los.addGranulePosition(op.getAbsoluteGranulePosition());
-
- if(pageNumber>0) {
- this.source.seek(this.source.getFilePointer()+op.getTotalLength());
- }
-
- pageNumber++;
- }
- }
- catch(EndOfOggStreamException e) {
- // ok
- }
- catch(IOException e) {
- throw e;
- }
- //System.out.println("pageNumber: "+pageNumber);
- this.source.seek(0L);
- pageOffsets=new long[po.size()];
- int i=0;
- Iterator iter=po.iterator();
- while(iter.hasNext()) {
- pageOffsets[i++]=((Long)iter.next()).longValue();
- }
- }
-
- public Collection getLogicalStreams() {
- return logicalStreams.values();
- }
-
- public boolean isOpen() {
- return !closed;
- }
-
- public void close() throws IOException {
- closed=true;
- source.close();
- }
-
- private OggPage getNextPage() throws EndOfOggStreamException, IOException, OggFormatException {
- return getNextPage(false);
- }
-
- private OggPage getNextPage(boolean skipData) throws EndOfOggStreamException, IOException, OggFormatException {
- return OggPage.create(source, skipData);
- }
-
- public OggPage getOggPage(int index) throws IOException {
- source.seek(pageOffsets[index]);
- return OggPage.create(source);
- }
-
- private LogicalOggStream getLogicalStream(int serialNumber) {
- return (LogicalOggStream)logicalStreams.get(new Integer(serialNumber));
- }
-
- public void setTime(long granulePosition) throws IOException {
- for(Iterator iter=logicalStreams.values().iterator(); iter.hasNext(); ) {
- LogicalOggStream los=(LogicalOggStream)iter.next();
- los.setTime(granulePosition);
- }
- }
-
- /**
- * @return always true
- */
-
- public boolean isSeekable() {
- return true;
- }
-}
\ No newline at end of file
diff --git a/songdbj/de/jarnbjo/ogg/LogicalOggStream.java b/songdbj/de/jarnbjo/ogg/LogicalOggStream.java
deleted file mode 100644
index 2f97b2a728..0000000000
--- a/songdbj/de/jarnbjo/ogg/LogicalOggStream.java
+++ /dev/null
@@ -1,151 +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:22 jarnbjo
- * no message
- *
- * Revision 1.1 2003/03/03 21:02:20 jarnbjo
- * no message
- *
- */
-
-package de.jarnbjo.ogg;
-
-import java.io.IOException;
-
-/**
- * Interface providing access to a logical Ogg stream as part of a
- * physical Ogg stream.
- */
-
-
-public interface LogicalOggStream {
-
- public static final String FORMAT_UNKNOWN = "application/octet-stream";
-
- public static final String FORMAT_VORBIS = "audio/x-vorbis";
- public static final String FORMAT_FLAC = "audio/x-flac";
- public static final String FORMAT_THEORA = "video/x-theora";
-
- /**
- * Note: To read from the stream, you must use either
- * this method or the method getNextOggPacket
.
- * Mixing calls to the two methods will cause data corruption.
- *
- * @return the next Ogg page
- *
- * @see #getNextOggPacket()
- *
- * @throws OggFormatException if the ogg stream is corrupted
- * @throws IOException if some other IO error occurs
- */
-
- public OggPage getNextOggPage() throws OggFormatException, IOException;
-
- /**
- * Note: To read from the stream, you must use either
- * this method or the method getNextOggPage
.
- * Mixing calls to the two methods will cause data corruption.
- *
- * @return the next packet as a byte array
- *
- * @see #getNextOggPage()
- *
- * @throws OggFormatException if the ogg stream is corrupted
- * @throws IOException if some other IO error occurs
- */
-
- public byte[] getNextOggPacket() throws OggFormatException, IOException;
-
- /**
- * Checks if this stream is open for reading.
- *
- * @return true
if this stream is open for reading,
- * false
otherwise
- */
-
- public boolean isOpen();
-
- /**
- * Closes this stream. After invoking this method, no further access
- * to the streams data is possible.
- *
- * @throws IOException if an IO error occurs
- */
-
- public void close() throws IOException;
-
- /**
- * Sets the stream's position to the beginning of the stream.
- * This method does not work if the physical Ogg stream is not
- * seekable.
- *
- * @throws OggFormatException if the ogg stream is corrupted
- * @throws IOException if some other IO error occurs
- */
-
- public void reset() throws OggFormatException, IOException;
-
- /**
- * This method does not work if the physical Ogg stream is not
- * seekable.
- *
- * @return the granule position of the last page within
- * this stream
- */
-
- public long getMaximumGranulePosition();
-
- /**
- * This method is invoked on all logical streams when
- * calling the same method on the physical stream. The
- * same restrictions as mentioned there apply.
- * This method does not work if the physical Ogg stream is not
- * seekable.
- *
- * @param granulePosition
- *
- * @see PhysicalOggStream#setTime(long)
- *
- * @throws IOException if an IO error occurs
- */
-
- public void setTime(long granulePosition) throws IOException;
-
- /**
- * @return the last parsed granule position of this stream
- */
-
- public long getTime();
-
- /**
- * @return the content type of this stream
- *
- * @see #FORMAT_UNKNOWN
- * @see #FORMAT_VORBIS
- * @see #FORMAT_FLAC
- * @see #FORMAT_THEORA
- */
-
- public String getFormat();
-}
\ No newline at end of file
diff --git a/songdbj/de/jarnbjo/ogg/LogicalOggStreamImpl.java b/songdbj/de/jarnbjo/ogg/LogicalOggStreamImpl.java
deleted file mode 100644
index 1a503e91ca..0000000000
--- a/songdbj/de/jarnbjo/ogg/LogicalOggStreamImpl.java
+++ /dev/null
@@ -1,213 +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/03/31 00:23:04 jarnbjo
- * no message
- *
- * Revision 1.2 2003/03/16 01:11:26 jarnbjo
- * no message
- *
- * Revision 1.1 2003/03/03 21:02:20 jarnbjo
- * no message
- *
- */
-
-package de.jarnbjo.ogg;
-
-import java.io.*;
-import java.util.*;
-
-public class LogicalOggStreamImpl implements LogicalOggStream {
-
- private PhysicalOggStream source;
- private int serialNumber;
-
- private ArrayList pageNumberMapping=new ArrayList();
- private ArrayList granulePositions=new ArrayList();
-
- private int pageIndex=0;
- private OggPage currentPage;
- private int currentSegmentIndex;
-
- private boolean open=true;
-
- private String format=FORMAT_UNKNOWN;
-
- public LogicalOggStreamImpl(PhysicalOggStream source, int serialNumber) {
- this.source=source;
- this.serialNumber=serialNumber;
- }
-
- public void addPageNumberMapping(int physicalPageNumber) {
- pageNumberMapping.add(new Integer(physicalPageNumber));
- }
-
- public void addGranulePosition(long granulePosition) {
- granulePositions.add(new Long(granulePosition));
- }
-
- public synchronized void reset() throws OggFormatException, IOException {
- currentPage=null;
- currentSegmentIndex=0;
- pageIndex=0;
- }
-
- public synchronized OggPage getNextOggPage() throws EndOfOggStreamException, OggFormatException, IOException {
- if(source.isSeekable()) {
- currentPage=source.getOggPage(((Integer)pageNumberMapping.get(pageIndex++)).intValue());
- }
- else {
- currentPage=source.getOggPage(-1);
- }
- return currentPage;
- }
-
- public synchronized byte[] getNextOggPacket() throws EndOfOggStreamException, OggFormatException, IOException {
- ByteArrayOutputStream res=new ByteArrayOutputStream();
- int segmentLength=0;
-
- if(currentPage==null) {
- currentPage=getNextOggPage();
- }
-
- do {
- if(currentSegmentIndex>=currentPage.getSegmentOffsets().length) {
- currentSegmentIndex=0;
-
- if(!currentPage.isEos()) {
- if(source.isSeekable() && pageNumberMapping.size()<=pageIndex) {
- while(pageNumberMapping.size()<=pageIndex+10) {
- try {
- Thread.sleep(1000);
- }
- catch (InterruptedException ex) {
- }
- }
- }
- currentPage=getNextOggPage();
-
- if(res.size()==0 && currentPage.isContinued()) {
- boolean done=false;
- while(!done) {
- if(currentPage.getSegmentLengths()[currentSegmentIndex++]!=255) {
- done=true;
- }
- if(currentSegmentIndex>currentPage.getSegmentTable().length) {
- currentPage=source.getOggPage(((Integer)pageNumberMapping.get(pageIndex++)).intValue());
- }
- }
- }
- }
- else {
- throw new EndOfOggStreamException();
- }
- }
- segmentLength=currentPage.getSegmentLengths()[currentSegmentIndex];
- res.write(currentPage.getData(), currentPage.getSegmentOffsets()[currentSegmentIndex], segmentLength);
- currentSegmentIndex++;
- } while(segmentLength==255);
-
- return res.toByteArray();
- }
-
- public boolean isOpen() {
- return open;
- }
-
- public void close() throws IOException {
- open=false;
- }
-
- public long getMaximumGranulePosition() {
- Long mgp=(Long)granulePositions.get(granulePositions.size()-1);
- return mgp.longValue();
- }
-
- public synchronized long getTime() {
- return currentPage!=null?currentPage.getAbsoluteGranulePosition():-1;
- }
-
- public synchronized void setTime(long granulePosition) throws IOException {
-
- int page=0;
- for(page=0; pagegranulePosition) {
- break;
- }
- }
-
- pageIndex=page;
- currentPage=source.getOggPage(((Integer)pageNumberMapping.get(pageIndex++)).intValue());
- currentSegmentIndex=0;
- int segmentLength=0;
- do {
- if(currentSegmentIndex>=currentPage.getSegmentOffsets().length) {
- currentSegmentIndex=0;
- if(pageIndex>=pageNumberMapping.size()) {
- throw new EndOfOggStreamException();
- }
- currentPage=source.getOggPage(((Integer)pageNumberMapping.get(pageIndex++)).intValue());
- }
- segmentLength=currentPage.getSegmentLengths()[currentSegmentIndex];
- currentSegmentIndex++;
- } while(segmentLength==255);
- }
-
- public void checkFormat(OggPage page) {
- byte[] data=page.getData();
-
- if(data.length>=7 &&
- data[1]==0x76 &&
- data[2]==0x6f &&
- data[3]==0x72 &&
- data[4]==0x62 &&
- data[5]==0x69 &&
- data[6]==0x73) {
-
- format=FORMAT_VORBIS;
- }
- else if(data.length>=7 &&
- data[1]==0x74 &&
- data[2]==0x68 &&
- data[3]==0x65 &&
- data[4]==0x6f &&
- data[5]==0x72 &&
- data[6]==0x61) {
-
- format=FORMAT_THEORA;
- }
- else if (data.length==4 &&
- data[0]==0x66 &&
- data[1]==0x4c &&
- data[2]==0x61 &&
- data[3]==0x43) {
-
- format=FORMAT_FLAC;
- }
- }
-
- public String getFormat() {
- return format;
- }
-}
\ No newline at end of file
diff --git a/songdbj/de/jarnbjo/ogg/OggFormatException.java b/songdbj/de/jarnbjo/ogg/OggFormatException.java
deleted file mode 100644
index a6b2466b92..0000000000
--- a/songdbj/de/jarnbjo/ogg/OggFormatException.java
+++ /dev/null
@@ -1,50 +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.2 2005/02/09 23:10:47 shred
- * Serial UID für jarnbjo
- *
- * Revision 1.1.1.1 2004/04/04 22:09:12 shred
- * First Import
- *
- * Revision 1.1 2003/03/03 21:02:20 jarnbjo
- * no message
- *
- */
-
-package de.jarnbjo.ogg;
-
-import java.io.IOException;
-
-/**
- * Exception thrown when trying to read a corrupted Ogg stream.
- */
-
-public class OggFormatException extends IOException {
- private static final long serialVersionUID = 3544953238333175349L;
-
- public OggFormatException() {
- super();
- }
-
- public OggFormatException(String message) {
- super(message);
- }
-}
\ No newline at end of file
diff --git a/songdbj/de/jarnbjo/ogg/OggPage.java b/songdbj/de/jarnbjo/ogg/OggPage.java
deleted file mode 100644
index cc965cc7a9..0000000000
--- a/songdbj/de/jarnbjo/ogg/OggPage.java
+++ /dev/null
@@ -1,431 +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:22 jarnbjo
- * no message
- *
- * Revision 1.2 2003/03/31 00:23:04 jarnbjo
- * no message
- *
- * Revision 1.1 2003/03/03 21:02:20 jarnbjo
- * no message
- *
- */
-
-package de.jarnbjo.ogg;
-
-import java.io.*;
-
-import de.jarnbjo.util.io.*;
-
-/**
- * An instance of this class represents an ogg page read from an ogg file
- * or network stream. It has no public constructor, but instances can be
- * created by the create
methods, supplying a JMF stream or
- * a RandomAccessFile
- * which is positioned at the beginning of an Ogg page.
- *
- * Furtheron, the class provides methods for accessing the raw page data,
- * as well as data attributes like segmenting information, sequence number,
- * stream serial number, chechsum and wether this page is the beginning or
- * end of a logical bitstream (BOS, EOS) and if the page data starts with a
- * continued packet or a fresh data packet.
- */
-
-public class OggPage {
-
- private int version;
- private boolean continued, bos, eos;
- private long absoluteGranulePosition;
- private int streamSerialNumber, pageSequenceNumber, pageCheckSum;
- private int[] segmentOffsets;
- private int[] segmentLengths;
- private int totalLength;
- private byte[] header, segmentTable, data;
-
- protected OggPage() {
- }
-
- private OggPage(
- int version,
- boolean continued,
- boolean bos,
- boolean eos,
- long absoluteGranulePosition,
- int streamSerialNumber,
- int pageSequenceNumber,
- int pageCheckSum,
- int[] segmentOffsets,
- int[] segmentLengths,
- int totalLength,
- byte[] header,
- byte[] segmentTable,
- byte[] data) {
-
- this.version=version;
- this.continued=continued;
- this.bos=bos;
- this.eos=eos;
- this.absoluteGranulePosition=absoluteGranulePosition;
- this.streamSerialNumber=streamSerialNumber;
- this.pageSequenceNumber=pageSequenceNumber;
- this.pageCheckSum=pageCheckSum;
- this.segmentOffsets=segmentOffsets;
- this.segmentLengths=segmentLengths;
- this.totalLength=totalLength;
- this.header=header;
- this.segmentTable=segmentTable;
- this.data=data;
- }
-
- /**
- * this method equals to create(RandomAccessFile source, false)
- *
- * @see #create(RandomAccessFile, boolean)
- */
-
- public static OggPage create(RandomAccessFile source) throws IOException, EndOfOggStreamException, OggFormatException {
- return create(source, false);
- }
-
- /**
- * This method is called to read data from the current position in the
- * specified RandomAccessFile and create a new OggPage instance based on the data
- * read. If the parameter skipData
is set to true
,
- * the actual page segments (page data) is skipped and not read into
- * memory. This mode is useful when scanning through an ogg file to build
- * a seek table.
- *
- * @param source the source from which the ogg page is generated
- * @param skipData if set to true
, the actual page data is not read into memory
- * @return an ogg page created by reading data from the specified source, starting at the current position
- * @throws FormatException if the data read from the specified source is not matching the specification for an ogg page
- * @throws EndOfStreamException if it is not possible to read an entire ogg page from the specified source
- * @throws IOException if some other I/O error is detected when reading from the source
- *
- * @see #create(RandomAccessFile)
- */
-
- public static OggPage create(RandomAccessFile source, boolean skipData) throws IOException, EndOfOggStreamException, OggFormatException {
- return create((Object)source, skipData);
- }
-
- /**
- * this method equals to create(InputStream source, false)
- *
- * @see #create(InputStream, boolean)
- */
-
- public static OggPage create(InputStream source) throws IOException, EndOfOggStreamException, OggFormatException {
- return create(source, false);
- }
-
- /**
- * This method is called to read data from the current position in the
- * specified InpuStream and create a new OggPage instance based on the data
- * read. If the parameter skipData
is set to true
,
- * the actual page segments (page data) is skipped and not read into
- * memory. This mode is useful when scanning through an ogg file to build
- * a seek table.
- *
- * @param source the source from which the ogg page is generated
- * @param skipData if set to true
, the actual page data is not read into memory
- * @return an ogg page created by reading data from the specified source, starting at the current position
- * @throws FormatException if the data read from the specified source is not matching the specification for an ogg page
- * @throws EndOfStreamException if it is not possible to read an entire ogg page from the specified source
- * @throws IOException if some other I/O error is detected when reading from the source
- *
- * @see #create(InputStream)
- */
-
- public static OggPage create(InputStream source, boolean skipData) throws IOException, EndOfOggStreamException, OggFormatException {
- return create((Object)source, skipData);
- }
-
- /**
- * this method equals to create(byte[] source, false)
- *
- * @see #create(byte[], boolean)
- */
-
- public static OggPage create(byte[] source) throws IOException, EndOfOggStreamException, OggFormatException {
- return create(source, false);
- }
-
- /**
- * This method is called to
- * create a new OggPage instance based on the specified byte array.
- *
- * @param source the source from which the ogg page is generated
- * @param skipData if set to true
, the actual page data is not read into memory
- * @return an ogg page created by reading data from the specified source, starting at the current position
- * @throws FormatException if the data read from the specified source is not matching the specification for an ogg page
- * @throws EndOfStreamException if it is not possible to read an entire ogg page from the specified source
- * @throws IOException if some other I/O error is detected when reading from the source
- *
- * @see #create(byte[])
- */
-
- public static OggPage create(byte[] source, boolean skipData) throws IOException, EndOfOggStreamException, OggFormatException {
- return create((Object)source, skipData);
- }
-
- private static OggPage create(Object source, boolean skipData) throws IOException, EndOfOggStreamException, OggFormatException {
-
- try {
- int sourceOffset=27;
-
- byte[] header=new byte[27];
- if(source instanceof RandomAccessFile) {
- RandomAccessFile raf=(RandomAccessFile)source;
- if(raf.getFilePointer()==raf.length()) {
- return null;
- }
- raf.readFully(header);
- }
- else if(source instanceof InputStream) {
- readFully((InputStream)source, header);
- }
- else if(source instanceof byte[]) {
- System.arraycopy((byte[])source, 0, header, 0, 27);
- }
-
- BitInputStream bdSource=new ByteArrayBitInputStream(header);
-
- int capture=bdSource.getInt(32);
-
- if(capture!=0x5367674f) {
- //throw new FormatException("Ogg page does not start with 'OggS' (0x4f676753)");
-
- /*
- ** This condition is IMHO an error, but older Ogg files often contain
- ** pages with a different capture than OggS. I am not sure how to
- ** manage these pages, but the decoder seems to work properly, if
- ** the incorrect capture is simply ignored.
- */
-
- String cs=Integer.toHexString(capture);
- while(cs.length()<8) {
- cs="0"+cs;
- }
- cs=cs.substring(6, 8)+cs.substring(4, 6)+cs.substring(2, 4)+cs.substring(0, 2);
- char c1=(char)(Integer.valueOf(cs.substring(0, 2), 16).intValue());
- char c2=(char)(Integer.valueOf(cs.substring(2, 4), 16).intValue());
- char c3=(char)(Integer.valueOf(cs.substring(4, 6), 16).intValue());
- char c4=(char)(Integer.valueOf(cs.substring(6, 8), 16).intValue());
- System.out.println("Ogg packet header is 0x"+cs+" ("+c1+c2+c3+c4+"), should be 0x4f676753 (OggS)");
- }
-
- int version=bdSource.getInt(8);
- byte tmp=(byte)bdSource.getInt(8);
- boolean bf1=(tmp&1)!=0;
- boolean bos=(tmp&2)!=0;
- boolean eos=(tmp&4)!=0;
- long absoluteGranulePosition=bdSource.getLong(64);
- int streamSerialNumber=bdSource.getInt(32);
- int pageSequenceNumber=bdSource.getInt(32);
- int pageCheckSum=bdSource.getInt(32);
- int pageSegments=bdSource.getInt(8);
-
- //System.out.println("OggPage: "+streamSerialNumber+" / "+absoluteGranulePosition+" / "+pageSequenceNumber);
-
- int[] segmentOffsets=new int[pageSegments];
- int[] segmentLengths=new int[pageSegments];
- int totalLength=0;
-
- byte[] segmentTable=new byte[pageSegments];
- byte[] tmpBuf=new byte[1];
-
- for(int i=0; itrue if this page begins with a continued packet
- */
-
- public boolean isContinued() {
- return continued;
- }
-
- /**
- * @return true
if this page begins with a fresh packet
- */
-
- public boolean isFresh() {
- return !continued;
- }
-
- /**
- * @return true
if this page is the beginning of a logical stream
- */
-
- public boolean isBos() {
- return bos;
- }
-
- /**
- * @return true
if this page is the end of a logical stream
- */
-
- public boolean isEos() {
- return eos;
- }
-
-}
\ No newline at end of file
diff --git a/songdbj/de/jarnbjo/ogg/OnDemandUrlStream.java b/songdbj/de/jarnbjo/ogg/OnDemandUrlStream.java
deleted file mode 100644
index 98159c4e7c..0000000000
--- a/songdbj/de/jarnbjo/ogg/OnDemandUrlStream.java
+++ /dev/null
@@ -1,127 +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.1 2003/04/10 19:48:22 jarnbjo
- * no message
- *
- * Revision 1.1 2003/03/31 00:23:04 jarnbjo
- * no message
- *
- */
-
-package de.jarnbjo.ogg;
-
-import java.io.*;
-import java.net.*;
-import java.util.*;
-
-/**
- * Implementation of the PhysicalOggStream
interface for reading
- * an Ogg stream from a URL. This class performs
- * no internal caching, and will not read data from the network before
- * requested to do so. It is intended to be used in non-realtime applications
- * like file download managers or similar.
- */
-
-public class OnDemandUrlStream implements PhysicalOggStream {
-
- private boolean closed=false;
- private URLConnection source;
- private InputStream sourceStream;
- private Object drainLock=new Object();
- private LinkedList pageCache=new LinkedList();
- private long numberOfSamples=-1;
- private int contentLength=0;
- private int position=0;
-
- private HashMap logicalStreams=new HashMap();
- private OggPage firstPage;
-
- private static final int PAGECACHE_SIZE = 20;
-
- public OnDemandUrlStream(URL source) throws OggFormatException, IOException {
- this.source=source.openConnection();
- this.sourceStream=this.source.getInputStream();
-
- contentLength=this.source.getContentLength();
-
- firstPage=OggPage.create(sourceStream);
- position+=firstPage.getTotalLength();
- LogicalOggStreamImpl los=new LogicalOggStreamImpl(this, firstPage.getStreamSerialNumber());
- logicalStreams.put(new Integer(firstPage.getStreamSerialNumber()), los);
- los.checkFormat(firstPage);
- }
-
- public Collection getLogicalStreams() {
- return logicalStreams.values();
- }
-
- public boolean isOpen() {
- return !closed;
- }
-
- public void close() throws IOException {
- closed=true;
- sourceStream.close();
- }
-
- public int getContentLength() {
- return contentLength;
- }
-
- public int getPosition() {
- return position;
- }
-
- int pageNumber=2;
-
- public OggPage getOggPage(int index) throws IOException {
- if(firstPage!=null) {
- OggPage tmp=firstPage;
- firstPage=null;
- return tmp;
- }
- else {
- OggPage page=OggPage.create(sourceStream);
- position+=page.getTotalLength();
- return page;
- }
- }
-
- private LogicalOggStream getLogicalStream(int serialNumber) {
- return (LogicalOggStream)logicalStreams.get(new Integer(serialNumber));
- }
-
- public void setTime(long granulePosition) throws IOException {
- throw new UnsupportedOperationException("Method not supported by this class");
- }
-
- /**
- * @return always false
- */
-
- public boolean isSeekable() {
- return false;
- }
-
-}
\ No newline at end of file
diff --git a/songdbj/de/jarnbjo/ogg/PhysicalOggStream.java b/songdbj/de/jarnbjo/ogg/PhysicalOggStream.java
deleted file mode 100644
index 5f342a38b7..0000000000
--- a/songdbj/de/jarnbjo/ogg/PhysicalOggStream.java
+++ /dev/null
@@ -1,124 +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:22 jarnbjo
- * no message
- *
- * Revision 1.2 2003/03/31 00:23:04 jarnbjo
- * no message
- *
- * Revision 1.1 2003/03/03 21:02:20 jarnbjo
- * no message
- *
- */
-
-package de.jarnbjo.ogg;
-
-import java.io.IOException;
-import java.util.Collection;
-
-/**
- * Interface providing access to a physical Ogg stream. Typically this is
- * a file.
- */
-
-public interface PhysicalOggStream {
-
- /**
- * Returns a collection of objects implementing LogicalOggStream
- * for accessing the separate logical streams within this physical Ogg stream.
- *
- * @return a collection of objects implementing LogicalOggStream
- * which are representing the logical streams contained within this
- * physical stream
- *
- * @see LogicalOggStream
- */
-
- public Collection getLogicalStreams();
-
- /**
- * Return the Ogg page with the absolute index index
,
- * independent from the logical structure of this stream or if the
- * index parameter is -1, the next Ogg page is returned.
- * This method should only be used by implementations of LogicalOggStream
- * to access the raw pages.
- *
- * @param index the absolute index starting from 0 at the beginning of
- * the file or stream or -1 to get the next page in a non-seekable
- * stream
- *
- * @return the Ogg page with the physical absolute index index
- *
- * @throws OggFormatException if the ogg stream is corrupted
- * @throws IOException if some other IO error occurs
- */
-
- public OggPage getOggPage(int index) throws OggFormatException, IOException;
-
- /**
- * Checks if this stream is open for reading.
- *
- * @return true
if this stream is open for reading,
- * false
otherwise
- */
-
- public boolean isOpen();
-
- /**
- * Closes this stream. After invoking this method, no further access
- * to the streams data is possible.
- *
- * @throws IOException
- */
-
- public void close() throws IOException;
-
- /**
- * Sets this stream's (and its logical stream's) position to the granule
- * position. The next packet read from any logical stream will be the
- * first packet beginning on the first page with a granule position higher
- * than the argument.
- *
- * At the moment, this method only works correctly for Ogg files with
- * a single logical Vorbis stream, and due to the different interpretations
- * of the granule position, depending on mixed content, this method will
- * never be able to work for mixed streams. Chained and interleaved streams are
- * also not yet supported. Actually, this method is only a hack to support
- * seeking from JMF, but may of course be abused otherwise too :)
- *
- * @param granulePosition
- *
- * @throws OggFormatException if the ogg stream is corrupted
- * @throws IOException if some other IO error occurs
- */
-
- public void setTime(long granulePosition) throws OggFormatException, IOException;
-
- /**
- * @return true
if the stream is seekable, false
- * otherwise
- */
-
- public boolean isSeekable();
-}
\ No newline at end of file
diff --git a/songdbj/de/jarnbjo/ogg/UncachedUrlStream.java b/songdbj/de/jarnbjo/ogg/UncachedUrlStream.java
deleted file mode 100644
index a07f0ac00e..0000000000
--- a/songdbj/de/jarnbjo/ogg/UncachedUrlStream.java
+++ /dev/null
@@ -1,207 +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.1 2003/04/10 19:48:22 jarnbjo
- * no message
- *
- */
-
-package de.jarnbjo.ogg;
-
-import java.io.*;
-import java.net.*;
-import java.util.*;
-
-/**
- * Implementation of the PhysicalOggStream
interface for reading
- * an Ogg stream from a URL. This class performs only the necessary caching
- * to provide continous playback. Seeking within the stream is not supported.
- */
-
-public class UncachedUrlStream implements PhysicalOggStream {
-
- private boolean closed=false;
- private URLConnection source;
- private InputStream sourceStream;
- private Object drainLock=new Object();
- private LinkedList pageCache=new LinkedList();
- private long numberOfSamples=-1;
-
- private HashMap logicalStreams=new HashMap();
-
- private LoaderThread loaderThread;
-
- private static final int PAGECACHE_SIZE = 10;
-
- /** Creates an instance of the PhysicalOggStream
interface
- * suitable for reading an Ogg stream from a URL.
- */
-
- public UncachedUrlStream(URL source) throws OggFormatException, IOException {
-
- this.source=source.openConnection();
- this.sourceStream=this.source.getInputStream();
-
- loaderThread=new LoaderThread(sourceStream, pageCache);
- new Thread(loaderThread).start();
-
- while(!loaderThread.isBosDone() || pageCache.size()PAGECACHE_SIZE) {
- try {
- Thread.sleep(200);
- }
- catch (InterruptedException ex) {
- }
- }
- }
- }
- catch(EndOfOggStreamException e) {
- // ok
- }
- catch(IOException e) {
- e.printStackTrace();
- }
- }
-
- public boolean isBosDone() {
- return bosDone;
- }
- }
-
- /**
- * @return always false
- */
-
- public boolean isSeekable() {
- return false;
- }
-
-}
\ No newline at end of file
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);
- }
- }
-}
diff --git a/songdbj/de/jarnbjo/vorbis/AudioPacket.java b/songdbj/de/jarnbjo/vorbis/AudioPacket.java
deleted file mode 100644
index 90a54073c1..0000000000
--- a/songdbj/de/jarnbjo/vorbis/AudioPacket.java
+++ /dev/null
@@ -1,328 +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.2 2004/09/21 06:39:06 shred
- * Importe reorganisiert, damit Eclipse Ruhe gibt. ;-)
- *
- * Revision 1.1.1.1 2004/04/04 22:09:12 shred
- * First Import
- *
- * Revision 1.2 2003/03/16 01:11:12 jarnbjo
- * no message
- *
- *
- */
-
-package de.jarnbjo.vorbis;
-
-import java.io.IOException;
-
-import de.jarnbjo.util.io.BitInputStream;
-
-class AudioPacket {
-
- private int modeNumber;
- private Mode mode;
- private Mapping mapping;
- private int n; // block size
- private boolean blockFlag, previousWindowFlag, nextWindowFlag;
-
- private int windowCenter, leftWindowStart, leftWindowEnd, leftN, rightWindowStart, rightWindowEnd, rightN;
- private float[] window;
- private float[][] pcm;
- private int[][] pcmInt;
-
- private Floor[] channelFloors;
- private boolean[] noResidues;
-
- private final static float[][] windows=new float[8][];
-
- protected AudioPacket(final VorbisStream vorbis, final BitInputStream source) throws VorbisFormatException, IOException {
-
- final SetupHeader sHeader=vorbis.getSetupHeader();
- final IdentificationHeader iHeader=vorbis.getIdentificationHeader();
- final Mode[] modes=sHeader.getModes();
- final Mapping[] mappings=sHeader.getMappings();
- final Residue[] residues=sHeader.getResidues();
- final int channels=iHeader.getChannels();
-
- if(source.getInt(1)!=0) {
- throw new VorbisFormatException("Packet type mismatch when trying to create an audio packet.");
- }
-
- modeNumber=source.getInt(Util.ilog(modes.length-1));
-
- try {
- mode=modes[modeNumber];
- }
- catch(ArrayIndexOutOfBoundsException e) {
- throw new VorbisFormatException("Reference to invalid mode in audio packet.");
- }
-
- mapping=mappings[mode.getMapping()];
-
- final int[] magnitudes=mapping.getMagnitudes();
- final int[] angles=mapping.getAngles();
-
- blockFlag=mode.getBlockFlag();
-
- final int blockSize0=iHeader.getBlockSize0();
- final int blockSize1=iHeader.getBlockSize1();
-
- n=blockFlag?blockSize1:blockSize0;
-
- if(blockFlag) {
- previousWindowFlag=source.getBit();
- nextWindowFlag=source.getBit();
- }
-
- windowCenter=n/2;
-
- if(blockFlag && !previousWindowFlag) {
- leftWindowStart=n/4-blockSize0/4;
- leftWindowEnd=n/4+blockSize0/4;
- leftN=blockSize0/2;
- }
- else {
- leftWindowStart=0;
- leftWindowEnd=n/2;
- leftN=windowCenter;
- }
-
- if(blockFlag && !nextWindowFlag) {
- rightWindowStart=n*3/4-blockSize0/4;
- rightWindowEnd=n*3/4+blockSize0/4;
- rightN=blockSize0/2;
- }
- else {
- rightWindowStart=windowCenter;
- rightWindowEnd=n;
- rightN=n/2;
- }
-
- window=getComputedWindow();//new double[n];
-
- channelFloors=new Floor[channels];
- noResidues=new boolean[channels];
-
- pcm=new float[channels][n];
- pcmInt=new int[channels][n];
-
- boolean allFloorsEmpty=true;
-
- for(int i=0; i=0; i--) {
- double newA=0, newM=0;
- final float[] magnitudeVector=pcm[magnitudes[i]];
- final float[] angleVector=pcm[angles[i]];
- for(int j=0; j0) {
- //magnitudeVector[j]=m;
- angleVector[j]=m>0?m-a:m+a;
- }
- else {
- magnitudeVector[j]=m>0?m+a:m-a;
- angleVector[j]=m;
- }
- }
- }
-
- for(int i=0; i32767) val=32767;
- if(val<-32768) val=-32768;
- target[j1++]=val;
- }
- }
-
- // use System.arraycopy to copy the middle part (if any)
- // of the window
- if(leftWindowEnd+132767) val=32767;
- if(val<-32768) val=-32768;
- buffer[ix+(i*2)+1]=(byte)(val&0xff);
- buffer[ix+(i*2)]=(byte)((val>>8)&0xff);
- ix+=channels*2;
- }
-
- ix=(leftWindowEnd-leftWindowStart)*channels*2;
- for(int j=leftWindowEnd; j32767) val=32767;
- if(val<-32768) val=-32768;
- buffer[ix+(i*2)+1]=(byte)(val&0xff);
- buffer[ix+(i*2)]=(byte)((val>>8)&0xff);
- ix+=channels*2;
- }
- }
- }
-
- protected float[] getWindow() {
- return window;
- }
-
- protected int getLeftWindowStart() {
- return leftWindowStart;
- }
-
- protected int getLeftWindowEnd() {
- return leftWindowEnd;
- }
-
- protected int getRightWindowStart() {
- return rightWindowStart;
- }
-
- protected int getRightWindowEnd() {
- return rightWindowEnd;
- }
-
- public int[][] getPcm() {
- return pcmInt;
- }
-
- public float[][] getFreqencyDomain() {
- return pcm;
- }
-}
diff --git a/songdbj/de/jarnbjo/vorbis/CodeBook.java b/songdbj/de/jarnbjo/vorbis/CodeBook.java
deleted file mode 100644
index c865b120ca..0000000000
--- a/songdbj/de/jarnbjo/vorbis/CodeBook.java
+++ /dev/null
@@ -1,275 +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.2 2004/09/21 06:39:06 shred
- * Importe reorganisiert, damit Eclipse Ruhe gibt. ;-)
- *
- * Revision 1.1.1.1 2004/04/04 22:09:12 shred
- * First Import
- *
- * Revision 1.3 2003/04/10 19:49:04 jarnbjo
- * no message
- *
- * Revision 1.2 2003/03/16 01:11:12 jarnbjo
- * no message
- *
- *
- */
-
-package de.jarnbjo.vorbis;
-
-import java.io.IOException;
-import java.util.Arrays;
-
-import de.jarnbjo.util.io.BitInputStream;
-import de.jarnbjo.util.io.HuffmanNode;
-
-class CodeBook {
-
- private HuffmanNode huffmanRoot;
- private int dimensions, entries;
-
- private int[] entryLengths;
- private float[][] valueVector;
-
- protected CodeBook(BitInputStream source) throws VorbisFormatException, IOException {
-
- // check sync
- if(source.getInt(24)!=0x564342) {
- throw new VorbisFormatException("The code book sync pattern is not correct.");
- }
-
- dimensions=source.getInt(16);
- entries=source.getInt(24);
-
- entryLengths=new int[entries];
-
- boolean ordered=source.getBit();
-
- if(ordered) {
- int cl=source.getInt(5)+1;
- for(int i=0; ientryLengths.length) {
- throw new VorbisFormatException("The codebook entry length list is longer than the actual number of entry lengths.");
- }
- Arrays.fill(entryLengths, i, i+num, cl);
- cl++;
- i+=num;
- }
- }
- else {
- // !ordered
- boolean sparse=source.getBit();
-
- if(sparse) {
- for(int i=0; i0) {
- if(!huffmanRoot.setNewValue(el, i)) {
- return false;
- }
- }
- }
- return true;
- }
-
- protected int getDimensions() {
- return dimensions;
- }
-
- protected int getEntries() {
- return entries;
- }
-
- protected HuffmanNode getHuffmanRoot() {
- return huffmanRoot;
- }
-
- //public float[] readVQ(ReadableBitChannel source) throws IOException {
- // return valueVector[readInt(source)];
- //}
-
- protected int readInt(final BitInputStream source) throws IOException {
- return source.getInt(huffmanRoot);
- /*
- HuffmanNode node;
- for(node=huffmanRoot; node.value==null; node=source.getBit()?node.o1:node.o0);
- return node.value.intValue();
- */
- }
-
- protected void readVvAdd(float[][] a, BitInputStream source, int offset, int length)
- throws VorbisFormatException, IOException {
-
- int i,j;//k;//entry;
- int chptr=0;
- int ch=a.length;
-
- if(ch==0) {
- return;
- }
-
- int lim=(offset+length)/ch;
-
- for(i=offset/ch;i8){
- for(i=0;iheader.getCodeBooks().length) {
- throw new VorbisFormatException("A floor0_book_list entry is higher than the code book count.");
- }
- }
- }
-
- protected int getType() {
- return 0;
- }
-
- protected Floor decodeFloor(VorbisStream vorbis, BitInputStream source) throws VorbisFormatException, IOException {
- /** @todo implement */
- throw new UnsupportedOperationException();
- }
-
- protected void computeFloor(float[] vector) {
- /** @todo implement */
- throw new UnsupportedOperationException();
- }
-
-}
\ No newline at end of file
diff --git a/songdbj/de/jarnbjo/vorbis/Floor1.java b/songdbj/de/jarnbjo/vorbis/Floor1.java
deleted file mode 100644
index 69a118b44e..0000000000
--- a/songdbj/de/jarnbjo/vorbis/Floor1.java
+++ /dev/null
@@ -1,324 +0,0 @@
-/*
- * $ProjectName$
- * $ProjectRevision$
- * -----------------------------------------------------------
- * $Id$multip
- * -----------------------------------------------------------
- *
- * $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/03/16 01:11:12 jarnbjo
- * no message
- *
- *
- */
-
-package de.jarnbjo.vorbis;
-
-import java.io.IOException;
-import java.util.*;
-
-import de.jarnbjo.util.io.BitInputStream;
-
-
-class Floor1 extends Floor implements Cloneable {
-
- private int[] partitionClassList;
- private int maximumClass, multiplier, rangeBits;
- private int[] classDimensions;
- private int[] classSubclasses;
- private int[] classMasterbooks;
- private int[][] subclassBooks;
- private int[] xList;
- private int[] yList;
- private int[] lowNeighbours, highNeighbours;
- //private boolean[] step2Flags;
-
- private static final int[] RANGES = {256, 128, 86, 64};
-
- private Floor1() {
- }
-
- protected Floor1(BitInputStream source, SetupHeader header) throws VorbisFormatException, IOException {
-
- maximumClass=-1;
- int partitions=source.getInt(5);
- partitionClassList=new int[partitions];
-
- for(int i=0; imaximumClass) {
- maximumClass=partitionClassList[i];
- }
- }
-
-
- classDimensions=new int[maximumClass+1];
- classSubclasses=new int[maximumClass+1];
- classMasterbooks=new int[maximumClass+1];
- subclassBooks=new int[maximumClass+1][];
-
- int xListLength=2;
-
- for(int i=0; i<=maximumClass; i++) {
- classDimensions[i]=source.getInt(3)+1;
- xListLength+=classDimensions[i];
- classSubclasses[i]=source.getInt(2);
-
- if(classDimensions[i] > header.getCodeBooks().length ||
- classSubclasses[i] > header.getCodeBooks().length) {
- throw new VorbisFormatException("There is a class dimension or class subclasses entry higher than the number of codebooks in the setup header.");
- }
- if(classSubclasses[i]!=0) {
- classMasterbooks[i]=source.getInt(8);
- }
- subclassBooks[i]=new int[1<0) {
- cval=source.getInt(vorbis.getSetupHeader().getCodeBooks()[classMasterbooks[cls]].getHuffmanRoot());
- //cval=vorbis.getSetupHeader().getCodeBooks()[classMasterbooks[cls]].readInt(source);
- //System.out.println("cval: "+cval);
- }
- //System.out.println("0: "+cls+" "+cdim+" "+cbits+" "+csub+" "+cval);
- for(int j=0; j>>=cbits;
- if(book>=0) {
- clone.yList[j+offset]=source.getInt(vorbis.getSetupHeader().getCodeBooks()[book].getHuffmanRoot());
- //clone.yList[j+offset]=vorbis.getSetupHeader().getCodeBooks()[book].readInt(source);
- //System.out.println("b: "+(j+offset)+" "+book+" "+clone.yList[j+offset]);
- //System.out.println("");
- }
- else {
- clone.yList[j+offset]=0;
- }
- }
- offset+=cdim;
- }
-
- //System.out.println("");
- //for(int i=0; i=room) {
- yList[i]=highRoom>lowRoom?
- val-lowRoom+predicted:
- -val+highRoom+predicted-1;
- }
- else {
- yList[i]=(val&1)==1?
- predicted-((val+1)>>1):
- predicted+(val>>1);
- }
- }
- else {
- step2Flags[i]=false;
- yList[i]=predicted;
- }
- }
-
- final int[] xList2=new int[values];
-
- System.arraycopy(xList, 0, xList2, 0, values);
- sort(xList2, yList, step2Flags);
-
- int hx=0, hy=0, lx=0, ly=yList[0]*multiplier;
-
- float[] vector2=new float[vector.length];
- float[] vector3=new float[vector.length];
- Arrays.fill(vector2, 1.0f);
- System.arraycopy(vector, 0, vector3, 0, vector.length);
-
- for(int i=1; ioff && x[j-1]>x[j]; j--) {
- itmp=x[j];
- x[j]=x[j-1];
- x[j-1]=itmp;
- itmp=y[j];
- y[j]=y[j-1];
- y[j-1]=itmp;
- btmp=b[j];
- b[j]=b[j-1];
- b[j-1]=btmp;
- //swap(x, j, j-1);
- //swap(y, j, j-1);
- //swap(b, j, j-1);
- }
- }
- }
-
- private final static void swap(int x[], int a, int b) {
- int t = x[a];
- x[a] = x[b];
- x[b] = t;
- }
-
- private final static void swap(boolean x[], int a, int b) {
- boolean t = x[a];
- x[a] = x[b];
- x[b] = t;
- }
-}
\ No newline at end of file
diff --git a/songdbj/de/jarnbjo/vorbis/IdentificationHeader.java b/songdbj/de/jarnbjo/vorbis/IdentificationHeader.java
deleted file mode 100644
index 1e18163385..0000000000
--- a/songdbj/de/jarnbjo/vorbis/IdentificationHeader.java
+++ /dev/null
@@ -1,120 +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.2 2004/09/21 06:39:06 shred
- * Importe reorganisiert, damit Eclipse Ruhe gibt. ;-)
- *
- * Revision 1.1.1.1 2004/04/04 22:09:12 shred
- * First Import
- *
- * Revision 1.3 2003/03/31 00:20:16 jarnbjo
- * no message
- *
- * Revision 1.2 2003/03/16 01:11:12 jarnbjo
- * no message
- *
- *
- */
-
-package de.jarnbjo.vorbis;
-
-import java.io.IOException;
-
-import de.jarnbjo.util.io.BitInputStream;
-
-/**
- */
-
-public class IdentificationHeader {
-
- private int version, channels, sampleRate, bitrateMaximum, bitrateNominal, bitrateMinimum, blockSize0, blockSize1;
- private boolean framingFlag;
- private MdctFloat[] mdct=new MdctFloat[2];
- //private MdctLong[] mdctInt=new MdctLong[2];
-
- private static final long HEADER = 0x736962726f76L; // 'vorbis'
-
- public IdentificationHeader(BitInputStream source) throws VorbisFormatException, IOException {
- //equalizer=new Equalizer();
- //equalizer.pack();
- //equalizer.show();
-
- long leading=source.getLong(48);
- if(leading!=HEADER) {
- throw new VorbisFormatException("The identification header has an illegal leading.");
- }
- version=source.getInt(32);
- channels=source.getInt(8);
- sampleRate=source.getInt(32);
- bitrateMaximum=source.getInt(32);
- bitrateNominal=source.getInt(32);
- bitrateMinimum=source.getInt(32);
- int bs=source.getInt(8);
- blockSize0=1<<(bs&0xf);
- blockSize1=1<<(bs>>4);
-
- mdct[0]=new MdctFloat(blockSize0);
- mdct[1]=new MdctFloat(blockSize1);
- //mdctInt[0]=new MdctLong(blockSize0);
- //mdctInt[1]=new MdctLong(blockSize1);
-
- framingFlag=source.getInt(8)!=0;
- }
-
- public int getSampleRate() {
- return sampleRate;
- }
-
- public int getMaximumBitrate() {
- return bitrateMaximum;
- }
-
- public int getNominalBitrate() {
- return bitrateNominal;
- }
-
- public int getMinimumBitrate() {
- return bitrateMinimum;
- }
-
- public int getChannels() {
- return channels;
- }
-
- public int getBlockSize0() {
- return blockSize0;
- }
-
- public int getBlockSize1() {
- return blockSize1;
- }
-
- protected MdctFloat getMdct0() {
- return mdct[0];
- }
-
- protected MdctFloat getMdct1() {
- return mdct[1];
- }
-
- public int getVersion() {
- return version;
- }
-}
\ No newline at end of file
diff --git a/songdbj/de/jarnbjo/vorbis/Mapping.java b/songdbj/de/jarnbjo/vorbis/Mapping.java
deleted file mode 100644
index 24a2eaa19a..0000000000
--- a/songdbj/de/jarnbjo/vorbis/Mapping.java
+++ /dev/null
@@ -1,59 +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/03/16 01:11:12 jarnbjo
- * no message
- *
- *
- */
-
-package de.jarnbjo.vorbis;
-
-import java.io.IOException;
-
-import de.jarnbjo.util.io.BitInputStream;
-
-abstract class Mapping {
-
- protected static Mapping createInstance(VorbisStream vorbis, BitInputStream source, SetupHeader header) throws VorbisFormatException, IOException {
-
- int type=source.getInt(16);
- switch(type) {
- case 0:
- //System.out.println("mapping type 0");
- return new Mapping0(vorbis, source, header);
- default:
- throw new VorbisFormatException("Mapping type "+type+" is not supported.");
- }
- }
-
- protected abstract int getType();
- protected abstract int[] getAngles();
- protected abstract int[] getMagnitudes() ;
- protected abstract int[] getMux();
- protected abstract int[] getSubmapFloors();
- protected abstract int[] getSubmapResidues();
- protected abstract int getCouplingSteps();
- protected abstract int getSubmaps();
-
-}
\ No newline at end of file
diff --git a/songdbj/de/jarnbjo/vorbis/Mapping0.java b/songdbj/de/jarnbjo/vorbis/Mapping0.java
deleted file mode 100644
index e8fde4686f..0000000000
--- a/songdbj/de/jarnbjo/vorbis/Mapping0.java
+++ /dev/null
@@ -1,146 +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/03/16 01:11:12 jarnbjo
- * no message
- *
- *
- */
-
-package de.jarnbjo.vorbis;
-
-import java.io.IOException;
-
-import de.jarnbjo.util.io.BitInputStream;
-
-class Mapping0 extends Mapping {
-
- private int[] magnitudes, angles, mux, submapFloors, submapResidues;
-
- protected Mapping0(VorbisStream vorbis, BitInputStream source, SetupHeader header) throws VorbisFormatException, IOException {
-
- int submaps=1;
-
- if(source.getBit()) {
- submaps=source.getInt(4)+1;
- }
-
- //System.out.println("submaps: "+submaps);
-
- int channels=vorbis.getIdentificationHeader().getChannels();
- int ilogChannels=Util.ilog(channels-1);
-
- //System.out.println("ilogChannels: "+ilogChannels);
-
- if(source.getBit()) {
- int couplingSteps=source.getInt(8)+1;
- magnitudes=new int[couplingSteps];
- angles=new int[couplingSteps];
-
- for(int i=0; i=channels || angles[i]>=channels) {
- System.err.println(magnitudes[i]);
- System.err.println(angles[i]);
- throw new VorbisFormatException("The channel magnitude and/or angle mismatch.");
- }
- }
- }
- else {
- magnitudes=new int[0];
- angles=new int[0];
- }
-
- if(source.getInt(2)!=0) {
- throw new VorbisFormatException("A reserved mapping field has an invalid value.");
- }
-
- mux=new int[channels];
- if(submaps>1) {
- for(int i=0; isubmaps) {
- throw new VorbisFormatException("A mapping mux value is higher than the number of submaps");
- }
- }
- }
- else {
- for(int i=0; ifloorCount) {
- throw new VorbisFormatException("A mapping floor value is higher than the number of floors.");
- }
-
- if(submapResidues[i]>residueCount) {
- throw new VorbisFormatException("A mapping residue value is higher than the number of residues.");
- }
- }
- }
-
- protected int getType() {
- return 0;
- }
-
- protected int[] getAngles() {
- return angles;
- }
-
- protected int[] getMagnitudes() {
- return magnitudes;
- }
-
- protected int[] getMux() {
- return mux;
- }
-
- protected int[] getSubmapFloors() {
- return submapFloors;
- }
-
- protected int[] getSubmapResidues() {
- return submapResidues;
- }
-
- protected int getCouplingSteps() {
- return angles.length;
- }
-
- protected int getSubmaps() {
- return submapFloors.length;
- }
-}
\ No newline at end of file
diff --git a/songdbj/de/jarnbjo/vorbis/MdctFloat.java b/songdbj/de/jarnbjo/vorbis/MdctFloat.java
deleted file mode 100644
index 4f354b259b..0000000000
--- a/songdbj/de/jarnbjo/vorbis/MdctFloat.java
+++ /dev/null
@@ -1,321 +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.2 2004/09/21 12:09:45 shred
- * *** empty log message ***
- *
- * Revision 1.1.1.1 2004/04/04 22:09:12 shred
- * First Import
- *
- * Revision 1.3 2003/04/10 19:49:04 jarnbjo
- * no message
- *
- * Revision 1.2 2003/03/16 01:11:12 jarnbjo
- * no message
- *
- *
- */
-
-package de.jarnbjo.vorbis;
-
-class MdctFloat {
- static private final float cPI3_8=0.38268343236508977175f;
- static private final float cPI2_8=0.70710678118654752441f;
- static private final float cPI1_8=0.92387953251128675613f;
-
- private int n;
- private int log2n;
-
- private float[] trig;
- private int[] bitrev;
-
- private float[] equalizer;
-
- private float scale;
-
- private int itmp1, itmp2, itmp3, itmp4, itmp5, itmp6, itmp7, itmp8, itmp9;
- private float dtmp1, dtmp2, dtmp3, dtmp4, dtmp5, dtmp6, dtmp7, dtmp8, dtmp9;
-
- protected MdctFloat(int n) {
- bitrev=new int[n/4];
- trig=new float[n+n/4];
-
- int n2=n>>>1;
- log2n=(int)Math.rint(Math.log(n)/Math.log(2));
- this.n=n;
-
- int AE=0;
- int AO=1;
- int BE=AE+n/2;
- int BO=BE+1;
- int CE=BE+n/2;
- int CO=CE+1;
- // trig lookups...
- for(int i=0;i>>j!=0;j++)
- if(((msb>>>j)&i)!=0)acc|=1<>1;
- int n4=n>>2;
- int n8=n>>3;
-
- if(equalizer!=null) {
- for(int i=0; i32767.0f) temp1=32767.0f;
- //if(temp1<-32768.0f) temp1=-32768.0f;
- //if(temp2>32767.0f) temp2=32767.0f;
- //if(temp2<-32768.0f) temp2=-32768.0f;
-
- pcm[o1]=(int)(-temp1*window[o1]);
- pcm[o2]=(int)( temp1*window[o2]);
- pcm[o3]=(int)( temp2*window[o3]);
- pcm[o4]=(int)( temp2*window[o4]);
-
- o1++;
- o2--;
- o3++;
- o4--;
- //xx+=2;
- //B+=2;
- }
- }
- }
-
- private float[] kernel(float[] x, float[] w,
- int n, int n2, int n4, int n8){
- // step 2
-
- int xA=n4;
- int xB=0;
- int w2=n4;
- int A=n2;
-
- for(int i=0;i>>(i+2);
- int k1=1<<(i+3);
- int wbase=n2-2;
-
- A=0;
- float[] temp;
-
- for(int r=0;r<(k0>>>2);r++){
- int w1=wbase;
- w2=w1-(k0>>1);
- float AEv= trig[A],wA;
- float AOv= trig[A+1],wB;
- wbase-=2;
-
- k0++;
- for(int s=0;s<(2<header.getMappings().length) {
- throw new VorbisFormatException("Mode mapping number is higher than total number of mappings.");
- }
- }
-
- protected boolean getBlockFlag() {
- return blockFlag;
- }
-
- protected int getWindowType() {
- return windowType;
- }
-
- protected int getTransformType() {
- return transformType;
- }
-
- protected int getMapping() {
- return mapping;
- }
-}
\ No newline at end of file
diff --git a/songdbj/de/jarnbjo/vorbis/Residue.java b/songdbj/de/jarnbjo/vorbis/Residue.java
deleted file mode 100644
index 78c28fa5ed..0000000000
--- a/songdbj/de/jarnbjo/vorbis/Residue.java
+++ /dev/null
@@ -1,260 +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/04 08:33:02 jarnbjo
- * no message
- *
- * Revision 1.2 2003/03/16 01:11:12 jarnbjo
- * no message
- *
- *
- */
-
-package de.jarnbjo.vorbis;
-
-import java.io.IOException;
-import java.util.HashMap;
-
-import de.jarnbjo.util.io.*;
-
-
-abstract class Residue {
-
- protected int begin, end;
- protected int partitionSize; // grouping
- protected int classifications; // partitions
- protected int classBook; // groupbook
- protected int[] cascade; // secondstages
- protected int[][] books;
- protected HashMap looks=new HashMap();
-
- protected Residue() {
- }
-
- protected Residue(BitInputStream source, SetupHeader header) throws VorbisFormatException, IOException {
- begin=source.getInt(24);
- end=source.getInt(24);
- partitionSize=source.getInt(24)+1;
- classifications=source.getInt(6)+1;
- classBook=source.getInt(8);
-
- cascade=new int[classifications];
-
- int acc=0;
-
- for(int i=0; iheader.getCodeBooks().length) {
- throw new VorbisFormatException("Reference to invalid codebook entry in residue header.");
- }
- }
- }
- }
- }
-
-
- protected static Residue createInstance(BitInputStream source, SetupHeader header) throws VorbisFormatException, IOException {
-
- int type=source.getInt(16);
- switch(type) {
- case 0:
- //System.out.println("residue type 0");
- return new Residue0(source, header);
- case 1:
- //System.out.println("residue type 1");
- return new Residue2(source, header);
- case 2:
- //System.out.println("residue type 2");
- return new Residue2(source, header);
- default:
- throw new VorbisFormatException("Residue type "+type+" is not supported.");
- }
- }
-
- protected abstract int getType();
- protected abstract void decodeResidue(VorbisStream vorbis, BitInputStream source, Mode mode, int ch, boolean[] doNotDecodeFlags, float[][] vectors) throws VorbisFormatException, IOException;
- //public abstract double[][] getDecodedVectors();
-
- protected int getBegin() {
- return begin;
- }
-
- protected int getEnd() {
- return end;
- }
-
- protected int getPartitionSize() {
- return partitionSize;
- }
-
- protected int getClassifications() {
- return classifications;
- }
-
- protected int getClassBook() {
- return classBook;
- }
-
- protected int[] getCascade() {
- return cascade;
- }
-
- protected int[][] getBooks() {
- return books;
- }
-
- protected final void fill(Residue clone) {
- clone.begin=begin;
- clone.books=books;
- clone.cascade=cascade;
- clone.classBook=classBook;
- clone.classifications=classifications;
- clone.end=end;
- clone.partitionSize=partitionSize;
- }
-
- protected Look getLook(VorbisStream source, Mode key) {
- //return new Look(source, key);
- Look look=(Look)looks.get(key);
- if(look==null) {
- look=new Look(source, key);
- looks.put(key, look);
- }
- return look;
- }
-
-
- class Look {
- int map;
- int parts;
- int stages;
- CodeBook[] fullbooks;
- CodeBook phrasebook;
- int[][] partbooks;
- int partvals;
- int[][] decodemap;
- int postbits;
- int phrasebits;
- int frames;
-
- protected Look (VorbisStream source, Mode mode) {
- int dim=0, acc=0, maxstage=0;
-
- map=mode.getMapping();
- parts=Residue.this.getClassifications();
- fullbooks=source.getSetupHeader().getCodeBooks();
- phrasebook=fullbooks[Residue.this.getClassBook()];
- dim=phrasebook.getDimensions();
-
- partbooks=new int[parts][];
-
- for(int j=0;jmaxstage) {
- maxstage=stages;
- }
- partbooks[j]=new int[stages];
- for(int k=0; k0; x>>=1, res++);
- return res;
- }
-
- public static final float float32unpack(int x) {
- float mantissa=x&0x1fffff;
- float e=(x&0x7fe00000)>>21;
- if((x&0x80000000)!=0) {
- mantissa=-mantissa;
- }
- return mantissa*(float)Math.pow(2.0, e-788.0);
- }
-
- public static final int lookup1Values(int a, int b) {
- int res=(int)Math.pow(Math.E, Math.log(a)/b);
- return intPow(res+1, b)<=a?res+1:res;
- }
-
- public static final int intPow(int base, int e) {
- int res=1;
- for(; e>0; e--, res*=base);
- return res;
- }
-
- public static final boolean isBitSet(int value, int bit) {
- return (value&(1<0) {
- res+=value&1;
- value>>=1;
- }
- return res;
- }
-
- public static final int lowNeighbour(int[] v, int x) {
- int max=-1, n=0;
- for(int i=0; imax && v[i]v[x]) {
- min=v[i];
- n=i;
- }
- }
- return n;
- }
-
- public static final int renderPoint(int x0, int x1, int y0, int y1, int x) {
- int dy=y1-y0;
- int ady=dy<0?-dy:dy;
- int off=(ady*(x-x0))/(x1-x0);
- return dy<0?y0-off:y0+off;
- }
-
- public static final void renderLine(final int x0, final int y0, final int x1, final int y1, final float[] v) {
- final int dy=y1-y0;
- final int adx=x1-x0;
- final int base=dy/adx;
- final int sy=dy<0?base-1:base+1;
- int x=x0;
- int y=y0;
- int err=0;
- final int ady=(dy<0?-dy:dy)-(base>0?base*adx:-base*adx);
-
- v[x]*=Floor.DB_STATIC_TABLE[y];
- for(x=x0+1; x=adx) {
- err-=adx;
- v[x]*=Floor.DB_STATIC_TABLE[y+=sy];
- }
- else {
- v[x]*=Floor.DB_STATIC_TABLE[y+=base];
- }
- }
- }
-}
\ No newline at end of file
diff --git a/songdbj/de/jarnbjo/vorbis/VorbisAudioFileReader.java b/songdbj/de/jarnbjo/vorbis/VorbisAudioFileReader.java
deleted file mode 100644
index b1bc999947..0000000000
--- a/songdbj/de/jarnbjo/vorbis/VorbisAudioFileReader.java
+++ /dev/null
@@ -1,217 +0,0 @@
-package de.jarnbjo.vorbis;
-
-/*
- * $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.2 2004/09/21 06:39:06 shred
- * Importe reorganisiert, damit Eclipse Ruhe gibt. ;-)
- *
- * Revision 1.1.1.1 2004/04/04 22:09:12 shred
- * First Import
- *
- *
- */
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.RandomAccessFile;
-import java.net.URL;
-import java.util.Collection;
-
-import javax.sound.sampled.AudioFileFormat;
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.UnsupportedAudioFileException;
-import javax.sound.sampled.spi.AudioFileReader;
-
-import de.jarnbjo.ogg.BasicStream;
-import de.jarnbjo.ogg.EndOfOggStreamException;
-import de.jarnbjo.ogg.FileStream;
-import de.jarnbjo.ogg.LogicalOggStream;
-import de.jarnbjo.ogg.OggFormatException;
-import de.jarnbjo.ogg.PhysicalOggStream;
-import de.jarnbjo.ogg.UncachedUrlStream;
-
-public class VorbisAudioFileReader extends AudioFileReader {
-
- public VorbisAudioFileReader() {
- }
-
- public AudioFileFormat getAudioFileFormat(File file) throws IOException, UnsupportedAudioFileException {
- try {
- return getAudioFileFormat(new FileStream(new RandomAccessFile(file, "r")));
- }
- catch(OggFormatException e) {
- throw new UnsupportedAudioFileException(e.getMessage());
- }
- }
-
- public AudioFileFormat getAudioFileFormat(InputStream stream) throws IOException, UnsupportedAudioFileException {
- try {
- return getAudioFileFormat(new BasicStream(stream));
- }
- catch(OggFormatException e) {
- throw new UnsupportedAudioFileException(e.getMessage());
- }
- }
-
- public AudioFileFormat getAudioFileFormat(URL url) throws IOException, UnsupportedAudioFileException {
- try {
- return getAudioFileFormat(new UncachedUrlStream(url));
- }
- catch(OggFormatException e) {
- throw new UnsupportedAudioFileException(e.getMessage());
- }
- }
-
- private AudioFileFormat getAudioFileFormat(PhysicalOggStream oggStream) throws IOException, UnsupportedAudioFileException {
- try {
- Collection streams=oggStream.getLogicalStreams();
- if(streams.size()!=1) {
- throw new UnsupportedAudioFileException("Only Ogg files with one logical Vorbis stream are supported.");
- }
-
- LogicalOggStream los=(LogicalOggStream)streams.iterator().next();
- if(los.getFormat()!=LogicalOggStream.FORMAT_VORBIS) {
- throw new UnsupportedAudioFileException("Only Ogg files with one logical Vorbis stream are supported.");
- }
-
- VorbisStream vs=new VorbisStream(los);
-
- AudioFormat audioFormat=new AudioFormat(
- (float)vs.getIdentificationHeader().getSampleRate(),
- 16,
- vs.getIdentificationHeader().getChannels(),
- true, true);
-
- return new AudioFileFormat(VorbisFormatType.getInstance(), audioFormat, AudioSystem.NOT_SPECIFIED);
- }
- catch(OggFormatException e) {
- throw new UnsupportedAudioFileException(e.getMessage());
- }
- catch(VorbisFormatException e) {
- throw new UnsupportedAudioFileException(e.getMessage());
- }
- }
-
-
-
- public AudioInputStream getAudioInputStream(File file) throws IOException, UnsupportedAudioFileException {
- try {
- return getAudioInputStream(new FileStream(new RandomAccessFile(file, "r")));
- }
- catch(OggFormatException e) {
- throw new UnsupportedAudioFileException(e.getMessage());
- }
- }
-
- public AudioInputStream getAudioInputStream(InputStream stream) throws IOException, UnsupportedAudioFileException {
- try {
- return getAudioInputStream(new BasicStream(stream));
- }
- catch(OggFormatException e) {
- throw new UnsupportedAudioFileException(e.getMessage());
- }
- }
-
- public AudioInputStream getAudioInputStream(URL url) throws IOException, UnsupportedAudioFileException {
- try {
- return getAudioInputStream(new UncachedUrlStream(url));
- }
- catch(OggFormatException e) {
- throw new UnsupportedAudioFileException(e.getMessage());
- }
- }
-
- private AudioInputStream getAudioInputStream(PhysicalOggStream oggStream) throws IOException, UnsupportedAudioFileException {
- try {
- Collection streams=oggStream.getLogicalStreams();
- if(streams.size()!=1) {
- throw new UnsupportedAudioFileException("Only Ogg files with one logical Vorbis stream are supported.");
- }
-
- LogicalOggStream los=(LogicalOggStream)streams.iterator().next();
- if(los.getFormat()!=LogicalOggStream.FORMAT_VORBIS) {
- throw new UnsupportedAudioFileException("Only Ogg files with one logical Vorbis stream are supported.");
- }
-
- VorbisStream vs=new VorbisStream(los);
-
- AudioFormat audioFormat=new AudioFormat(
- (float)vs.getIdentificationHeader().getSampleRate(),
- 16,
- vs.getIdentificationHeader().getChannels(),
- true, true);
-
- return new AudioInputStream(new VorbisInputStream(vs), audioFormat, -1);
- }
- catch(OggFormatException e) {
- throw new UnsupportedAudioFileException(e.getMessage());
- }
- catch(VorbisFormatException e) {
- throw new UnsupportedAudioFileException(e.getMessage());
- }
- }
-
-
- public static class VorbisFormatType extends AudioFileFormat.Type {
-
- private static final VorbisFormatType instance=new VorbisFormatType();
-
- private VorbisFormatType() {
- super("VORBIS", "ogg");
- }
-
- public static AudioFileFormat.Type getInstance() {
- return instance;
- }
- }
-
- public static class VorbisInputStream extends InputStream {
-
- private VorbisStream source;
- private byte[] buffer=new byte[8192];
-
- public VorbisInputStream(VorbisStream source) {
- this.source=source;
- }
-
- public int read() throws IOException {
- return 0;
- }
-
- public int read(byte[] buffer) throws IOException {
- return read(buffer, 0, buffer.length);
- }
-
- public int read(byte[] buffer, int offset, int length) throws IOException {
- try {
- return source.readPcm(buffer, offset, length);
- }
- catch(EndOfOggStreamException e) {
- return -1;
- }
- }
- }
-
-
-}
\ No newline at end of file
diff --git a/songdbj/de/jarnbjo/vorbis/VorbisFormatException.java b/songdbj/de/jarnbjo/vorbis/VorbisFormatException.java
deleted file mode 100644
index 5214298378..0000000000
--- a/songdbj/de/jarnbjo/vorbis/VorbisFormatException.java
+++ /dev/null
@@ -1,51 +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.2 2005/02/09 23:10:47 shred
- * Serial UID für jarnbjo
- *
- * Revision 1.1.1.1 2004/04/04 22:09:12 shred
- * First Import
- *
- * Revision 1.2 2003/03/16 01:11:12 jarnbjo
- * no message
- *
- *
- */
-
-package de.jarnbjo.vorbis;
-
-import java.io.IOException;
-
-/**
- * Exception thrown when trying to read a corrupted Vorbis stream.
- */
-
-public class VorbisFormatException extends IOException {
- private static final long serialVersionUID = 3616453405694834743L;
-
- public VorbisFormatException() {
- super();
- }
-
- public VorbisFormatException(String message) {
- super(message);
- }
-}
\ No newline at end of file
diff --git a/songdbj/de/jarnbjo/vorbis/VorbisStream.java b/songdbj/de/jarnbjo/vorbis/VorbisStream.java
deleted file mode 100644
index 36659c7106..0000000000
--- a/songdbj/de/jarnbjo/vorbis/VorbisStream.java
+++ /dev/null
@@ -1,247 +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.4 2003/04/10 19:49:04 jarnbjo
- * no message
- *
- * Revision 1.3 2003/03/31 00:20:16 jarnbjo
- * no message
- *
- * Revision 1.2 2003/03/16 01:11:12 jarnbjo
- * no message
- *
- *
- */
-
-package de.jarnbjo.vorbis;
-
-import java.io.*;
-import java.util.*;
-
-import de.jarnbjo.ogg.*;
-import de.jarnbjo.util.io.*;
-
-/**
- */
-
-public class VorbisStream {
-
- private LogicalOggStream oggStream;
- private IdentificationHeader identificationHeader;
- private CommentHeader commentHeader;
- private SetupHeader setupHeader;
-
- private AudioPacket lastAudioPacket, nextAudioPacket;
- private LinkedList audioPackets=new LinkedList();
- private byte[] currentPcm;
- private int currentPcmIndex;
- private int currentPcmLimit;
-
- private static final int IDENTIFICATION_HEADER = 1;
- private static final int COMMENT_HEADER = 3;
- private static final int SETUP_HEADER = 5;
-
- private int bitIndex=0;
- private byte lastByte=(byte)0;
- private boolean initialized=false;
-
- private Object streamLock=new Object();
- private int pageCounter=0;
-
- private int currentBitRate=0;
-
- private long currentGranulePosition;
-
- public static final int BIG_ENDIAN = 0;
- public static final int LITTLE_ENDIAN = 1;
-
- public VorbisStream() {
- }
-
- public VorbisStream(LogicalOggStream oggStream) throws VorbisFormatException, IOException {
- this.oggStream=oggStream;
-
- for(int i=0; i<3; i++) {
- BitInputStream source=new ByteArrayBitInputStream(oggStream.getNextOggPacket());
- int headerType=source.getInt(8);
- switch(headerType) {
- case IDENTIFICATION_HEADER:
- identificationHeader=new IdentificationHeader(source);
- break;
- case COMMENT_HEADER:
- commentHeader=new CommentHeader(source);
- break;
- case SETUP_HEADER:
- setupHeader=new SetupHeader(this, source);
- break;
- }
- }
-
- if(identificationHeader==null) {
- throw new VorbisFormatException("The file has no identification header.");
- }
-
- if(commentHeader==null) {
- throw new VorbisFormatException("The file has no commentHeader.");
- }
-
- if(setupHeader==null) {
- throw new VorbisFormatException("The file has no setup header.");
- }
-
- //currentPcm=new int[identificationHeader.getChannels()][16384];
- currentPcm=new byte[identificationHeader.getChannels()*identificationHeader.getBlockSize1()*2];
- //new BufferThread().start();
- }
-
- public IdentificationHeader getIdentificationHeader() {
- return identificationHeader;
- }
-
- public CommentHeader getCommentHeader() {
- return commentHeader;
- }
-
- protected SetupHeader getSetupHeader() {
- return setupHeader;
- }
-
- public boolean isOpen() {
- return oggStream.isOpen();
- }
-
- public void close() throws IOException {
- oggStream.close();
- }
-
-
- public int readPcm(byte[] buffer, int offset, int length) throws IOException {
- synchronized (streamLock) {
- final int channels=identificationHeader.getChannels();
-
- if(lastAudioPacket==null) {
- lastAudioPacket=getNextAudioPacket();
- }
- if(currentPcm==null || currentPcmIndex>=currentPcmLimit) {
- AudioPacket ap=getNextAudioPacket();
- try {
- ap.getPcm(lastAudioPacket, currentPcm);
- currentPcmLimit=ap.getNumberOfSamples()*identificationHeader.getChannels()*2;
- }
- catch(ArrayIndexOutOfBoundsException e) {
- return 0;
- }
- currentPcmIndex=0;
- lastAudioPacket=ap;
- }
- int written=0;
- int i=0;
- int arrIx=0;
- for(i=currentPcmIndex; i