亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? adpcmhelper.java

?? java版本的flash文件(swf)播放器
?? JAVA
字號:
/****************************************************************
 * Copyright (c) 2001, David N. Main, All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or
 * without modification, are permitted provided that the 
 * following conditions are met:
 *
 * 1. Redistributions of source code must retain the above 
 * copyright notice, this list of conditions and the following 
 * disclaimer. 
 * 
 * 2. Redistributions in binary form must reproduce the above 
 * copyright notice, this list of conditions and the following 
 * disclaimer in the documentation and/or other materials 
 * provided with the distribution.
 * 
 * 3. The name of the author may not be used to endorse or 
 * promote products derived from this software without specific 
 * prior written permission. 
 * 
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY 
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 
 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
 * AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 ****************************************************************/
package com.anotherbigidea.flash.sound;

import java.io.*;
import java.util.*;
import com.anotherbigidea.io.*;
import com.anotherbigidea.flash.*;
import com.anotherbigidea.flash.structs.*;
import com.anotherbigidea.flash.interfaces.*;
import com.anotherbigidea.flash.writers.*;
import javax.sound.sampled.*;
import com.anotherbigidea.flash.movie.*;

/**
 * ADPCM Utilities
 */
public class ADPCMHelper
{
    public class ADPCMPacket
    {
        public int initialLeftSample  = 0;
        public int initialLeftIndex   = 0;
        public int initialRightSample = 0;
        public int initialRightIndex  = 0;
        public int[] leftData;
        public int[] rightData;
        public int sampleCount;
    }
    
    protected AudioInputStream audioIn;
    protected boolean isStereo;
    protected boolean is16Bit;
    protected int sampleRate;
    protected int rate;
    protected int samplesPerFrame;
    protected boolean isSigned;
    
    protected int sampleCount = 0;
    
    protected ADPCMEncodeStream leftEncoder;
    protected ADPCMEncodeStream rightEncoder;
    protected ADPCMPacket currentPacket;
    
    public ADPCMHelper( InputStream audioFile, int framesPerSecond )
        throws IOException, UnsupportedAudioFileException
    {
        audioIn = AudioSystem.getAudioInputStream( new BufferedInputStream( audioFile ) );
        
        AudioFormat format = audioIn.getFormat();
        int frameSize    = format.getFrameSize();
        isStereo = format.getChannels() == 2;
        is16Bit  = format.getSampleSizeInBits() > 8;
        sampleRate = (int)format.getSampleRate();
        
        isSigned = format.getEncoding() == AudioFormat.Encoding.PCM_SIGNED;
        
        //System.out.println( format + " FrameSize=" + frameSize );
        
        if     ( sampleRate >= 44000 ) sampleRate = 44000;
        else if( sampleRate >= 22000 ) sampleRate = 22000;
        else if( sampleRate >= 11000 ) sampleRate = 11000;
        else sampleRate = 5500;

        rate = SWFConstants.SOUND_FREQ_5_5KHZ;        
        if     ( sampleRate == 44000 ) rate = SWFConstants.SOUND_FREQ_44KHZ;
        else if( sampleRate == 22000 ) rate = SWFConstants.SOUND_FREQ_22KHZ;
        else if( sampleRate == 11000 ) rate = SWFConstants.SOUND_FREQ_11KHZ;        
        
        samplesPerFrame = sampleRate / framesPerSecond;
        
        FramedInputStream frameIn = new FramedInputStream( audioIn, frameSize );
        
        leftEncoder = new ADPCMEncodeStream( frameIn, is16Bit, isSigned );
        
        if( isStereo )
        {
            rightEncoder = new ADPCMEncodeStream( frameIn, is16Bit, isSigned );
        }
    }
    
    public Sound getSoundDefinition() throws IOException
    {
        ByteArrayOutputStream bout = new ByteArrayOutputStream();
        OutStream out = new OutStream( bout );
        sampleCount = 0;
        boolean first = true;
        
        for( ADPCMPacket packet = readPacket( ADPCMConstants.PACKET_SIZE );
             packet != null;
             packet = readPacket( ADPCMConstants.PACKET_SIZE ) )
        {
            sampleCount += packet.sampleCount + 1;
            writePacket( packet, out, first );
            first = false;
            
            //System.out.println( "Packet size = " + packet.leftData.length );
        }
        
        out.flush();
        byte[] soundData = bout.toByteArray();
        return new Sound( SWFConstants.SOUND_FORMAT_ADPCM, rate, true, isStereo, sampleCount, soundData );
    }
    
    /**
     * @return null if no more packets are available
     */
    public ADPCMPacket readPacket( int packetSize ) throws IOException
    {
        ADPCMPacket packet = new ADPCMPacket();
        packet.initialLeftSample = leftEncoder.getFirstPacketSample();
        if( leftEncoder.isDone() ) return null;

        int count = 0;
        
        if( isStereo )
        {
            packet.initialRightSample = rightEncoder.getFirstPacketSample();
        }
        
        packet.initialLeftIndex = leftEncoder.setIndex( packet.initialLeftSample );
        
        if( isStereo )
        {
            packet.initialRightIndex  = rightEncoder.setIndex( packet.initialRightSample );
        }
        
        packet.leftData = new int[ packetSize-1 ];;
        if( isStereo ) packet.rightData = new int[ packetSize-1 ];;
        
        for( int i = 0; i < packetSize-1; i++ )
        {
            packet.leftData[i] = leftEncoder.getDelta();

            if( ! leftEncoder.isDone() ) count++;
            
            if( isStereo ) packet.rightData[i] = rightEncoder.getDelta();
        }
        
        packet.sampleCount = count;
        return packet;
    }
    
    /**
     * Streaming block
     * @return null if no more blocks
     */
    public byte[] getBlockData( boolean firstBlock ) throws IOException
    {
        ByteArrayOutputStream bout = new ByteArrayOutputStream();
        OutStream os = new OutStream( bout );
        
        currentPacket = readPacket( samplesPerFrame );
        if( currentPacket == null ) return null;
        
        writePacket( currentPacket, os, true );        
        os.flushBits();
        
        return bout.toByteArray();
    }

    public void writePacket( ADPCMPacket packet, OutStream out, boolean includeBitCount ) throws IOException 
    {
        if( packet == null ) return;

        int sample = packet.initialLeftSample;
        
        if( includeBitCount ) out.writeUBits( 2, 2 );
        out.writeUBits( 16, sample );
        out.writeUBits( 6, packet.initialLeftIndex );
               
        if( isStereo )
        {
            sample = packet.initialRightSample;
        
            out.writeUBits( 16, sample );
            out.writeUBits( 6, packet.initialRightIndex );
        }
        
        for( int i = 0; i < packet.sampleCount; i++ )
        {
            out.writeUBits( 4, packet.leftData[i] );
            if( isStereo ) out.writeUBits( 4, packet.rightData[i] );            
        }
    }
    
    public SoundStreamHead getStreamHeader()
    {
        return new SoundStreamHead( rate, true, isStereo,
                                    SWFConstants.SOUND_FORMAT_ADPCM,
                                    rate, true, isStereo, 
                                    samplesPerFrame );
    }
    
    /**
     * InputStream wrapper that ensures AudioInputStream is read on a frame-by-frame basis
     */
    public static class FramedInputStream extends InputStream 
    {
        protected InputStream in;
        protected byte[] frameData;
        protected int dataPtr;
        protected int frameSize;
        protected boolean done = false;
        
        public FramedInputStream( InputStream in, int frameSize )
        {
            this.in = in;
            this.frameSize  = frameSize;
            frameData = new byte[ frameSize ];
            dataPtr = frameSize;
        }
        
