import javax.swing.*;
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class SoundApplet extends JApplet implements ActionListener,ItemListener
{
AppletSoundList soundList;
String auFile = "sound//spacemusic.au";
String aiffFile = "sound//fiute+hrn+mrmba.aif";
String midiFile = "sound//trippygaial.mid";
String rmfFile = "sound//jungle.rmf";
String wavFile = "sound//bottle-open.wav";
String chosenFile;
AudioClip onceClip, loopClip;
JComboBox formats;
JButton playButton, loopButton, stopButton;
boolean looping = false;
public void init()
{
String [] fileTypes = {auFile,aiffFile,midiFile,rmfFile,wavFile};
formats = new JComboBox(fileTypes);
formats.setSelectedIndex(0);
chosenFile = (String)formats.getSelectedItem();
formats.addItemListener(this);
playButton=new JButton("播放");
playButton.addActionListener(this);
loopButton=new JButton("连续");
loopButton.addActionListener(this);
stopButton=new JButton("停止");
stopButton.addActionListener(this);
stopButton.setEnabled(false);
JPanel controlPanel=new JPanel();
controlPanel.add(formats);
controlPanel.add(playButton);
controlPanel.add(loopButton);
controlPanel.add(stopButton);
getContentPane().add(controlPanel);
startLoadingSounds();
}
public void itemStateChanged(ItemEvent e)
{
chosenFile=(String)formats.getSelectedItem();
soundList.startLoading(chosenFile);
}
void startLoadingSounds()
{
soundList=new AppletSoundList(this, getCodeBase());
soundList.startLoading(auFile);
soundList.startLoading(aiffFile);
soundList.startLoading(midiFile);
soundList.startLoading(rmfFile);
soundList.startLoading(wavFile);
}
public void stop()
{
onceClip.stop();
if(looping)
{
loopClip.stop();
}
}
public void start()
{
if(looping)
{
loopClip.loop();
}
}
public void actionPerformed(ActionEvent event)
{
Object source=event.getSource();
if(source==playButton)
{
onceClip=soundList.getClip(chosenFile);
onceClip.play();
stopButton.setEnabled(true);
showStatus("Playing sound" +chosenFile+".");
if(onceClip==null)
{
showStatus("Sound"+chosenFile+"not loaded yet.");
}
return;
}
if(source==loopButton)
{
loopClip=soundList.getClip(chosenFile);
looping=true;
loopClip.loop();
loopButton.setEnabled(false);
stopButton.setEnabled(true);
showStatus("Playing sound"+chosenFile+"continuously.");
if(loopClip==null)
{
showStatus("sound"+chosenFile+"not loaded yet.");
}
return;
}
if(source==stopButton)
{
if(looping)
{
looping=false;
loopClip.stop();
loopButton.setEnabled(true);
}
else if(onceClip!=null)
{
onceClip.stop();
}
stopButton.setEnabled(false);
showStatus("Stopped playing"+chosenFile+".");
return;
}
}
}
import javax.swing.*;
import java.applet.*;
import java.net.URL;
class AppletSoundLoader extends Thread
{
JApplet applet;
AppletSoundList soundList;
URL baseURL;
String relativeURL;
public AppletSoundLoader(JApplet applet,AppletSoundList soundList,URL baseURL,String relativeURL)
{
this.applet=applet;
this.soundList=soundList;
this.baseURL=baseURL;
this.relativeURL=relativeURL;
setPriority(MIN_PRIORITY);
start();
}
public void run()
{
AudioClip audioClip=applet.getAudioClip(baseURL,relativeURL);
soundList.putClip(audioClip,relativeURL);
}
}
import javax.swing.*;
import java.applet.*;
import java.net.URL;
class AppletSoundList extends java.util.Hashtable
{
JApplet applet;
URL baseURL;
public AppletSoundList(JApplet applet,URL baseURL)
{
this.applet=applet;
this.baseURL=baseURL;
}
public void startLoading(String relativeURl)
{
new AppletSoundLoader(applet,this,baseURL,relativeURl);
}
public AudioClip getClip(String relativeURL)
{
return(AudioClip)get(relativeURL);
}
public void putClip(AudioClip clip,String relativeURL)
{
put(relativeURL,clip);
}
}