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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? spectrumtimeanalyzer.java

?? mp3播放功能
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
package MP3;

import java.awt.Color;
import java.awt.Cursor;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;
import javax.sound.sampled.SourceDataLine;
import javax.swing.JPanel;

import kj.dsp.KJDigitalSignalProcessingAudioDataConsumer;
import kj.dsp.KJDigitalSignalProcessor;
import kj.dsp.KJFFT;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * This class implements interface KJDigitalSignalProcessor in order to be registered with the 
 * KJDigitalSignalProcessingAudioDataConsumer class .The class is designed to draw peaks
 * when the player is playing a song.The code is made reference to other mp3 player. 
 * 
 * 
 */

public class SpectrumTimeAnalyzer extends JPanel implements KJDigitalSignalProcessor
{
    private static Log log = LogFactory.getLog(SpectrumTimeAnalyzer.class);
    public static final int DISPLAY_MODE_SCOPE = 0;
    public static final int DISPLAY_MODE_SPECTRUM_ANALYSER = 1;
    public static final int DISPLAY_MODE_OFF = 2;
    public static final int DEFAULT_WIDTH = 256;
    public static final int DEFAULT_HEIGHT = 128;
    public static final int DEFAULT_FPS = 50;
    public static final int DEFAULT_SPECTRUM_ANALYSER_FFT_SAMPLE_SIZE = 512;
    public static final int DEFAULT_SPECTRUM_ANALYSER_BAND_COUNT = 19;
    public static final float DEFAULT_SPECTRUM_ANALYSER_DECAY = 0.05f;
    public static final int DEFAULT_SPECTRUM_ANALYSER_PEAK_DELAY = 20;
    public static final float DEFAULT_SPECTRUM_ANALYSER_PEAK_DELAY_FPS_RATIO = 0.4f;
    public static final float DEFAULT_SPECTRUM_ANALYSER_PEAK_DELAY_FPS_RATIO_RANGE = 0.1f;
    public static final float MIN_SPECTRUM_ANALYSER_DECAY = 0.02f;
    public static final float MAX_SPECTRUM_ANALYSER_DECAY = 0.08f;
    public static final Color DEFAULT_SCOPE_COLOR = new Color(255, 128, 192);
    public static final float DEFAULT_VU_METER_DECAY = 0.02f;
    private Image bi;
    private int displayMode = DISPLAY_MODE_SPECTRUM_ANALYSER;
    private Color scopeColor = DEFAULT_SCOPE_COLOR;
    private Color[] spectrumAnalyserColors = getDefaultSpectrumAnalyserColors();
    private KJDigitalSignalProcessingAudioDataConsumer dsp = null;
    private boolean dspStarted = false;
    private Color peakColor = null;
    private int[] peaks = new int[DEFAULT_SPECTRUM_ANALYSER_BAND_COUNT];
    private int[] peaksDelay = new int[DEFAULT_SPECTRUM_ANALYSER_BAND_COUNT];
    private int peakDelay = DEFAULT_SPECTRUM_ANALYSER_PEAK_DELAY;
    private boolean peaksEnabled = true;
    private int barOffset = 1;
    private int width;
    private int height;
    private int height_2;
    // -- Spectrum analyser variables.
    private KJFFT fft;
    private float[] old_FFT;
    private int saFFTSampleSize;
    private int saBands;
    private float saColorScale;
    private float saMultiplier;
    private float saDecay = DEFAULT_SPECTRUM_ANALYSER_DECAY;
    private SourceDataLine m_line = null;
    // -- VU Meter
    private float oldLeft;
    private float oldRight;
    private float vuDecay = DEFAULT_VU_METER_DECAY;
    private float vuColorScale;
    // -- FPS calulations.
    private long lfu = 0;
    private int fc = 0;
    private int fps = DEFAULT_FPS;
    private boolean showFPS = false;
    
 

    //  private Runnable PAINT_SYNCHRONIZER = new AWTPaintSynchronizer();
    public SpectrumTimeAnalyzer()
    {
        setOpaque(false);
        initialize();
    }

    
    /**
	 * Method to see if the peaks can be displayed.
	 * 
	 * @return Returns whether the peaks is enabled or not.
	 */
    
