From 9fee0ec4ca0c5b7a334cc29dbb58e76c7a4c736e Mon Sep 17 00:00:00 2001 From: Michiel Van Der Kolk Date: Mon, 11 Jul 2005 15:42:37 +0000 Subject: Songdb java version, source. only 1.5 compatible git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7101 a1c6a512-1295-4272-9138-f99709370657 --- .../file/vorbis/VorbisAudioFileReader.java | 302 +++++++++++++++++++++ .../file/vorbis/VorbisAudioFileWriter.java | 75 +++++ songdbj/org/tritonus/file/vorbis/package.html | 12 + 3 files changed, 389 insertions(+) create mode 100644 songdbj/org/tritonus/file/vorbis/VorbisAudioFileReader.java create mode 100644 songdbj/org/tritonus/file/vorbis/VorbisAudioFileWriter.java create mode 100644 songdbj/org/tritonus/file/vorbis/package.html (limited to 'songdbj/org/tritonus/file/vorbis') diff --git a/songdbj/org/tritonus/file/vorbis/VorbisAudioFileReader.java b/songdbj/org/tritonus/file/vorbis/VorbisAudioFileReader.java new file mode 100644 index 0000000000..f8b34d5411 --- /dev/null +++ b/songdbj/org/tritonus/file/vorbis/VorbisAudioFileReader.java @@ -0,0 +1,302 @@ +/* + * VorbisAudioFileReader.java + * + * This file is part of Tritonus: http://www.tritonus.org/ + */ + +/* + * Copyright (c) 2001 by Matthias Pfisterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/* +|<--- this code is formatted to fit into 80 columns --->| +*/ + +package org.tritonus.sampled.file.vorbis; + +import java.io.InputStream; +import java.io.IOException; + +import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioFileFormat; +import javax.sound.sampled.UnsupportedAudioFileException; + +import org.tritonus.share.TDebug; +import org.tritonus.share.sampled.file.TAudioFileFormat; +import org.tritonus.share.sampled.file.TAudioFileReader; + +import org.tritonus.lowlevel.ogg.Buffer; +import org.tritonus.lowlevel.ogg.Page; +import org.tritonus.lowlevel.ogg.Packet; +import org.tritonus.lowlevel.ogg.SyncState; +import org.tritonus.lowlevel.ogg.StreamState; + + + +/** + * @author Matthias Pfisterer + */ +public class VorbisAudioFileReader +extends TAudioFileReader +{ + private static final int INITAL_READ_LENGTH = 4096; + private static final int MARK_LIMIT = INITAL_READ_LENGTH + 1; + + + + public VorbisAudioFileReader() + { + super(MARK_LIMIT, true); + } + + + + protected AudioFileFormat getAudioFileFormat(InputStream inputStream, + long lFileSizeInBytes) + throws UnsupportedAudioFileException, IOException + { + if (TDebug.TraceAudioFileReader) { TDebug.out(">VorbisAudioFileReader.getAudioFileFormat(): begin"); } + SyncState oggSyncState = new SyncState(); + StreamState oggStreamState = new StreamState(); + Page oggPage = new Page(); + Packet oggPacket = new Packet(); + + int bytes = 0; + + // Decode setup + + oggSyncState.init(); // Now we can read pages + + // grab some data at the head of the stream. We want the first page + // (which is guaranteed to be small and only contain the Vorbis + // stream initial header) We need the first page to get the stream + // serialno. + + // submit a 4k block to libvorbis' Ogg layer + byte[] abBuffer = new byte[INITAL_READ_LENGTH]; + bytes = inputStream.read(abBuffer); + if (TDebug.TraceAudioFileReader) { TDebug.out("read bytes from input stream: " + bytes); } + int nResult = oggSyncState.write(abBuffer, bytes); + if (TDebug.TraceAudioFileReader) { TDebug.out("SyncState.write() returned " + nResult); } + + // Get the first page. + if (oggSyncState.pageOut(oggPage) != 1) + { + // have we simply run out of data? If so, we're done. + if (bytes < INITAL_READ_LENGTH) + { + if (TDebug.TraceAudioFileReader) { TDebug.out("stream ended prematurely"); } + if (TDebug.TraceAudioFileReader) { TDebug.out(">> 4) & 0xF); + if (TDebug.TraceAudioFileReader) { TDebug.out("blocksizes[0]: " + blocksizes[0]); } + if (TDebug.TraceAudioFileReader) { TDebug.out("blocksizes[1]: " + blocksizes[1]); } + + if (fSampleRate < 1.0F || + nChannels < 1 || + blocksizes[0] < 8|| + blocksizes[1] < blocksizes[0] || + (abData[29] & 0x1) != 1) + { + if (TDebug.TraceAudioFileReader) { TDebug.out("illegal values in initial header"); } + if (TDebug.TraceAudioFileReader) { TDebug.out(" + * Copyright (c) 2000 by Matthias Pfisterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/* +|<--- this code is formatted to fit into 80 columns --->| +*/ + +package org.tritonus.sampled.file.vorbis; + +import java.util.Arrays; + +import javax.sound.sampled.AudioFileFormat; +import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioSystem; + +import org.tritonus.share.TDebug; +import org.tritonus.share.sampled.file.THeaderlessAudioFileWriter; + + + +/** Class for writing Vorbis streams + * + * @author Florian Bomers + * @author Matthias Pfisterer + */ +public class VorbisAudioFileWriter +extends THeaderlessAudioFileWriter +{ + private static final AudioFileFormat.Type[] FILE_TYPES = + { + new AudioFileFormat.Type("Vorbis", "ogg") + }; + + private static final AudioFormat[] AUDIO_FORMATS = + { + new AudioFormat(new AudioFormat.Encoding("VORBIS"), ALL, ALL, ALL, ALL, ALL, false), + new AudioFormat(new AudioFormat.Encoding("VORBIS"), ALL, ALL, ALL, ALL, ALL, true), + }; + + + + public VorbisAudioFileWriter() + { + super(Arrays.asList(FILE_TYPES), + Arrays.asList(AUDIO_FORMATS)); + if (TDebug.TraceAudioFileWriter) { TDebug.out("VorbisAudioFileWriter.(): begin"); } + if (TDebug.TraceAudioFileWriter) { TDebug.out("VorbisAudioFileWriter.(): end"); } + } +} + + + +/*** VorbisAudioFileWriter.java ***/ diff --git a/songdbj/org/tritonus/file/vorbis/package.html b/songdbj/org/tritonus/file/vorbis/package.html new file mode 100644 index 0000000000..5d6c328b7d --- /dev/null +++ b/songdbj/org/tritonus/file/vorbis/package.html @@ -0,0 +1,12 @@ + + + + + + +

Ogg vorbis audio file reader and writer based on native libraries. + The classes provided here .

+ + @see org.tritonus.lowlevel.ogg + + -- cgit v1.2.3