📄 mpeginfo.java
字号:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package com.hadeslee.yoyoplayer.tag;import com.hadeslee.audiotag.audio.exceptions.InvalidAudioFrameException;import com.hadeslee.audiotag.audio.exceptions.ReadOnlyFileException;import com.hadeslee.audiotag.audio.mp3.MP3AudioHeader;import com.hadeslee.audiotag.audio.mp3.MP3File;import com.hadeslee.audiotag.tag.Tag;import com.hadeslee.audiotag.tag.TagException;import com.hadeslee.audiotag.tag.ape.APEv2Tag;import com.hadeslee.audiotag.tag.id3.ID3v23Tag;import com.hadeslee.audiotag.tag.id3.ID3v24Tag;import com.hadeslee.yoyoplayer.util.Config;import com.hadeslee.yoyoplayer.util.Util;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.lang.reflect.Method;import java.net.URL;import java.util.Iterator;import java.util.Map;import java.util.Vector;import java.util.logging.Level;import java.util.logging.Logger;import javax.sound.sampled.AudioFileFormat;import javax.sound.sampled.AudioSystem;import javax.sound.sampled.UnsupportedAudioFileException;import org.tritonus.share.sampled.file.TAudioFileFormat;/** * Mpeg格式的音频文件的信息读取类 * @author hadeslee */@SuppressWarnings("unchecked")public class MpegInfo implements TagInfo { private static final long serialVersionUID = 20071213L; private static Logger log = Logger.getLogger(MpegInfo.class.getName()); protected int channels = -1; protected String channelsMode = null; protected String version = null; protected int rate = 0; protected String layer = null; protected String emphasis = null; protected int nominalbitrate = 0; protected long total = 0; protected String vendor = null; protected String location = null; protected long size = 0; protected boolean copyright = false; protected boolean crc = false; protected boolean original = false; protected boolean priv = false; protected boolean vbr = false; protected String track; protected String year = null; protected String genre = null; protected String title = null; protected String artist = null; protected String album = null; protected Vector comments = null; private final String type = "mp3"; protected transient MP3AudioHeader header;//音频文件头 protected transient Tag tag; /** * Constructor. */ public MpegInfo() { super(); } /** * Load and parse MPEG 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 MPEG 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 MPEG 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 MP3 info from file. * * @param file * @throws IOException * @throws UnsupportedAudioFileException */ protected void loadInfo(File file) throws IOException, UnsupportedAudioFileException { try { AudioFileFormat aff = AudioSystem.getAudioFileFormat(file); loadInfo(aff); MP3File mp3 = new MP3File(file, MP3File.LOAD_ALL, true); header = mp3.getMP3AudioHeader(); readHead(); int tp = Config.getConfig().getReadTagOrder(); log.log(Level.INFO, "读取顺序是:" + tp); switch (tp) { case Config.APEv2_ID3v2_ID3v1: readAPEv2_ID3v2_ID3v1(mp3); break; case Config.ID3v1_APEv2_ID3v2: readID3v1_APEv2_ID3v2(mp3); break; case Config.ID3v1_ID3v2_APEv2: readID3v1_ID3v2_APEv2(mp3); break; case Config.ID3v2_APEv2_ID3v1: readID3v2_APEv2_ID3v1(mp3); break; } if (tag == null) { log.log(Level.SEVERE, "没有合法的标签可读!!");// throw new UnsupportedAudioFileException("没有标签"); } else {//否则就把标签读出来 readTag(); } } catch (TagException ex) { throw new IOException(ex); } catch (ReadOnlyFileException ex) { throw new IOException(ex); } catch (InvalidAudioFrameException ex) { throw new IOException(ex); } } private void readAPEv2_ID3v2_ID3v1(MP3File mp3) { if (mp3.hasAPEv2Tag()) { tag = mp3.getAPEv2Tag(); } else if (mp3.hasID3v2Tag()) { tag = mp3.getID3v2Tag(); } else if (mp3.hasID3v1Tag()) { tag = mp3.getID3v1Tag(); } } private void readID3v1_APEv2_ID3v2(MP3File mp3) { if (mp3.hasID3v1Tag()) { tag = mp3.getID3v1Tag(); } else if (mp3.hasAPEv2Tag()) { tag = mp3.getAPEv2Tag(); } else if (mp3.hasID3v2Tag()) { tag = mp3.getID3v2Tag(); } } private void readID3v1_ID3v2_APEv2(MP3File mp3) { if (mp3.hasID3v1Tag()) { tag = mp3.getID3v1Tag(); } else if (mp3.hasID3v2Tag()) { tag = mp3.getID3v2Tag(); } else if (mp3.hasAPEv2Tag()) { tag = mp3.getAPEv2Tag(); } } private void readID3v2_APEv2_ID3v1(MP3File mp3) { System.out.println("读id3v2..."); if (mp3.hasID3v2Tag()) { System.out.println("有id3v2标答........"); tag = mp3.getID3v2Tag(); } else if (mp3.hasAPEv2Tag()) { tag = mp3.getAPEv2Tag(); } else if (mp3.hasID3v1Tag()) { tag = mp3.getID3v1Tag(); } } /** * 读取标签,以替换以前读的标签 */ private void readTag() { //只有APE格式的标签是UTF-8的编码,不用变格式,其它的都要做字符转换 if (tag instanceof APEv2Tag) { log.log(Level.INFO, "是APE的标签......."); this.album = tag.getFirstAlbum(); this.artist = tag.getFirstArtist(); this.genre = tag.getFirstGenre(); this.track = tag.getFirstTrack(); if (comments == null) { comments = new Vector(); } comments.add(tag.getFirstComment()); this.title = tag.getFirstTitle(); this.year = tag.getFirstYear(); } else { System.out.println("tag=" + tag.getClass()); this.album= getChineseString(tag.getFirstAlbum()); this.artist = getChineseString(tag.getFirstArtist()); this.genre = getChineseString(tag.getFirstGenre()); this.track = getChineseString(tag.getFirstTrack()); if (comments == null) { comments = new Vector(); } comments.add(getChineseString(tag.getFirstComment())); this.title = getChineseString(tag.getFirstTitle()); this.year = getChineseString(tag.getFirstYear());// if (Config.getConfig().getEncoding().equals("ISO8859-1")) {// this.album = tag.getFirstAlbum();// this.artist = tag.getFirstArtist();// this.genre = tag.getFirstGenre();// this.track = tag.getFirstTrack();// if (comments == null) {// comments = new Vector();// }// comments.add(tag.getFirstComment());// this.title = tag.getFirstTitle();// this.year = tag.getFirstYear();// } else {// this.album = Util.convertString(tag.getFirstAlbum());// this.artist = Util.convertString(tag.getFirstArtist());// this.genre = Util.convertString(tag.getFirstGenre());// this.track = tag.getFirstTrack();// if (comments == null) {// comments = new Vector();// }// comments.add(Util.convertString(tag.getFirstComment()));// this.title = Util.convertString(tag.getFirstTitle());// this.year = Util.convertString(tag.getFirstYear());// } } } private String getChineseString(String source){ String temp=Util.convertString(source); if(temp.indexOf("??")==-1&&temp.indexOf("�")==-1){ return temp;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -