/* * Copyright (C) 2010-2016 JPEXS, All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3.0 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. */ package com.jpexs.decompiler.flash.types.sound; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; import javazoom.jl.decoder.Bitstream; import javazoom.jl.decoder.BitstreamException; import javazoom.jl.decoder.Decoder; import javazoom.jl.decoder.DecoderException; import javazoom.jl.decoder.Header; import javazoom.jl.decoder.SampleBuffer; /** * * @author JPEXS */ public class MP3FRAME { private Header h; private SampleBuffer samples; private MP3FRAME() { } public static MP3FRAME readFrame(Bitstream bitstream, Decoder decoder) throws IOException { MP3FRAME ret = new MP3FRAME(); try { ret.h = bitstream.readFrame(); if (ret.h == null) { return null; } } catch (BitstreamException ex) { Logger.getLogger(MP3FRAME.class.getName()).log(Level.SEVERE, null, ex); } try { ret.samples = (SampleBuffer) decoder.decodeFrame(ret.h, bitstream); } catch (DecoderException ex) { Logger.getLogger(MP3FRAME.class.getName()).log(Level.SEVERE, null, ex); } bitstream.closeFrame(); return ret; } public boolean isStereo() { return h.mode() != Header.SINGLE_CHANNEL; } public SampleBuffer getSamples() { return samples; } public int getSamplingRate() { switch (h.sample_frequency()) { case Header.THIRTYTWO: if (h.version() == Header.MPEG1) { return 32000; } else if (h.version() == Header.MPEG2_LSF) { return 16000; } else // SZD { return 8000; } case Header.FOURTYFOUR_POINT_ONE: if (h.version() == Header.MPEG1) { return 44100; } else if (h.version() == Header.MPEG2_LSF) { return 22050; } else // SZD { return 11025; } case Header.FOURTYEIGHT: if (h.version() == Header.MPEG1) { return 48000; } else if (h.version() == Header.MPEG2_LSF) { return 24000; } else // SZD { return 12000; } default: return 0; } } public int getBitRate() { return h.bitrate(); } }