This example combines features from the first two examples (1 2). It demonstrates how a sound clip can be played multiple times, first by using a JButton (this code) and then by using a for loop (audio2.java)
audio1.javaimport java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.sound.sampled.*;
import java.io.*;
import java.net.URL;
class audio1 implements LineListener{
public Clip clip;
boolean playCompleted;
audio1(String filename) {
open(filename);
}
public void open(String filename) {
try{
URL url = getClass().getClassLoader().getResource(filename);
AudioInputStream audioIn = AudioSystem.getAudioInputStream(url);
AudioFormat audioFormat = audioIn.getFormat();
DataLine.Info info = new DataLine.Info(Clip.class, audioFormat);
// Get a sound clip resource.
clip = AudioSystem.getClip();
clip.addLineListener(this);
// Open audio clip and load samples from the audio input stream.
clip.open(audioIn);
}catch(Exception e)
{
System.err.println(e);
}
}
public void play() {
clip.start();
playCompleted = false;
int count=0;
while (!playCompleted) {
// wait for the playback completes
try {
Thread.sleep(100);
count++;
} catch (InterruptedException ex) {
System.err.println(ex.getMessage());
}
}
//System.out.println("ellapsed time " + count + " tenth seconds");
}
/**
* Listens to the START and STOP events of the audio line.
*/
@Override
public void update(LineEvent event) {
LineEvent.Type type = event.getType();
if (type == LineEvent.Type.START) {
//System.out.println("Playback started.");
playCompleted = false;
} else if (type == LineEvent.Type.STOP) {
//System.out.println("Playback completed.");
playCompleted = true;
clip.setFramePosition(0);
}
}
public static void main(String[] args) {
audio1 aud = new audio1("cuckoo.wav");
JButton button = new JButton("ding");
button.addActionListener(ae -> aud.play());
EventQueue.invokeLater(()-> {
JFrame win = new JFrame("audio1");
JPanel panel = new JPanel();
panel.add(button); win.add(panel);
win.add(panel, BorderLayout.NORTH);
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
win.setSize(196,140);
//win.pack();
win.setLocationRelativeTo(null); // Center window.
win.setVisible(true);
});
}
}
Maintained by John Loomis, updated Thu May 07 16:03:27 2020