    public boolean isPeaksEnabled()
    {
        return peaksEnabled;
    }

    /**
	 * Method to set peaks' state.
	 * 
	 * @param peaksEnabled
	 *               the state of peaks
	 */
    public void setPeaksEnabled(boolean peaksEnabled)
    {
        this.peaksEnabled = peaksEnabled;
    }

    /**
	 * Method to get the value of FPS.
	 * 
	 * @return Returns the FPS
	 */
    public int getFps()   
    {
        return fps;
    }

    /**
     * Method to set the value of FPS
     * 
     * @param fps
     */
    public void setFps(int fps)   //設置每秒的幀數
    {
        this.fps = fps;
    }

    /**
     * Method to start DSP when a song is playing.
     * @param line
     */
    public void startDSP(SourceDataLine line)
    {
        if (displayMode == DISPLAY_MODE_OFF) return;
        if (line != null) m_line = line;
        if (dsp == null)
        {
            dsp = new KJDigitalSignalProcessingAudioDataConsumer(2048, fps);
            dsp.add(this);
        }
        if ((dsp != null) && (m_line != null))
        {
            if (dspStarted == true)
            {
                stopDSP();
            }
            dsp.start(m_line);
            dspStarted = true;
            log.debug("DSP started");
        }
    }

    /**
     * Method to stop DSP when no song is playing.
     */
    public void stopDSP()
    {
        if (dsp != null)
        {
            dsp.stop();
            dspStarted = false;
            log.debug("DSP stopped");
        }
    }

    /**
     * Method to close DSP when there is no need to use it.
     */
    public void closeDSP()
    {
        if (dsp != null)
        {
            stopDSP();
            dsp = null;
            log.debug("DSP closed");
        }
    }

    /**
     * Menthod to setup DSP.
     * @param line
     */
    public void setupDSP(SourceDataLine line)
    {
        if (dsp != null)
        {
            int channels = line.getFormat().getChannels();
            if (channels == 1) dsp.setChannelMode(KJDigitalSignalProcessingAudioDataConsumer.CHANNEL_MODE_MONO);
            else dsp.setChannelMode(KJDigitalSignalProcessingAudioDataConsumer.CHANNEL_MODE_STEREO);
            int bits = line.getFormat().getSampleSizeInBits();
            if (bits == 8) dsp.setSampleType(KJDigitalSignalProcessingAudioDataConsumer.SAMPLE_TYPE_EIGHT_BIT);
            else dsp.setSampleType(KJDigitalSignalProcessingAudioDataConsumer.SAMPLE_TYPE_SIXTEEN_BIT);
        }
    }

    /**
     * Method to write PCM data to DSP.
     * @param pcmdata
     */
    public void writeDSP(byte[] pcmdata)
    {
        if ((dsp != null) && (dspStarted == true)) dsp.writeAudioData(pcmdata);
    }

    /**
     * Method to return DSP.
     * @return Returns DSP
     */
    public KJDigitalSignalProcessingAudioDataConsumer getDSP()
    {
        return dsp;
    }

    /**
     * Set visual colors from skin.
     * @param viscolor
     */
    public void setVisColor(String viscolor)
    {
        ArrayList visColors = new ArrayList();
        viscolor = viscolor.toLowerCase();
        ByteArrayInputStream in = new ByteArrayInputStream(viscolor.getBytes());
        BufferedReader bin = new BufferedReader(new InputStreamReader(in));
        try
        {
            String line = null;
            while ((line = bin.readLine()) != null)
            {
                visColors.add(getColor(line));
            }
            Color[] colors = new Color[visColors.size()];
            visColors.toArray(colors);
            Color[] specColors = new Color[15];
            System.arraycopy(colors, 2, specColors, 0, 15);
            List specList = Arrays.asList(specColors);
            Collections.reverse(specList);
            specColors = (Color[]) specList.toArray(specColors);
            setSpectrumAnalyserColors(specColors);
            setBackground((Color) visColors.get(0));
            if (visColors.size()>23) setPeakColor((Color) visColors.get(23));
            if (visColors.size()>18) setScopeColor((Color) visColors.get(18));
        }
        catch (IOException ex)
        {
            log.warn("Cannot parse viscolors", ex);
        }
        finally
        {
            try
            {
                if (bin != null) bin.close();
            }
            catch (IOException e)
            {
            }
        }
    }

