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

📄 audiopanel.java

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

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import sunstudio.util.*;
import sunstudio.file.*;
import sunstudio.codec.au.*;
import sunstudio.record.au.audio.play.*;
import sunstudio.record.au.audio.capture.*;
import sunstudio.record.au.audio.*;
import sunstudio.mediaload.*;
import sunstudio.userinterface.button.*;
import sunstudio.userinterface.*;

public class AudioPanel extends Panel implements MouseListener,MouseMotionListener,ImgBtnListener,AudioDataListener,ParameterSet,AudioPlayListener{
	
	int						AUDIO_NOSIGNAL=0;						//没有信号
	int						AUDIO_PLAYING=1;						//播放模式
	int						AUDIO_RECORD=2;							//录音模式
	int						AUDIO_PLAY_PAUSE=3;						//放音暂停模式
	int						AUDIO_RECORD_PAUSE=4;					//录音暂停模式
	Image					bgimg,block;							//背景图片和播放位置块
	ImgBtn					btnPlay,btnPause,btnRecord,btnStop,btnUpload;		//控制按钮
	AudioView				audioview=null;							//音频波形显示
	AudioPlayer				player=null;							//CTF格式音频播放器
	AudioCapture			capture=null;							//音频采集器
	MediaLoader				ml=null;								//媒体装载器
	int						workMode=0;								//工作模式
	BufferedOutputStream	fos=null;								//文件写缓冲流
	BufferedInputStream		fis=null;								//文件读缓冲流
	InputStream				playstream=null;						//播放数据流
	AuReader				rr=new AuReader();						//CTF文件解析器
	AuWriter				ww=new AuWriter();						//CTF文件生成器
	byte[]					audiodata=new byte[800];				//录音数据显示
	int						r_microsec=0;							//录音毫秒数
	int						r_bCount=0;								//录音写入字节数
	int						p_microsec=0;							//放音总毫秒数
	int						p_curtime=0;							//当前播放毫秒数
	String filename=System.getProperty("com.ms.windir")+System.getProperty("file.separator")+"temp"+System.getProperty("file.separator")+"1.tmp";
	String filename1=System.getProperty("com.ms.windir")+System.getProperty("file.separator")+"temp"+System.getProperty("file.separator")+"1.au";
	boolean draging=false;
	boolean					hasRecord=false;
	UploadComponent			uploader=new UploadComponent();
	ClockModel				clock=new ClockModel();
				
	public AudioPanel(MediaLoader ml1){
		setLayout(null);
		this.ml=ml1;
		addMouseListener(this);
		addMouseMotionListener(this);
		
		capture=new AudioCapture();
		capture.addAudioDataListener(this);
		if(!capture.open())System.out.println("没有声卡或声卡正在占用!");
		player=new AudioPlayer();
		player.addAudioPlayListener(this);
		
		bgimg=ml.loadImage("bgimg.gif");
		block=ml.loadImage("block.gif");

		audioview=new AudioView(ml.loadWaveFormImage(),ml.loadImage("flag.gif"));
		audioview.setBounds(viewRect.x,viewRect.y,viewRect.width,viewRect.height);
		add(audioview);
		
		btnPlay=new ImgBtn(ml.loadImage("2b.gif"),ml.loadImage("2c.gif"),ml.loadImage("2a.gif"),ml.loadImage("2d.gif"));
		btnPlay.setLocation(playRect.x-29,playRect.y);
		add(btnPlay);
		btnPause=new ImgBtn(ml.loadImage("3b.gif"),ml.loadImage("3c.gif"),ml.loadImage("3a.gif"),ml.loadImage("3d.gif"));
		btnPause.setLocation(pauseRect.x-25,pauseRect.y);
		add(btnPause);
		btnRecord=new ImgBtn(ml.loadImage("4b.gif"),ml.loadImage("4c.gif"),ml.loadImage("4a.gif"),ml.loadImage("4d.gif"));
		btnRecord.setLocation(recordRect.x-21,recordRect.y);
		add(btnRecord);
		btnStop=new ImgBtn(ml.loadImage("6b.gif"),ml.loadImage("6c.gif"),ml.loadImage("6a.gif"),ml.loadImage("6d.gif"));
		btnStop.setLocation(stopRect.x-17,stopRect.y);
		add(btnStop);
		
		btnUpload=new ImgBtn(ml.loadImage("7b.gif"),ml.loadImage("7c.gif"),ml.loadImage("7a.gif"),ml.loadImage("7d.gif"));
		btnUpload.setLocation(uploadRect.x-13,uploadRect.y);
		add(btnUpload);
				  
		btnStop.setEnabled(false);
		btnPause.setEnabled(false);
		btnUpload.setEnabled(false);
		
		btnRecord.addImgBtnListener(this);
		btnPlay.addImgBtnListener(this);
		btnPause.addImgBtnListener(this);
		btnStop.addImgBtnListener(this);
		btnUpload.addImgBtnListener(this);
	}
	public void paint(Graphics g){
		g.drawImage(bgimg,0,0,this);
		g.drawImage(block,pb.x,blockRect.y,this);
	}
	public void update(Graphics g){paint(g);}
	void resetRecordParameter(){
		r_bCount=0;
		r_microsec=0;
		clock.clear();
		ww.writeBegin("阳光工作室(SunStudio)制作");
	}
	public void close(){
		try{
			capture.close();
			System.out.println("声音俘获正常关闭");
		}catch(Exception e){e.printStackTrace();}	
		try{
			player.stop_play();
			player.close();
			System.out.println("声音播放正常关闭");
		}catch(Exception e){}
	}
	void resetPlayParameter(){
		p_curtime=0;
		p_microsec=0;
		clock.clear();
	}
	boolean isPlaying(){
		return workMode==AUDIO_PLAYING;
	}
	boolean isRecording(){
		return workMode==AUDIO_RECORD;
	}
	boolean isPlayPause(){
		return workMode==AUDIO_PLAY_PAUSE;
	}
	boolean isRecordPause(){
		return workMode==AUDIO_RECORD_PAUSE;
	}
	boolean isNoSignal(){
		return workMode==AUDIO_NOSIGNAL;
	}
	public void actionPerformed(ImgBtnEvent evt){
		if(evt.getSource().equals(btnRecord)){
			if(isNoSignal()){
				try{
					if(fos!=null){
						fos.close();
						fos=null;
					}
					fos=new BufferedOutputStream(new FileOutputStream(filename));
					resetRecordParameter();
					capture.start_record();
					workMode=AUDIO_RECORD;
					btnRecord.setEnabled(false);
					btnStop.setEnabled(true);
					btnPause.setEnabled(true);
					btnPlay.setEnabled(false);
					btnUpload.setEnabled(false);
				}catch(Exception e){e.printStackTrace();}
			}
		}else if(evt.getSource().equals(btnPlay)){
			if(isNoSignal()){
				try{
					try{
						if(fis!=null){
							fis.close();
							fis=null;
						}
					}catch(Exception e){e.printStackTrace();}
					try{
						if(playstream!=null)playstream=null;
						fis=new BufferedInputStream(new FileInputStream(filename1));
						rr.readHeader(fis);
						rr.outputHeaderInfoTo(System.out);
						resetPlayParameter();
						p_microsec=rr.getMicroSeconds();
						playstream=fis;
					}catch(Exception e){e.printStackTrace();}
					player.start_play(playstream);
					workMode=AUDIO_PLAYING;
					btnPlay.setEnabled(false);
					btnRecord.setEnabled(false);
					btnStop.setEnabled(true);
					btnPause.setEnabled(true);
					btnUpload.setEnabled(false);
				}catch(Exception e){e.printStackTrace();}
			}
		}else if(evt.getSource().equals(btnPause)){
			if(isPlaying()){
				player.suspend_play();
				this.workMode=this.AUDIO_PLAY_PAUSE;
				return;
			}			
			if(isPlayPause()){
				player.resume_play();
				this.workMode=this.AUDIO_PLAYING;
				return;
			}
			if(isRecording()){
				capture.suspend_record();
				workMode=AUDIO_RECORD_PAUSE;
				return;
			}
			if(isRecordPause()){
				capture.resume_record();
				workMode=AUDIO_RECORD;
				return;
			}
		}else if(evt.getSource().equals(btnStop)){
			if(isRecording()||isRecordPause()){
				capture.stop_record();
				try{
					ww.writeOver();
					fos.close();
					fos=null;
				}catch(Exception e){}
				try{
					FileOutputStream writer=new FileOutputStream(filename1);
					FileInputStream reader=new FileInputStream(filename);
					ww.writeHeaderTo(writer);
					byte[] content=new byte[reader.available()];
					reader.read(content);
					writer.write(content);
					writer.close();
					reader.close();
					hasRecord=true;
				}catch(Exception e){}
			}else if(isPlaying()||isPlayPause()){
				player.stop_play();
				try{
					fis.close();
					fis=null;
				}catch(Exception e){}
			}
			workMode=AUDIO_NOSIGNAL;
			btnPlay.setEnabled(true);
			btnRecord.setEnabled(true);
			btnPause.setEnabled(false);
			btnStop.setEnabled(false);
			if(hasRecord)btnUpload.setEnabled(true);
		}else if(evt.getSource().equals(btnUpload)){
		/*	if(hasRecord&&isNoSignal()){
				try{
					if(fis!=null){
						fis.close();
						fis=null;
					}
					fis=new BufferedInputStream(new FileInputStream(filename1));
					//上传语音文件
					uploader.upload2Page(fis,fis.available(),"mis1",80,ml.getParameter("uploadto"));
				}catch(Exception e){e.printStackTrace();}
			}*/
		}
	}
	public void onBtnMouseEnter(ImgBtnEvent evt){}
	public void onBtnMouseExit(ImgBtnEvent evt){}
	
	public void onAudioPlayEvent(AudioPlayEvent evt){
		try{
			if(evt.isPlayOver()){
				btnRecord.setEnabled(true);
				btnPlay.setEnabled(true);
				btnPause.setEnabled(false);
				btnStop.setEnabled(false);
				player.stop_play();
				if(hasRecord)btnUpload.setEnabled(true);
				workMode=AUDIO_NOSIGNAL;
			}else if(evt.isPlayData()){							//波形显示
				p_curtime+=50;
				clock.addMicroSeconds(50);
				if(p_curtime%200==0){
					if(!draging){
						int x=Math.min(Math.max(0,(int)(((double)p_curtime/(double)p_microsec)*190D)),228-blockRect.x);
						pb.move(blockRect.x+x,pb.y);
						repaint();
					}
				}
				audioview.setView(evt.getWaveData(),"当前播放:["+clock.getTime()+"]");
			}else if(evt.isPlayErr()){
				btnRecord.setEnabled(true);
				btnPlay.setEnabled(true);
				btnPause.setEnabled(false);
				btnStop.setEnabled(false);
				workMode=AUDIO_NOSIGNAL;
				player.stop_play();
				System.out.println("occur an error when playing!");
			}
		}catch(Exception e){}
	}
	public void onAudioDataArrived(AudioDataEvent evt){
		try{
			if(isNoSignal())return;
			int min=evt.getAudioMinValue();
			r_microsec+=100;
			clock.addMicroSeconds(100);
			if(min!=0){
				AuEncoder.encode(evt.getAudioData(),audiodata);
				//System.out.println("src length="+audiodata.length+",after compress="+Compress.compress(audiodata).length);
				fos.write(audiodata);
				ww.addSample();
				audioview.setView(audiodata,"当前录制:["+clock.getTime()+"]");
			}audioview.setView(audiodata,"当前录制:["+clock.getTime()+"]");
		}catch(Exception e){e.printStackTrace();}
	}
    public void mouseClicked(MouseEvent e){}
    public void mousePressed(MouseEvent e){
		if(!isPlaying())return;
		if(pb.contains(e.getX(),e.getY()))draging=true;
		else if(track.contains(e.getX(),e.getY())){
			int x=Math.min(Math.max(blockRect.x,e.getX()),228);
			pb.move(x,pb.y);
			repaint();
		}
	}
	void GotoPlay(int goid){
		int microid=goid;
		microid=(int)Math.floor((double)goid/50D)*50;
		player.stop_play();
		try{
			fis.close();
			fis=null;
		}catch(Exception e){}
		try{
			try{
				if(playstream!=null)playstream=null;
				fis=new BufferedInputStream(new FileInputStream(filename1));
				rr.readHeader(fis);
				resetPlayParameter();
				this.p_curtime=microid;
				this.p_microsec=rr.getMicroSeconds();
				clock.addMicroSeconds(p_curtime);
				fis.skip(microid*8);
				playstream=fis;
			}catch(Exception e){e.printStackTrace();}
			player.start_play(playstream);
			workMode=AUDIO_PLAYING;
		}catch(Exception e){e.printStackTrace();}
	}
    public void mouseReleased(MouseEvent e){
		draging=false;
		if(track.contains(e.getX(),e.getY())&&isPlaying()){
			btnStop.setEnabled(false);
			btnPause.setEnabled(false);
			int x=Math.min(Math.max(blockRect.x,e.getX()),228);
			pb.move(x,pb.y);
			repaint();
			btnStop.setEnabled(true);
			btnPause.setEnabled(true);
			GotoPlay((int)((double)p_microsec*((double)(x-blockRect.x)/190D)));
		}
	}
    public void mouseEntered(MouseEvent e){}
	public void mouseExited(MouseEvent e){}	
    public void mouseMoved(MouseEvent e){}
	public void mouseDragged(MouseEvent e){
		if(draging){
			pb.move(Math.min(Math.max(blockRect.x,e.getX()),228),pb.y);
			repaint();
		}
	}
}

⌨️ 快捷键说明

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