        public int read() throws IOException
        {
            if( dataPtr < frameData.length )
            {
                int val = frameData[dataPtr++];
                if( val < 0 ) val = val + 0x100;
                return val;
            }
            
            if( done ) return -1;
            
            dataPtr = 0;
            int read = 0;
            
            while( dataPtr < frameSize && (read = in.read( frameData, dataPtr, frameSize-dataPtr)) >= 0 )
            {
                dataPtr += read;
            }
            
            if( dataPtr == 0 )
            {
                done = true;
                return -1;
            }
            
            while( dataPtr < frameData.length ) frameData[dataPtr++] = 0;
            dataPtr = 0;
            
            return read();
        }
    }
    
 
    /**
     * Makes a non-streaming SWF from a Java Sound compatible audio file.
     * args[0] = audio in filename
     * args[1] = SWF out filename
     */
    public static void main( String[] args ) throws Exception
    {
        InputStream audioFile = new FileInputStream( args[0] );
        
        Movie movie = new Movie();
        movie.setFrameRate(30);
        ADPCMHelper helper = new ADPCMHelper( audioFile, 30 );
                          
        Frame frame = movie.appendFrame();
        Sound sound = helper.getSoundDefinition();
        int frames = frame.startSound( sound, 30 );
        
        while( frames-- > 0 ) frame = movie.appendFrame();
        frame.stop();        
        
        audioFile.close();
        
        movie.write( args[1] );
    }    
    
    
    /**
     * Makes a streaming SWF from a Java Sound compatible audio file.
     * args[0] = audio in filename
     * args[1] = SWF out filename
     */
    public static void main2( String[] args ) throws Exception
    {
        InputStream audioFile     = new FileInputStream( args[0] );
        SWFWriter       swfwriter = new SWFWriter( args[1] );
        
        SWFTagTypes tags = new TagWriter( swfwriter );
        
        tags.header( 5, -1, 200, 200, 12, -1 );
        tags.tagSetBackgroundColor( new Color(255,255,255));
        
        ADPCMHelper helper = new ADPCMHelper( audioFile, 12 );
                          
        SoundStreamHead header = helper.getStreamHeader();
        
        header.write( tags );

        byte[] block = helper.getBlockData( true );
        
        while( block != null )
        {
            tags.tagSoundStreamBlock( block );
            tags.tagShowFrame();           
            
            block = helper.getBlockData( false );
        }
        
        SWFActions acts = tags.tagDoAction();
        acts.start(0);
        acts.stop();
        acts.end();
        acts.done();
        
        tags.tagShowFrame();
        tags.tagEnd();
        
        audioFile.close();
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美羞羞免费网站| 日韩中文字幕麻豆| 一区二区三区国产| 成人免费毛片app| 在线观看精品一区| 欧美视频日韩视频在线观看| 日韩精品一区二区三区视频播放 | 精品国产乱码久久久久久闺蜜| 久久日一线二线三线suv| 亚洲人妖av一区二区| 秋霞国产午夜精品免费视频| 国产成人精品免费视频网站| 国产调教视频一区| 一区二区在线观看av| 激情综合色丁香一区二区| 91在线视频免费91| 日韩一级在线观看| 国产精品国产三级国产aⅴ入口| 午夜精品久久久久久久 | 亚洲免费在线看| 久久99精品久久久| 色偷偷一区二区三区| 欧美大片免费久久精品三p| 亚洲精品视频在线观看网站| 洋洋av久久久久久久一区| 成人97人人超碰人人99| 精品视频一区 二区 三区| 日韩一区二区中文字幕| 综合久久给合久久狠狠狠97色 | 日韩午夜av电影| 中文字幕日韩精品一区| 激情综合五月天| 精品视频一区二区三区免费| 中文字幕制服丝袜成人av| 久久精品国产久精国产爱| 色综合久久综合网97色综合| 久久免费国产精品| 日韩电影一区二区三区四区| 一本大道综合伊人精品热热| 国产日韩亚洲欧美综合| 免费在线观看一区二区三区| 色婷婷国产精品综合在线观看| 久久久噜噜噜久噜久久综合| 香蕉久久一区二区不卡无毒影院 | 一区二区三区欧美亚洲| 国产91对白在线观看九色| 日韩欧美国产小视频| 亚洲成a人在线观看| 色老综合老女人久久久| 国产精品美女久久福利网站| 韩国在线一区二区| 欧美一级黄色大片| 婷婷久久综合九色综合伊人色| 91国产免费观看| 亚洲天堂久久久久久久| www.欧美精品一二区| 国产校园另类小说区| 国内精品伊人久久久久影院对白| 欧美久久一二区| 午夜国产不卡在线观看视频| 欧美自拍丝袜亚洲| 亚洲一线二线三线视频| 一本色道综合亚洲| 亚洲激情图片小说视频| 一本大道久久a久久综合| 亚洲日本青草视频在线怡红院| 成人av网站大全| 国产精品不卡一区二区三区| 岛国av在线一区| 国产精品国产自产拍在线| 成人激情黄色小说| 国产精品欧美极品| www.亚洲色图.com| 亚洲四区在线观看| 在线亚洲欧美专区二区| 亚洲最新视频在线观看| 欧美怡红院视频| 天堂成人国产精品一区| 欧美一区永久视频免费观看| 欧美a级一区二区| 日韩久久久精品| 国产高清久久久| 国产精品色噜噜| 91视频91自| 亚洲亚洲精品在线观看| 制服.丝袜.亚洲.中文.综合| 老司机一区二区| 国产欧美精品国产国产专区| 成年人网站91| 亚洲国产精品人人做人人爽| 欧美一区二区高清| 国产精品一区二区在线观看网站| 国产精品久久久久婷婷二区次| 99久久精品免费精品国产| 一区二区三区在线视频观看 | 麻豆91在线播放免费| 久久精品人人做人人爽人人| 粗大黑人巨茎大战欧美成人| 一区二区三区四区在线| 欧美精品99久久久**| 国内精品国产三级国产a久久| 欧美高清一级片在线观看| 91老司机福利 在线| 天天色图综合网| 亚洲精品一区二区三区精华液| 成人污视频在线观看| 91麻豆.com| 欧美日本国产视频| 精品国精品自拍自在线| 制服丝袜中文字幕亚洲| 91精品婷婷国产综合久久性色 | 韩日精品视频一区| 成人亚洲一区二区一| 成人黄色片在线观看| 伊人夜夜躁av伊人久久| 6080国产精品一区二区| 国精产品一区一区三区mba桃花 | 成人黄色免费短视频| 亚洲成人午夜影院| 国产亚洲精品7777| 在线一区二区三区做爰视频网站| 麻豆91精品91久久久的内涵| 中文字幕人成不卡一区| 欧美一区永久视频免费观看| 福利视频网站一区二区三区| 亚洲第四色夜色| 国产精品日产欧美久久久久| 91精选在线观看| 99re66热这里只有精品3直播| 三级成人在线视频| 欧美日韩综合在线| 国产亚洲欧美一区在线观看| 蜜桃视频在线一区| 成人欧美一区二区三区| 日韩色在线观看| 99久久精品国产毛片| 久久精品国产一区二区| 国产精品911| 婷婷六月综合网| 中文字幕亚洲一区二区av在线 | 日韩国产高清在线| 亚洲欧洲成人精品av97| 欧美第一区第二区| 欧美日韩视频在线第一区| 成人av电影在线播放| 国产一区视频导航| 日韩国产欧美在线播放| 一区二区成人在线视频 | 在线视频国内自拍亚洲视频| 国产精品白丝av| 久久精品国产成人一区二区三区| 亚洲综合图片区| 国产精品美女久久久久高潮| 精品国产不卡一区二区三区| 欧美巨大另类极品videosbest | 亚洲一区二区免费视频| 国产精品视频你懂的| 精品国产免费人成电影在线观看四季| 欧美午夜电影一区| 91在线观看免费视频| 成人国产精品免费观看动漫| 韩国成人在线视频| 久久99精品国产.久久久久久| 日韩精品一二区| 婷婷丁香激情综合| 亚洲精品国产第一综合99久久| 成人免费在线播放视频| 国产精品99精品久久免费| 久久成人久久鬼色| 另类小说欧美激情| 美女国产一区二区| 青青草伊人久久| 肉色丝袜一区二区| 亚洲第四色夜色| 视频一区视频二区在线观看| 亚洲综合999| 亚洲综合激情网| 亚洲丰满少妇videoshd| 亚洲综合精品久久| 亚洲成在线观看| 午夜精品久久久久久久蜜桃app| 亚洲电影激情视频网站| 亚洲成人手机在线| 日本伊人精品一区二区三区观看方式| 午夜亚洲国产au精品一区二区| 亚洲大片精品永久免费| 视频一区欧美精品| 蜜桃视频在线观看一区| 狠狠久久亚洲欧美| 国产91精品免费| 不卡av在线网| 99riav一区二区三区| 色综合久久久久久久久| 色噜噜夜夜夜综合网| 欧美体内she精高潮| 5858s免费视频成人| 精品国产免费久久| 中文字幕欧美日韩一区| 亚洲男人都懂的| 五月婷婷色综合|