    /**
     * Set visual peak color.
     * @param c
     */
    public void setPeakColor(Color c)
    {
        peakColor = c;
    }

    /**
     * Set peak falloff delay.
     * @param framestowait
     */
    public void setPeakDelay(int framestowait)
    {
        int min = (int) Math.round((DEFAULT_SPECTRUM_ANALYSER_PEAK_DELAY_FPS_RATIO - DEFAULT_SPECTRUM_ANALYSER_PEAK_DELAY_FPS_RATIO_RANGE) * fps);
        int max = (int) Math.round((DEFAULT_SPECTRUM_ANALYSER_PEAK_DELAY_FPS_RATIO + DEFAULT_SPECTRUM_ANALYSER_PEAK_DELAY_FPS_RATIO_RANGE) * fps);
        if ((framestowait >= min) && (framestowait <= max))
        {
            peakDelay = framestowait;
        }
        else
        {
            peakDelay = (int) Math.round(DEFAULT_SPECTRUM_ANALYSER_PEAK_DELAY_FPS_RATIO * fps);
        }
    }

    /**
     * Return peak falloff delay
     * @return int framestowait
     */
    public int getPeakDelay()
    {
        return peakDelay;
    }

    /**
     * Convert string to color.
     * @param linecolor
     * @return Returns the Color converted from string
     */
    public Color getColor(String linecolor)
    {
        Color color = Color.BLACK;
        StringTokenizer st = new StringTokenizer(linecolor, ",");
        int red = 0, green = 0, blue = 0;
        try
        {
            if (st.hasMoreTokens()) red = Integer.parseInt(st.nextToken().trim());
            if (st.hasMoreTokens()) green = Integer.parseInt(st.nextToken().trim());
            if (st.hasMoreTokens())
            {
                String blueStr = st.nextToken().trim();
                if (blueStr.length() > 3) blueStr = (blueStr.substring(0, 3)).trim();
                blue = Integer.parseInt(blueStr);
            }
            color = new Color(red, green, blue);
        }
        catch (NumberFormatException e)
        {
            log.debug("Cannot parse viscolor : "+e.getMessage());
        }
        return color;
    }

    /** 
     * Set the mathematical formula to calculate the Spectrum analyser Color Scale 
     * and the VU Meter Color Scale.
     *
     */
    private void computeColorScale()
    {
        saColorScale = ((float) spectrumAnalyserColors.length / height) * barOffset * 1.0f;
        vuColorScale = ((float) spectrumAnalyserColors.length / (width - 32)) * 2.0f;
    }

    /**
     * Set the mathematical formula to calculate the Spectrum analyser Multiplier.
     *
     */
    private void computeSAMultiplier()
    {
        saMultiplier = (saFFTSampleSize / 2) / saBands;
    }

    /**
     * Method to draw the Scope.
     * 
     * @param pGrp
     * @param pSample
     */
    private void drawScope(Graphics pGrp, float[] pSample)
    {
        pGrp.setColor(scopeColor);
        int wLas = (int) (pSample[0] * (float) height_2) + height_2;
        int wSt = 2;
        for (int a = wSt, c = 0; c < width; a += wSt, c++)
        {
            int wAs = (int) (pSample[a] * (float) height_2) + height_2;
            pGrp.drawLine(c, wLas, c + 1, wAs);
            wLas = wAs;
        }
    }

