Now we’ll turn from images and open our ears to audio. Java Sound API provides fine-grained support for the creation and manipulation of both sampled audio and MIDI music, as well as control over MIDI devices. There’s space here only to scratch the surface by examining how to play simple sampled sound and MIDI music files. With the standard Java Sound support bundled with Java, you can play a wide range of file formats including AIFF, AU, Windows WAV, standard MIDI files, and Rich Music Format (RMF) files. We’ll discuss other formats (such as MP3) along with video media in the next section.
java.applet.AudioClip
defines the simplest interface for objects that can play sound. An object
that implements AudioClip
can be told
to play()
its sound data,
stop()
playing the sound,
or loop()
continuously.
The Applet
class provides a handy
static method, newAudioClip()
, that
retrieves sounds from files or over the network. (And there is no reason
we can’t use it in a non-applet application.) The method takes an absolute
or relative URL to specify where the audio file is located and returns an
AudioClip
. The following application,
NoisyButton
, gives a simple
example:
//file: NoisyButton.java
import
java.applet.*
;
import
java.awt.*
;
import
java.awt.event.*
;
import
javax.swing.*
;
public
class
NoisyButton
{
public
static
void
main
(
String
[]
args
)
throws
Exception
{
JFrame
frame
=
new
JFrame
(
"NoisyButton"
);
java
.
io
.
File
file
=
new
java
.
io
.
File
(
args
[
0
]
);
final
AudioClip
sound
=
Applet
.
newAudioClip
(
file
.
toURL
());
JButton
button
=
new
JButton
(
"Woof!"
);
button
.
addActionListener
(
new
ActionListener
()
{
public
void
actionPerformed
(
ActionEvent
e
)
{
sound
.
play
();
}
});
Container
content
=
frame
.
getContentPane
();
content
.
setBackground
(
Color
.
pink
);
content
.
setLayout
(
new
GridBagLayout
());
content
.
add
(
button
);
frame
.
setVisible
(
true
);
frame
.
setSize
(
200
,
200
);
frame
.
setDefaultCloseOperation
(
JFrame
.
EXIT_ON_CLOSE
);
frame
.
setVisible
(
true
);
}
}
Run NoisyButton
, passing the name
of the audio file you wish to use as the argument. (We’ve supplied one
called bark.aiff.)
NoisyButton
retrieves the
AudioClip
using a File
and the toURL()
method to
reference it as a URL. When the button is pushed, we call the play()
method of the AudioClip
to start things. After that, it plays
to completion unless we call the stop()
method to interrupt it.
This interface is simple, but there is a lot of machinery behind the scenes. Next, we’ll look at the Java Media Framework, which supports a wider range of media types.
Get Learning Java, 4th Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.