Java tutorial
/** * Xtreme Media Player a cross-platform media player. * Copyright (C) 2005-2011 Besmir Beqiri * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package xtrememp.tag; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.URL; import javax.sound.sampled.AudioFileFormat; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.UnsupportedAudioFileException; import org.apache.commons.io.FilenameUtils; import org.jaudiotagger.audio.AudioFile; import org.jaudiotagger.audio.AudioFileIO; import org.jaudiotagger.audio.AudioHeader; import org.jaudiotagger.audio.exceptions.CannotReadException; import org.jaudiotagger.audio.exceptions.InvalidAudioFrameException; import org.jaudiotagger.audio.exceptions.ReadOnlyFileException; import org.jaudiotagger.tag.FieldKey; import org.jaudiotagger.tag.Tag; import org.jaudiotagger.tag.TagException; import xtrememp.util.Utilities; /** * * @author Besmir Beqiri */ public class GenericInfo extends TagInfo { protected int bitspersample = AudioSystem.NOT_SPECIFIED; protected int framesize = AudioSystem.NOT_SPECIFIED; /** * Load and parse info from a File. * * @param input * @throws IOException */ @Override public void load(File input) throws IOException, UnsupportedAudioFileException { size = input.length(); location = input.getPath(); title = FilenameUtils.getBaseName(input.getName()); try { AudioFile audioFile = AudioFileIO.read(input); AudioHeader audioHeader = audioFile.getAudioHeader(); if (audioHeader != null) { encodingType = audioHeader.getEncodingType(); format = audioHeader.getFormat(); sampleRate = audioHeader.getSampleRate(); sampleRateAsNumber = audioHeader.getSampleRateAsNumber(); bitRate = audioHeader.getBitRate(); bitRateAsNumber = audioHeader.getBitRateAsNumber(); duration = audioHeader.getTrackLength(); channels = audioHeader.getChannels(); } Tag tag = audioFile.getTag(); if (tag != null) { title = tag.getFirst(FieldKey.TITLE); artist = tag.getFirst(FieldKey.ARTIST); album = tag.getFirst(FieldKey.ALBUM); year = tag.getFirst(FieldKey.YEAR); genre = tag.getFirst(FieldKey.GENRE); track = tag.getFirst(FieldKey.TRACK); comment = tag.getFirst(FieldKey.COMMENT); artwork = tag.getFirstArtwork(); } } catch (CannotReadException ex) { throw new IOException(ex); } catch (TagException ex) { throw new UnsupportedAudioFileException(ex.getMessage()); } catch (ReadOnlyFileException ex) { throw new IOException(ex); } catch (InvalidAudioFrameException ex) { throw new UnsupportedAudioFileException(ex.getMessage()); } } /** * Load and parse info from an URL. * * @param input * @throws IOException * @throws UnsupportedAudioFileException */ @Override public void load(URL input) throws IOException, UnsupportedAudioFileException { location = input.toString(); AudioFileFormat aff = AudioSystem.getAudioFileFormat(input); loadInfo(aff); } /** * Load and parse info from an input stream. * * @param input * @throws IOException * @throws UnsupportedAudioFileException */ @Override public void load(InputStream input) throws IOException, UnsupportedAudioFileException { AudioFileFormat aff = AudioSystem.getAudioFileFormat(input); loadInfo(aff); } /** * Load info from AudioFileFormat. * * @param aff * @throws javax.sound.sampled.UnsupportedAudioFileException */ protected void loadInfo(AudioFileFormat aff) throws UnsupportedAudioFileException { encodingType = aff.getType().toString(); AudioFormat audioFormat = aff.getFormat(); channelsAsNumber = audioFormat.getChannels(); sampleRateAsNumber = (int) audioFormat.getSampleRate(); bitspersample = audioFormat.getSampleSizeInBits(); framesize = audioFormat.getFrameSize(); bitRateAsNumber = Math.round(bitspersample * sampleRateAsNumber * channelsAsNumber / 1000); } @Override public String getCodecDetails() { StringBuilder sb = new StringBuilder(); sb.append("<html><b>Encoding Type: </b>"); sb.append(getEncodingType().toUpperCase()); sb.append("<br><b>Format: </b>").append(getFormat()); sb.append("<br><b>Sampling rate: </b>"); sb.append(getSampleRate()).append(" Hz"); sb.append("<br><b>Bitrate: </b>"); sb.append(getBitRate()).append(" Kbps"); sb.append("<br><b>Channels: </b>"); sb.append(getChannels()); if (size != AudioSystem.NOT_SPECIFIED) { sb.append("<br><b>Size: </b>"); sb.append(Utilities.byteCountToDisplaySize(size)); } sb.append("</html>"); return sb.toString(); } }