    /**
     * Method to draw the SpectrumAnalyzer.
     * 
     * @param pGrp
     * @param pSample
     * @param pFrrh
     */
    private void drawSpectrumAnalyser(Graphics pGrp, float[] pSample, float pFrrh)
    {
        float c = 0;
        float[] wFFT = fft.calculate(pSample);
        float wSadfrr = (saDecay * pFrrh);
        float wBw = ((float) width / (float) saBands);
        for (int a = 0, bd = 0; bd < saBands; a += saMultiplier, bd++)
        {
            float wFs = 0;
            // -- Average out nearest bands.
            for (int b = 0; b < saMultiplier; b++)
            {
                wFs += wFFT[a + b];
            }
            // -- Log filter.
            wFs = (wFs * (float) Math.log(bd + 2));
            if (wFs > 1.0f)
            {
                wFs = 1.0f;
            }
            // -- Compute SA decay...
            if (wFs >= (old_FFT[a] - wSadfrr))
            {
                old_FFT[a] = wFs;
            }
            else
            {
                old_FFT[a] -= wSadfrr;
                if (old_FFT[a] < 0)
                {
                    old_FFT[a] = 0;
                }
                wFs = old_FFT[a];
            }
            drawSpectrumAnalyserBar(pGrp, (int) c, height, (int) wBw - 1, (int) (wFs * height), bd);
            c += wBw;
        }
    }

    /**
     * Method to draw VU Meter 
     * 
     * @param pGrp
     * @param pLeft
     * @param pRight
     * @param pFrrh

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
这里只有精品视频在线观看| 久久精品国产秦先生| 成人午夜电影小说| 国产日韩欧美激情| 99久久精品一区| 亚洲男人的天堂av| 欧美色图激情小说| 麻豆精品一二三| 日本一区二区不卡视频| 99视频在线精品| 午夜激情一区二区三区| 欧美成人精品高清在线播放| 国产一区二区三区不卡在线观看| 国产精品麻豆一区二区| 在线免费观看日韩欧美| 三级在线观看一区二区| 精品国精品自拍自在线| av在线不卡观看免费观看| 亚洲与欧洲av电影| 精品剧情在线观看| av午夜一区麻豆| 亚洲成av人片观看| 久久女同精品一区二区| 色综合久久久久| 久久国产精品第一页| 亚洲欧洲一区二区在线播放| 欧美日韩激情在线| 成人激情小说乱人伦| 天天射综合影视| 国产精品久久久久aaaa| 欧美欧美午夜aⅴ在线观看| 狠狠色2019综合网| 一区二区三区中文字幕精品精品| 日韩写真欧美这视频| av在线综合网| 国产一区二区三区四区五区入口| 亚洲国产成人精品视频| 久久尤物电影视频在线观看| 在线看一区二区| 高清视频一区二区| 麻豆一区二区在线| 亚洲成人久久影院| 国产精品入口麻豆九色| 日韩精品一区二区三区四区 | 久久电影网电视剧免费观看| 亚洲欧美一区二区三区国产精品| 欧美人与禽zozo性伦| 91在线一区二区三区| 国产一区999| 免费在线观看成人| 亚洲一区自拍偷拍| 国产精品欧美一区喷水| 欧美成人一级视频| 欧美一区二区视频网站| 欧美亚洲精品一区| 91在线视频播放| 国产91精品一区二区麻豆网站 | 国产精品网站在线观看| 欧美成人午夜电影| 日韩视频中午一区| 欧美美女视频在线观看| 91福利在线导航| 97久久超碰国产精品电影| 成人激情开心网| 成人免费视频网站在线观看| 国产精品1区2区3区在线观看| 毛片基地黄久久久久久天堂| 天堂蜜桃一区二区三区| 石原莉奈在线亚洲二区| 日本中文字幕一区二区视频| 亚洲福利国产精品| 婷婷久久综合九色国产成人| 亚洲一级在线观看| 天天色图综合网| 蜜臀精品久久久久久蜜臀| 日本欧美一区二区三区| 欧美aaaaa成人免费观看视频| 欧美a一区二区| 久久成人免费日本黄色| 粉嫩一区二区三区性色av| 国产激情精品久久久第一区二区| 国产一区二区三区日韩| 国产精品99久久久久久久女警| 国产综合成人久久大片91| 久久99国内精品| 国产精品亚洲一区二区三区在线| 国产一区高清在线| 成人性色生活片免费看爆迷你毛片| 成人午夜电影久久影院| 色婷婷激情综合| 欧美日韩亚洲综合一区二区三区| 欧美日韩高清影院| 精品少妇一区二区三区免费观看| 久久青草欧美一区二区三区| 国产精品区一区二区三| 一区二区三区91| 日韩成人一级大片| 国产一区二区在线观看视频| 粉嫩13p一区二区三区| 91在线观看高清| 欧美日韩国产综合一区二区三区| 精品日韩av一区二区| 国产精品成人一区二区艾草 | 国产jizzjizz一区二区| 91在线视频播放地址| 色婷婷国产精品综合在线观看| 欧美日韩国产一区| 26uuu色噜噜精品一区二区| 国产精品久久久久婷婷| 水野朝阳av一区二区三区| 国产一区视频导航| 色诱视频网站一区| 日韩一区二区免费在线电影| 中文字幕制服丝袜成人av| 亚洲不卡一区二区三区| 国产福利一区二区| 欧美特级限制片免费在线观看| 欧美xxxxx裸体时装秀| 日韩一区在线免费观看| 免费成人在线观看| 色狠狠色狠狠综合| 久久综合九色综合久久久精品综合| 亚洲欧美在线观看| 国产自产高清不卡| 欧洲亚洲国产日韩| 国产性色一区二区| 日韩国产欧美三级| 91婷婷韩国欧美一区二区| 日韩午夜中文字幕| 一区二区久久久久久| 国产一区二区影院| 欧美老肥妇做.爰bbww| 中文字幕日本乱码精品影院| 蜜臀久久99精品久久久画质超高清| 91在线观看地址| 欧美激情一区二区三区在线| 三级亚洲高清视频| 色婷婷av久久久久久久| 国产喷白浆一区二区三区| 日韩电影免费在线看| 色婷婷精品久久二区二区蜜臀av| 久久久久久电影| 精品在线观看免费| 欧美精品在线一区二区三区| 亚洲男人的天堂网| 99久久精品一区| 国产精品丝袜久久久久久app| 毛片基地黄久久久久久天堂| 国产三级精品在线| 石原莉奈在线亚洲二区| 在线亚洲高清视频| 中文字幕佐山爱一区二区免费| 国产伦理精品不卡| 日韩欧美一级二级三级| 日韩国产欧美在线播放| 欧美日本韩国一区| 亚洲成av人片观看| 欧美日本一道本在线视频| 亚洲一二三四区| 欧美怡红院视频| 亚洲精品成a人| 日本高清不卡aⅴ免费网站| 中文字幕人成不卡一区| 91视频com| 亚洲精品日韩一| 91精品办公室少妇高潮对白| 中文字幕一区在线观看视频| 成人av免费网站| 国产精品白丝在线| 99re视频这里只有精品| 中文字幕制服丝袜一区二区三区 | 精品在线播放午夜| wwwwxxxxx欧美| 国产在线不卡一区| 久久精品无码一区二区三区| 国产精品一区二区三区四区| 欧美国产禁国产网站cc| 成人av在线播放网址| 亚洲欧美国产高清| 欧美视频在线观看一区二区| 性感美女久久精品| 欧美一区二区免费观在线| 精品一区二区免费看| 久久久久久麻豆| 91视频在线看| 天天色天天操综合| 久久日韩粉嫩一区二区三区 | 久久99精品久久久久久久久久久久| 日韩三级高清在线| 国产激情一区二区三区桃花岛亚洲 | 激情综合色综合久久| 国产欧美一区二区精品婷婷 | 欧美在线999| 久久丁香综合五月国产三级网站| 欧美激情资源网| 欧美色区777第一页| 久久国产福利国产秒拍| 国产欧美日韩麻豆91| 色老汉一区二区三区| 裸体健美xxxx欧美裸体表演|