⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mpeginfo.java

📁 YOYOPlayer MP3播放器 java+JMF实现
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * 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 + -