Package davaguine.jmac.decoder

Source Code of davaguine.jmac.decoder.IAPEDecompress

/*
*  21.04.2004 Original verion. davagin@udm.ru.
*-----------------------------------------------------------------------
*  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., 675 Mass Ave, Cambridge, MA 02139, USA.
*----------------------------------------------------------------------
*/

package davaguine.jmac.decoder;

import davaguine.jmac.info.*;
import davaguine.jmac.tools.File;
import davaguine.jmac.tools.Globals;
import davaguine.jmac.tools.JMACException;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

/**
* Author: Dmitry Vaguine
* Date: 04.03.2004
* Time: 14:51:31
*/
public abstract class IAPEDecompress {

    //////////////////////////////////////////////////////////////////////////////////////////////
    // GetData(...) - gets raw decompressed audio
    //
    // Parameters:
    //  char * pBuffer
    //    a pointer to a buffer to put the data into
    //  int nBlocks
    //    the number of audio blocks desired (see note at intro about blocks vs. samples)
    //  int * pBlocksRetrieved
    //    the number of blocks actually retrieved (could be less at end of file or on critical failure)
    //////////////////////////////////////////////////////////////////////////////////////////////
    public abstract int GetData(byte[] pBuffer, int nBlocks) throws IOException;

    //////////////////////////////////////////////////////////////////////////////////////////////
    // Seek(...) - seeks
    //
    // Parameters:
    //  int nBlockOffset
    //    the block to seek to (see note at intro about blocks vs. samples)
    //////////////////////////////////////////////////////////////////////////////////////////////
    public abstract void Seek(int nBlockOffset) throws IOException;

    /**
     * ******************************************************************************************
     * Get Information
     * *******************************************************************************************
     */
    public abstract int getApeInfoDecompressCurrentBlock();

    public abstract int getApeInfoDecompressCurrentMS();

    public abstract int getApeInfoDecompressTotalBlocks();

    public abstract int getApeInfoDecompressLengthMS();

    public abstract int getApeInfoDecompressCurrentBitRate() throws IOException;

    public abstract int getApeInfoDecompressAverageBitrate() throws IOException;

    public abstract File getApeInfoIoSource();

    public abstract int getApeInfoBlocksPerFrame();

    public abstract int getApeInfoFileVersion();

    public abstract int getApeInfoCompressionLevel();

    public abstract int getApeInfoFormatFlags();

    public abstract int getApeInfoSampleRate();

    public abstract int getApeInfoBitsPerSample();

    public abstract int getApeInfoBytesPerSample();

    public abstract int getApeInfoChannels();

    public abstract int getApeInfoBlockAlign();

    public abstract int getApeInfoFinalFrameBlocks();

    public abstract int getApeInfoTotalFrames();

    public abstract int getApeInfoWavHeaderBytes();

    public abstract int getApeInfoWavTerminatingBytes();

    public abstract int getApeInfoWavDataBytes();

    public abstract int getApeInfoWavTotalBytes();

    public abstract int getApeInfoApeTotalBytes();

    public abstract int getApeInfoTotalBlocks();

    public abstract int getApeInfoLengthMs();

    public abstract int getApeInfoAverageBitrate();

    public abstract int getApeInfoSeekByte(int nFrame);

    public abstract int getApeInfoFrameBytes(int nFrame) throws IOException;

    public abstract int getApeInfoFrameBlocks(int nFrame);

    public abstract int getApeInfoFrameBitrate(int nFrame) throws IOException;

    public abstract int getApeInfoDecompressedBitrate();

    public abstract int getApeInfoPeakLevel();

    public abstract int getApeInfoSeekBit(int nFrame);

    public abstract WaveFormat getApeInfoWaveFormatEx();

    public abstract byte[] getApeInfoWavHeaderData(int nMaxBytes);

    public abstract APETag getApeInfoTag();

    public abstract byte[] getApeInfoWavTerminatingData(int nMaxBytes) throws IOException;

    public abstract APEFileInfo getApeInfoInternalInfo();

    public static IAPEDecompress CreateIAPEDecompressCore(APEInfo pAPEInfo, int nStartBlock, int nFinishBlock) {
        IAPEDecompress pAPEDecompress = null;
        if (pAPEInfo != null) {
            if (pAPEInfo.getApeInfoFileVersion() >= 3930) {
                if (Globals.NATIVE)
                    pAPEDecompress = new APEDecompressNative(pAPEInfo, nStartBlock, nFinishBlock);
                else
                    pAPEDecompress = new APEDecompress(pAPEInfo, nStartBlock, nFinishBlock);
            } else
                pAPEDecompress = new APEDecompressOld(pAPEInfo, nStartBlock, nFinishBlock);
        }

        return pAPEDecompress;
    }

    public static APEInfo CreateAPEInfo(File in) throws IOException {
        // variables
        APEInfo pAPEInfo = null;

        // get the extension
        if (in.isLocal()) {
            final String pExtension = in.getExtension();

            // take the appropriate action (based on the extension)
            if (pExtension.toLowerCase().equals(".mac") || pExtension.toLowerCase().equals(".ape"))
            // plain .ape file
                pAPEInfo = new APEInfo(in);
        } else
            pAPEInfo = new APEInfo(in);

        // fail if we couldn't get the file information
        if (pAPEInfo == null)
            throw new JMACException("Invalid Input File");
        return pAPEInfo;
    }

    public static IAPEDecompress CreateIAPEDecompress(File in) throws IOException {
        // variables
        APEInfo pAPEInfo = null;
        int nStartBlock = -1;
        int nFinishBlock = -1;

        // get the extension
        if (in.isLocal()) {
            final String pFilename = in.getFilename();
            final String pExtension = in.getExtension();

            // take the appropriate action (based on the extension)
            if (pExtension.toLowerCase().equals(".apl")) {
                // "link" file (.apl linked large APE file)
                APELink APELink = new APELink(pFilename);
                if (APELink.GetIsLinkFile()) {
                    URL url = null;
                    try {
                        url = new URL(APELink.GetImageFilename());
                        pAPEInfo = new APEInfo(url);
                    } catch (MalformedURLException e) {
                        pAPEInfo = new APEInfo(new java.io.File(APELink.GetImageFilename()));
                    }
                    nStartBlock = APELink.GetStartBlock();
                    nFinishBlock = APELink.GetFinishBlock();
                }
            } else if (pExtension.toLowerCase().equals(".mac") || pExtension.toLowerCase().equals(".ape"))
            // plain .ape file
                pAPEInfo = new APEInfo(in);
        } else
            pAPEInfo = new APEInfo(in);

        // fail if we couldn't get the file information
        if (pAPEInfo == null)
            throw new JMACException("Invalid Input File");

        // create and return
        IAPEDecompress pAPEDecompress = CreateIAPEDecompressCore(pAPEInfo, nStartBlock, nFinishBlock);
        return pAPEDecompress;
    }

    public static IAPEDecompress CreateIAPEDecompressEx(APEInfo pAPEInfo, int nStartBlock, int nFinishBlock) {
        return CreateIAPEDecompressCore(pAPEInfo, nStartBlock, nFinishBlock);
    }

}
TOP

Related Classes of davaguine.jmac.decoder.IAPEDecompress

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.