亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
一区二区三区四区激情| 91精品国产综合久久精品麻豆| 免费高清不卡av| 人妖欧美一区二区| 青青草伊人久久| 久久66热re国产| 国内成人免费视频| 91在线视频18| 欧美日韩一区二区欧美激情| 欧美亚洲图片小说| 日韩一区二区三区电影在线观看| 欧美一区二区三区视频| 一本到不卡免费一区二区| 日韩影院精彩在线| 精品写真视频在线观看| 成人精品电影在线观看| 色噜噜久久综合| 欧美电影免费提供在线观看| 国产欧美日本一区二区三区| ㊣最新国产の精品bt伙计久久| 婷婷成人综合网| 丰满白嫩尤物一区二区| 欧美日韩黄色一区二区| 精品捆绑美女sm三区| 亚洲素人一区二区| 精品在线你懂的| 在线成人免费观看| 中文字幕一区免费在线观看| 美日韩一区二区三区| 91视频你懂的| 欧美国产成人在线| 捆绑调教一区二区三区| 91老司机福利 在线| 国产欧美精品区一区二区三区| 亚洲一区二区综合| 91美女视频网站| 亚洲日本在线a| 97精品国产露脸对白| 久久尤物电影视频在线观看| 日韩国产在线观看一区| 91成人在线免费观看| 有坂深雪av一区二区精品| 成人深夜福利app| 国产精品免费视频观看| av中文字幕不卡| 一区二区三区自拍| 欧美在线观看一区二区| 2024国产精品| 免费在线看成人av| 欧美一区三区四区| 国产乱人伦偷精品视频不卡| 久久久青草青青国产亚洲免观| 日本亚洲一区二区| 2023国产精品视频| 成人免费视频网站在线观看| 成人免费一区二区三区在线观看| 91在线视频播放地址| 亚洲第一电影网| 久久嫩草精品久久久久| 97精品电影院| 日本 国产 欧美色综合| 久久精品一区二区三区av| 色综合婷婷久久| 精品中文字幕一区二区| 国产精品成人免费| 欧美一卡2卡3卡4卡| 波多野结衣亚洲一区| 午夜精品久久久久影视| 国产日韩欧美不卡| 欧美色图12p| 99视频一区二区| 国产高清不卡一区二区| 亚瑟在线精品视频| 亚洲天堂精品在线观看| 久久香蕉国产线看观看99| 欧美视频在线一区二区三区| 丁香天五香天堂综合| 美女看a上一区| 亚洲成av人片| 亚洲精品videosex极品| 国产欧美一区二区精品婷婷| 精品理论电影在线观看| 欧美另类z0zxhd电影| 欧美天堂一区二区三区| 日本中文字幕一区| 精品国产三级电影在线观看| 欧美三级日韩三级国产三级| 色综合久久久久| 色视频一区二区| 欧美日韩免费视频| 在线观看av不卡| 欧美高清视频一二三区 | 日本韩国精品一区二区在线观看| 国产白丝精品91爽爽久久| 国产在线一区二区| 成人午夜精品在线| 99久久免费视频.com| 99久久婷婷国产综合精品| 欧美午夜精品电影| 欧美不卡一区二区三区四区| 日韩精品一区二区三区中文不卡| 精品久久人人做人人爰| 国产精品久久久久久一区二区三区| 中文字幕精品一区二区精品绿巨人 | 99re亚洲国产精品| 在线观看日韩一区| 精品不卡在线视频| 亚洲欧美另类图片小说| 麻豆成人av在线| 色老综合老女人久久久| 日韩欧美成人午夜| 亚洲国产精品黑人久久久| 亚洲国产成人tv| 不卡影院免费观看| 久久综合狠狠综合| 日韩国产欧美在线播放| 国产成人av电影在线观看| 豆国产96在线|亚洲| 欧美一区二区视频在线观看| 日本一二三不卡| 国产成人av影院| 日日摸夜夜添夜夜添国产精品| 蜜臀99久久精品久久久久久软件| 91在线无精精品入口| 欧美精品一区二区久久婷婷| 亚洲免费在线看| proumb性欧美在线观看| 欧美mv和日韩mv国产网站| 日韩精品亚洲专区| 欧美日韩国产一级| 爽好久久久欧美精品| 欧美午夜影院一区| 亚洲综合免费观看高清完整版在线| 国产毛片精品视频| 久久免费的精品国产v∧| 国产精品一区专区| 国产欧美日韩久久| 成人高清免费在线播放| 日本一区二区不卡视频| 成人av资源在线| 亚洲免费观看高清完整| 欧美在线观看视频在线| 亚洲福利一区二区| 精品国产免费久久| av电影一区二区| 婷婷综合在线观看| 久久亚洲一级片| 99精品桃花视频在线观看| 一区二区三区四区高清精品免费观看 | 美女脱光内衣内裤视频久久网站 | 亚洲国产精品一区二区尤物区| 色狠狠一区二区三区香蕉| 亚洲大型综合色站| 国产欧美一区二区在线观看| 91香蕉视频污在线| 加勒比av一区二区| 一区二区三区影院| 国产精品久久久久久户外露出 | 国产酒店精品激情| 一区二区三区自拍| 国产三级欧美三级| 91麻豆精品国产自产在线观看一区| 国产麻豆成人传媒免费观看| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 国产精一品亚洲二区在线视频| 亚洲欧美日韩综合aⅴ视频| 日韩一区二区三区在线视频| 99久久精品免费精品国产| 韩国成人精品a∨在线观看| 亚洲第一综合色| 亚洲欧美成人一区二区三区| 久久久久久99精品| 91 com成人网| 91精品国产欧美一区二区成人| 99视频一区二区| 91在线你懂得| 欧美私模裸体表演在线观看| 色先锋aa成人| 91国产精品成人| 在线观看亚洲精品| 欧美日韩国产高清一区二区| 欧美日韩一二区| 欧美精品丝袜久久久中文字幕| 色欧美日韩亚洲| 欧美亚洲禁片免费| 日韩一区二区三区高清免费看看| 欧美日韩中文字幕精品| 日韩欧美视频一区| 亚洲精品一区二区三区香蕉 | 日产欧产美韩系列久久99| 亚洲一区二区三区在线播放 | 91影视在线播放| 欧美日韩夫妻久久| 久久久青草青青国产亚洲免观| 91老师国产黑色丝袜在线| 99re成人在线| 制服丝袜中文字幕一区| 久久一夜天堂av一区二区三区| 国产亚洲成av人在线观看导航| 亚洲日本免费电影|