summaryrefslogtreecommitdiff
path: root/songdbj/OggVorbisInfo.java
diff options
context:
space:
mode:
authorMichiel Van Der Kolk <not.valid@email.address>2005-07-11 15:42:37 +0000
committerMichiel Van Der Kolk <not.valid@email.address>2005-07-11 15:42:37 +0000
commit9fee0ec4ca0c5b7a334cc29dbb58e76c7a4c736e (patch)
tree4c304cd4151020bd5494d279ee68a105ae3a5a3a /songdbj/OggVorbisInfo.java
parentdfa8ecbe609ca8ea194d08560a44fb9a92e94b4b (diff)
downloadrockbox-9fee0ec4ca0c5b7a334cc29dbb58e76c7a4c736e.zip
rockbox-9fee0ec4ca0c5b7a334cc29dbb58e76c7a4c736e.tar.gz
rockbox-9fee0ec4ca0c5b7a334cc29dbb58e76c7a4c736e.tar.bz2
rockbox-9fee0ec4ca0c5b7a334cc29dbb58e76c7a4c736e.tar.xz
Songdb java version, source. only 1.5 compatible
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7101 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'songdbj/OggVorbisInfo.java')
-rw-r--r--songdbj/OggVorbisInfo.java311
1 files changed, 311 insertions, 0 deletions
diff --git a/songdbj/OggVorbisInfo.java b/songdbj/OggVorbisInfo.java
new file mode 100644
index 0000000..ab07299
--- /dev/null
+++ b/songdbj/OggVorbisInfo.java
@@ -0,0 +1,311 @@
+/*
+ * OggVorbisInfo.
+ *
+ * JavaZOOM : jlgui@javazoom.net
+ * http://www.javazoom.net
+ *
+ *-----------------------------------------------------------------------
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Library General Public License as published
+ * by the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *----------------------------------------------------------------------
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.FileInputStream;
+import java.io.BufferedInputStream;
+import java.net.URL;
+import java.util.Map;
+import java.util.Vector;
+
+import javax.sound.sampled.AudioFileFormat;
+import javax.sound.sampled.AudioSystem;
+import javax.sound.sampled.UnsupportedAudioFileException;
+
+import org.tritonus.share.sampled.file.TAudioFileFormat;
+
+/**
+ * This class gives information (audio format and comments) about Ogg Vorbis file or URL.
+ */
+public class OggVorbisInfo implements TagInfo
+{
+ protected int serial = 0;
+ protected int channels = 0;
+ protected int version = 0;
+ protected int rate = 0;
+ protected int minbitrate = 0;
+ protected int maxbitrate = 0;
+ protected int averagebitrate = 0;
+ protected int nominalbitrate = 0;
+ protected long totalms = 0;
+ protected String vendor = "";
+ protected String location = null;
+
+ protected long size = 0;
+ protected int track = -1;
+ protected String year = null;
+ protected String genre = null;
+ protected String title = null;
+ protected String artist = null;
+ protected String album = null;
+ protected Vector comments = new Vector();
+
+
+ /***
+ * Constructor.
+ */
+ public OggVorbisInfo()
+ {
+ super();
+ }
+
+ /**
+ * Load and parse Ogg Vorbis info from File.
+ * @param input
+ * @throws IOException
+ */
+ public void load(File input) throws IOException, UnsupportedAudioFileException
+ {
+ size = input.length();
+ location = input.getPath();
+ loadInfo(input);
+ }
+
+ /**
+ * Load and parse Ogg Vorbis info from URL.
+ * @param input
+ * @throws IOException
+ * @throws UnsupportedAudioFileException
+ */
+ public void load(URL input) throws IOException, UnsupportedAudioFileException
+ {
+ location = input.toString();
+ loadInfo(input);
+ }
+
+ /**
+ * Load and parse Ogg Vorbis info from InputStream.
+ * @param input
+ * @throws IOException
+ * @throws UnsupportedAudioFileException
+ */
+ public void load(InputStream input) throws IOException, UnsupportedAudioFileException
+ {
+ loadInfo(input);
+ }
+
+ /**
+ * Load info from input stream.
+ * @param input
+ * @throws IOException
+ * @throws UnsupportedAudioFileException
+ */
+ protected void loadInfo(InputStream input) throws IOException, UnsupportedAudioFileException
+ {
+ AudioFileFormat aff = AudioSystem.getAudioFileFormat(input);
+ loadInfo(aff);
+ }
+
+ /**
+ * Load Ogg Vorbis info from file.
+ * @param file
+ * @throws IOException
+ * @throws UnsupportedAudioFileException
+ */
+ protected void loadInfo(File file) throws IOException, UnsupportedAudioFileException
+ {
+ InputStream in = new BufferedInputStream(new FileInputStream(file));
+ loadInfo(in);
+ in.close();
+ }
+
+ /**
+ * Load Ogg Vorbis info from URL.
+ * @param input
+ * @throws IOException
+ * @throws UnsupportedAudioFileException
+ */
+ protected void loadInfo(URL input) throws IOException, UnsupportedAudioFileException
+ {
+ AudioFileFormat aff = AudioSystem.getAudioFileFormat(input);
+ loadInfo(aff);
+ loadExtendedInfo(aff);
+ }
+
+ /**
+ * Load info from AudioFileFormat.
+ * @param aff
+ * @throws UnsupportedAudioFileException
+ */
+ protected void loadInfo(AudioFileFormat aff) throws UnsupportedAudioFileException
+ {
+ String type = aff.getType().toString();
+ if (!type.equalsIgnoreCase("ogg")) throw new UnsupportedAudioFileException("Not Ogg Vorbis audio format");
+ if (aff instanceof TAudioFileFormat)
+ {
+ Map props = ((TAudioFileFormat) aff).properties();
+ if (props.containsKey("ogg.channels")) channels = ((Integer)props.get("ogg.channels")).intValue();
+ if (props.containsKey("ogg.frequency.hz")) rate = ((Integer)props.get("ogg.frequency.hz")).intValue();
+ if (props.containsKey("ogg.bitrate.nominal.bps")) nominalbitrate = ((Integer)props.get("ogg.bitrate.nominal.bps")).intValue();
+ averagebitrate = nominalbitrate;
+ if (props.containsKey("ogg.bitrate.max.bps")) maxbitrate = ((Integer)props.get("ogg.bitrate.max.bps")).intValue();
+ if (props.containsKey("ogg.bitrate.min.bps")) minbitrate = ((Integer)props.get("ogg.bitrate.min.bps")).intValue();
+ if (props.containsKey("ogg.version")) version = ((Integer)props.get("ogg.version")).intValue();
+ if (props.containsKey("ogg.serial")) serial = ((Integer)props.get("ogg.serial")).intValue();
+ if (props.containsKey("ogg.comment.encodedby")) vendor = (String)props.get("ogg.comment.encodedby");
+
+ if (props.containsKey("copyright")) comments.add((String)props.get("copyright"));
+ if (props.containsKey("title")) title = (String)props.get("title");
+ if (props.containsKey("author")) artist = (String)props.get("author");
+ if (props.containsKey("album")) album = (String)props.get("album");
+ if (props.containsKey("date")) year = (String)props.get("date");
+ if (props.containsKey("comment")) comments.add((String)props.get("comment"));
+ if (props.containsKey("duration")) totalms = (long) Math.round((((Long)props.get("duration")).longValue())/1000000);
+ if (props.containsKey("ogg.comment.genre")) genre = (String)props.get("ogg.comment.genre");
+ if (props.containsKey("ogg.comment.track"))
+ {
+ try
+ {
+ track = Integer.parseInt((String)props.get("ogg.comment.track"));
+ }
+ catch (NumberFormatException e1)
+ {
+ // Not a number
+ }
+ }
+ if (props.containsKey("ogg.comment.ext.1")) comments.add((String)props.get("ogg.comment.ext.1"));
+ if (props.containsKey("ogg.comment.ext.2")) comments.add((String)props.get("ogg.comment.ext.2"));
+ if (props.containsKey("ogg.comment.ext.3")) comments.add((String)props.get("ogg.comment.ext.3"));
+ }
+ }
+
+ /**
+ * Load extended info from AudioFileFormat.
+ * @param aff
+ * @throws IOException
+ * @throws UnsupportedAudioFileException
+ */
+ protected void loadExtendedInfo(AudioFileFormat aff) throws IOException, UnsupportedAudioFileException
+ {
+ String type = aff.getType().toString();
+ if (!type.equalsIgnoreCase("ogg")) throw new UnsupportedAudioFileException("Not Ogg Vorbis audio format");
+ if (aff instanceof TAudioFileFormat)
+ {
+ Map props = ((TAudioFileFormat) aff).properties();
+ // How to load icecast meta data (if any) ??
+ }
+ }
+
+ public int getSerial()
+ {
+ return serial;
+ }
+
+ public int getChannels()
+ {
+ return channels;
+ }
+
+ public int getVersion()
+ {
+ return version;
+ }
+
+ public int getMinBitrate()
+ {
+ return minbitrate;
+ }
+
+ public int getMaxBitrate()
+ {
+ return maxbitrate;
+ }
+
+ public int getAverageBitrate()
+ {
+ return averagebitrate;
+ }
+
+ public long getSize()
+ {
+ return size;
+ }
+
+ public String getVendor()
+ {
+ return vendor;
+ }
+
+ public String getLocation()
+ {
+ return location;
+ }
+
+ /*-- TagInfo Implementation --*/
+
+ public int getSamplingRate()
+ {
+ return rate;
+ }
+
+ public int getBitRate()
+ {
+ return nominalbitrate;
+ }
+
+ public long getPlayTime()
+ {
+ return totalms;
+ }
+
+ public String getTitle()
+ {
+ return title;
+ }
+
+ public String getArtist()
+ {
+ return artist;
+ }
+
+ public String getAlbum()
+ {
+ return album;
+ }
+
+ public int getTrack()
+ {
+ return track;
+ }
+
+ public String getGenre()
+ {
+ return genre;
+ }
+
+ public Vector getComment()
+ {
+ return comments;
+ }
+
+ public String getYear()
+ {
+ return year;
+ }
+
+ public int getFirstFrameOffset() {
+ return 0;
+ }
+} \ No newline at end of file