⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 audioview.java

📁 Applet录音机源码,Java程序
💻 JAVA
字号:
package sunstudio.record.au.userinterface;

import java.awt.*;

public class AudioView extends Canvas{
	
	int len=30;
	int[] wavedata=new int[len];
	int ptr=-1;
	int minValue=0;
	int viewtype=0;//0-frq,1-wave1,2-wave2;3,frq1
	int xxx=0;
	String playtime="00:00:00";
	boolean isfull=false;
	
	int frqlen=10;
	double[] frq=new double[frqlen];
	double[] mfrq=new double[frqlen];
	int[] times=new int[frqlen];
	
	Graphics offgra=null;
	Image offimg=null;
	Image m=null,fff=null;
	boolean requestUpdate=false;

	public AudioView(Image img,Image ff){
		for(int i=0;i<len;i++)wavedata[i]=36;
		setBackground(Color.black);
		this.m=img;
		this.fff=ff;
	}
	public void setView(byte[] wd,String playtime){

		xxx++;
		if(xxx<(modifyViewtype(false)==0||modifyViewtype(false)==3?2:3))return;
		xxx=0;
		this.playtime=playtime;
		if(modifyViewtype(false)==0||modifyViewtype(false)==3){
			calcParam(wd,80);
		}else{
			this.minValue=(int)(Au2Wave(wd[49])+Au2Wave(wd[99])+Au2Wave(wd[159]))/3;
			ptr=ptr+1;
			if(ptr>=len)isfull=true;
			ptr%=len;
			this.wavedata[ptr]=36+(int)(getBL()*72D);
		}
		repaint();
	}
	public void setView(int[] wd,String playtime){
		this.playtime=playtime;
		if(modifyViewtype(false)==0||modifyViewtype(false)==3){
			calcParam(wd,80);
		}else{
			this.minValue=(wd[49]+wd[99]+wd[159])/3;
			ptr=ptr+1;
			if(ptr>=len)isfull=true;
			ptr%=len;
			this.wavedata[ptr]=36+(int)(getBL()*72D);
		}
		repaint();
	}
	public double getBL(){
		return (((double)minValue/-32768D));
	}
    void calcParam(int ad[],int j){
        double d2=0.0D;
        double d4=0.0D;
        double d6=6.2831853071795862D/(double)j;
        for(int l=0;l<j;l++)d2+=(double)ad[l*2]*d6;
        frq[0]=Math.abs(d2/6.2831853071795862D)/2D;
		updateMaxFrq(0);
        for(int k=1;k<frqlen;k++){
            double d3=0.0D;
            double d5=0.0D;
            for(int i1=0;i1<j;i1++){
                double d1=(double)k*d6*(double)(i1-j/2);
                double d=ad[i1*2]*d6;
                d3+=d*Math.cos(d1);
                d5+=d*Math.sin(d1);
            }
            frq[k]=Math.sqrt((d3*d3+d5*d5)*0.10132118364233778D);
			updateMaxFrq(k);
        }
	}
   static double Au2Wave(byte byte0){
        byte0^=0xff;
        int i=((byte0&0xf)<<3)+132;
        i<<=(byte0&0x70)>>4;
        if((byte0&0x80)==0)return (double)(132-i);
        else return (double)(i-132);
    }
	void calcParam(byte ad[],int j){
        double d2=0.0D;
        double d4=0.0D;
        double d6=6.2831853071795862D/(double)j;
        for(int l=0;l<j;l++)d2+=Au2Wave(ad[l*2+1])*d6;
        frq[0]=Math.abs(d2/6.2831853071795862D)/2D;
		updateMaxFrq(0);
        for(int k=1;k<frqlen;k++){
            double d3=0.0D;
            double d5=0.0D;
            for(int i1=0;i1<j;i1++){
                double d1=(double)k*d6*(double)(i1-j/2);
                double d=Au2Wave(ad[i1*2+1])*d6;
                d3+=d*Math.cos(d1);
                d5+=d*Math.sin(d1);
            }
            frq[k]=Math.sqrt((d3*d3+d5*d5)*0.10132118364233778D);
			updateMaxFrq(k);
        }
	}
	void updateMaxFrq(int index){
		frq[index]=Math.min(26000,frq[index]);
		
		if(frq[index]>mfrq[index]){
			mfrq[index]=frq[index];
			times[index]=0;
		}else{
			times[index]++;
			if(times[index]>2)mfrq[index]-=1500*(times[index]-3);
		}		
	}
	public void paint(Graphics g){
		if(offimg==null){
			offimg=createImage(236,72);
			offgra=offimg.getGraphics();
		}
		if(offgra==null)return;
		offgra.clearRect(0,0,236,72);
		try{
			if(modifyViewtype(false)==0||modifyViewtype(false)==3)drawFrq(offgra);
			else drawWave(offgra);
		}catch(Exception e){}
		offgra.setColor(Color.yellow);
		offgra.drawString(playtime,10,12);
		g.drawImage(offimg,0,0,this);
	}
	public void drawFrq(Graphics g) throws Exception{
		g.drawImage(m,0,0,this);
		int w=236/frqlen;
		for(int i=0;i<frqlen;i++){
			int h=(int)(frq[i]*72)/28000;
			int hm=(int)(mfrq[i]*72)/28000;
			g.setColor(Color.black);
			g.fillRect(i*w,0,10,72);//分割
			g.fillRect(i*w,0,w,72-h);
			if(modifyViewtype(false)==0){
				g.setColor(Color.lightGray);
				g.fillRect(i*w+10,69-hm,w,2);
			}else g.drawImage(fff,i*w+10+1,69-hm,this);
		}
		g.setColor(Color.black);
		g.fillRect(228,0,w,72);
	}
	public void drawWave(Graphics g) throws Exception{
		if(modifyViewtype(false)==1){
			g.setColor(Color.red);
			g.drawLine(0,36,236,36);
		}
		g.setColor(Color.green);
		int col=0;
		if(ptr==len-1){
			for(int i=1;i<len;i++){
				_draw(g,i*236/len,wavedata[i],(i+1)*236/len,wavedata[(i+1)%len]);
			}
		}else{
			if(ptr==0&&isfull){
				for(int i=1;i<len-1;i++){
					_draw(g,col*236/len,wavedata[i],(col+1)*236/len,wavedata[(i+1)%len]);
					col++;
				}
				_draw(g,col*236/len,wavedata[0],(col+1)*236/len,wavedata[len-1]);
			}else{
				if(!isfull){
					for(int i=ptr;i>1;i--){
						_draw(g,(len-col)*236/len,wavedata[i],(len-col-1)*236/len,wavedata[i-1]);
						col++;
					}
					return;
				}
				for(int i=ptr+1;i<len;i++){
					_draw(g,col*236/len,wavedata[i],(col+1)*236/len,wavedata[(i+1)%len]);
					col++;
				}		
				for(int i=0;i<=ptr;i++){
					_draw(g,col*236/len,wavedata[i],(col+1)*236/len,wavedata[i+1]);
					col++;
				}
			}
		}		
	}
	public boolean mouseUp(Event evt,int x,int y){
		modifyViewtype(true);
		return false;
	}
	synchronized int modifyViewtype(boolean mod){
		if(mod){
			viewtype++;
			viewtype%=4;
		}
		return viewtype;
	}
	void _draw(Graphics g,int x1,int y1,int x2,int y2){
		if(modifyViewtype(false)==1)g.drawLine(x1,y1,x2,y2);
		else g.drawLine(x1,y1,x1,72);
	}
	public void update(Graphics g){
		paint(g);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -