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

📄 backsound.java

📁 背景声音applet小程序
💻 JAVA
字号:
// BackSound by David Ford (c) 1999
//
// BackSound plays sounds from playlist in random order with a random interval
// between sounds. A priority is given for each sound to determine it's freqency
// A delay is given for each sound to determine the relative length of pause after
// the sound plays. Soundn will play aproximately priorityn time out of (total
// total priority).  Delay after playing soundn will be 1*delayn to 20*deyaln seconds.
// BackSound will display either a blank background of color or the image given.
// WIDTH & HEIGHTH should match the size of image if it is used. If image is used
// then color will have no effect. Play stops when the mouse is clicked on the Applet
// and resumes when the mouse is clicked again.
//
// <APPLET CODE = "BackSound.class" WIDTH=100 HEIGHT=100>
// <!--WIDTH & HEIGHT must match width & height of image if used-->
// <PARAM NAME="numsounds" VALUE="4">
// <PARAM NAME="sound1" VALUE="cat.au">
// <PARAM NAME="delay1" VALUE="3">
// <PARAM NAME="priority1" VALUE="3">
// <PARAM NAME="sound2" VALUE="dog-1.au">
// <PARAM NAME="delay2" VALUE="2">
// <PARAM NAME="priority2" VALUE="2">
// <PARAM NAME="sound3" VALUE="Gun-1.au">
// <PARAM NAME="delay3" VALUE="1">
// <PARAM NAME="priority3" VALUE="1">
// <PARAM NAME="color" VALUE="black"> // not used if image is given
// <PARAM NAME="image" VALUE="Back.gif">
//
// This Applet is my own original work. BackSound is free for distribution to
// non-commercial sites. If you would like to use this applet on anyother site then
// all I ask is that you e-mail me at Shade2020@aol.com and let me know that my work
// is appriciated. If you would like to use this applet on a commercial site then
// e-mail me and request a liscence to do so. ~ David

import	java.applet.*;
import	java.lang.Thread.*;
import	java.util.*;
import	java.net.*;
import	java.awt.*;
import	java.awt.event.*;
import	java.lang.*;

public class BackSound extends Applet implements Runnable {

int 			NumSounds;			//Number of sound clips
AudioClip Sounds[];				//Array of sounds
long			Delay[];				//Delay time after each sound
int				Priority[];			//Priority of each sound
int				TotalPriority;	//Total of all Priorties
Image			BGImage;				//background image
Color			BGColor;				//background color
Thread		Go;							//The thread to play sounds
boolean		Running = false;//Is the thread running?
boolean		Active = true;	//Has the Applet been destroyed?

	//About information.
	public String getAppletInfo() {
	return
	"BackSound - a background sound effect player.\n"
	+"Plays random sound from list in random order at random intervals.\n"
	+"Click cause sound playback to toggle.\n"
	+"version 2.0.0\n"
	+"(c) 1999 - David Ford\n\n"
	+"numsound  - Number of sounds in list\n"
	+"soundn    - .au file n\n"
	+"delayn    - pause delayn to 20 x delayn seconds after soundn\n"
	+"priorityn - play soundn this number of times from total of priorities\n"
	+"image     - graphics file to display\n"
	+"color     - background color if image not defined\n"
	+"Color may be given as rrr.ggg.bbb, rrrgggbbbb or by name";
	}
	
	String pinfo[][] = {
		{"numsounds","integer","number of sounds in list"},
		{"sound1","URL","1st sound file"},
		{"sound2","URL","2nd sound file"},
		{"...","...","repeat soundn for each sound file 1 through numsounds"},
		{"priority1","integer","play sound1 priority1 in total priorities times"},
		{"priority2","integer","play sound2 priority2 in total priorities times"},
		{"...","integer","repeat priorityn for each sound file 1 through numsounds"},
		{"delay1","long","pause delay1 to 20x delay1 seconds before playing next sound"},
		{"delay2","long","pause delay2 to 20x delay1 seconds before playing next sound"},
		{"...","long","repeat delayn for each sound file 1 through numsounds"},
		{"image","URL","image to display"},
		{"color","string","rrr.ggg.bbb where rrr = red value, ggg = green & bbb = blue"},
		{"color","integer","rrrgggbbb color value"},
		{"color","string","color name"}
	};
	
	public String[][] getParameterInfo() {
		return pinfo;
	}
	
	
	public void init () {
		int PriorityIn = 0;
		//read in the background image or color
		if (this.getParameter("image") != null) {
			BGImage =getImage(this.getCodeBase(), this.getParameter("image"));
			}
		else {
			int red;
			int blue;
			int green;
			String ColorIn;
			StringTokenizer st;
			ColorIn = this.getParameter("color");
			st = new StringTokenizer(ColorIn,".");
			//Color is not in form rrr.ggg.bbb
			if (st.countTokens() < 3) {
				//Color might be given in form rrrgggbbb
				try {BGColor = new Color(Integer.parseInt(ColorIn));}
				//Color might be given by name
				catch (NumberFormatException nfebgc) {
					BGColor = Color.getColor(ColorIn);
					setBackground(BGColor);
				}
			}
			//color is in form rrr.ggg.bbb
			//if any of these values are bad then default to 0
			else {
				try {red = Integer.parseInt(st.nextToken());}
				catch (NumberFormatException nfer) {red = 0;}
				try {green = Integer.parseInt(st.nextToken());}
				catch (NumberFormatException nfeg) {green = 0;}
				try {blue = Integer.parseInt(st.nextToken());}
				catch (NumberFormatException nfeb) {blue = 0;}
				BGColor = new Color(red, blue, green);
				setBackground(BGColor);
				}
			}
		//read the number of sounds and create the sound data arrays
		NumSounds = Integer.parseInt(this.getParameter("numsounds"));
		if (NumSounds < 1) {
			showStatus ("Invalid number of sounds");
			NumSounds = 1;
			}
		Sounds = new AudioClip[NumSounds];
		Delay = new long[NumSounds];
		Priority = new int[NumSounds];
		//get the sound data and load the sounds
		for (int i = 0; i < NumSounds; i++) {
			//Get the .au file, skip if bad
			try {Sounds[i] = getAudioClip(this.getDocumentBase(), this.getParameter("sound"+String.valueOf(i+1)));}
			catch (NegativeArraySizeException nases) {
				Delay[i] = 0;
				Priority[i] = 1;
				continue;
				}
			//Get the delay factor default to 1 if bad
			try {Delay[i] = Long.parseLong(this.getParameter("delay"+String.valueOf(i+1)));}
			catch (NumberFormatException nfed) {
				}
			if (Delay[i] == 0) Delay[i] = 1;
			//Get the priority factor default to 1 if bad
			try {PriorityIn = Integer.parseInt(this.getParameter("priority"+String.valueOf(i+1)));}
			catch (NumberFormatException nfep) {
				}
			if (PriorityIn == 0) PriorityIn = 1;
			//Increment total Priority and set priority of this
			//sound to the new total
			TotalPriority += PriorityIn;
			Priority[i] = TotalPriority;
		}
		//Listen for click and mouse enter and begin
		this.addMouseListener(new Listener());
		Running = true;
	}

	//make sure the image or background is shown & start	
	public void start() {
		repaint();
		Running = true;
		if (Go == null) {
			Go = new Thread(this);
			Go.start();
		}
//		else {
//			notify();
//		}
	}
	
	// kill the PlayThread
	public void stop() {
		Running = false;
	}
	
	
	
	// kill the PlayThread free the BGImage
	public void destroy() {
		Active = false;
		Running = false;
		Go = null;
		if (BGImage != null) {
			BGImage = null;
		}
	}
	
	// Play sounds in random order at random intervals
	public void run() {
		int			SoundNumber;		//Sounds[] index
		int			PriorityValue;	//Random Priority
		long		DelayTime;			//Delay[] index

		while (Active) {
			//Generate a random priority
			PriorityValue = (int) (java.lang.Math.random() * TotalPriority);
			if (PriorityValue == 0) PriorityValue = 1; //shouldn't happen
			//find 1st sound of equal or higher priority
			for (SoundNumber = 0; SoundNumber < NumSounds; SoundNumber++) {
				if (Priority[SoundNumber] >= PriorityValue) {
					//Set delay for this sound random 1 to 10 seconds
					//mutiplied by sounds delay factor
					DelayTime = (long) (java.lang.Math.random() * 10);
					if (DelayTime == 0) DelayTime = 1;
					DelayTime *= 1000;
					DelayTime *= Delay[SoundNumber];
					if (DelayTime == 0) DelayTime = 1000;
					//play it if it is valid, if not do nothing this pass
					try {Sounds[SoundNumber].play();}
					catch (NullPointerException npes) {
						continue;
						}
					//pause after playing the sound
					try {Thread.sleep(DelayTime);}
					catch (InterruptedException ie) {}
					break;
				}
			}
			//Check to see if the applet has been paused
//			synchronized (this) {
//				if (!Running) {
//					try { wait(); }
//						catch (InterruptedException ie) {}
//				}
//			}
			while(!Running){
			showStatus("Paused: Click to resume");
			}
		}
	}
	
	// display background color or image
	public void paint(Graphics g) {
		if (BGImage != null) {
			
			g.drawImage(this.BGImage,0,0,this);
			}
		else {
			this.setBackground(this.BGColor);
		}
	}

	class Listener extends MouseAdapter {
		//toggle pause if Mouse pressed
		public void mouseClicked(MouseEvent e) {
			if (Running) {
				//Pause if playing
				showStatus("Pausing: Click to Resume");
				Running = false;
			}
			else {
				//play if paused
				showStatus("Resuming: Click to Pause");
				start();
			}
		}
		
		//Display messege to indicate current state
		//and mouse click action.
		public void mouseEntered(MouseEvent e) {
			if (Running) {
				showStatus("Running: Click to Pause");
			}
			else {
				showStatus("Paused: Click to Resume");
			}
		}
	}
			
}


⌨️ 快捷键说明

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