On Chapter 10, you created your first complete
game, Traveling Gecko, which contained most of the core components
found in commercial games. However, it was missing one particularly
important component-sound. In toChapter's lesson, you remedy this
problem by learning about sound and how to create it for your
games. You don't get into too many of the technical details surrounding
sound in Java; you'll learn all about that in tomorrow's lesson.
The focus of toChapter's lesson is on the overall usage of sound and
how to create your own sound effects.
There was a time when a game without sound might have been acceptable.
I'm here to tell you that you're now living in a different time!
Although Traveling Gecko is a neat game, it seems somewhat lacking
without any sound effects or music. Game players have come to
expect realistic sound that works hand in hand with the graphics
to convey a greater sense of realism. Sound is such an integral
part of computer games that you should consider it a necessary
part of your design-as necessary as graphics. Understanding that,
let's get started on toChapter's lesson!
The following topics are covered in toChapter's lesson:
Before getting into the specifics of sound and how to create your
own, a little background on digital sound is in order. By understanding
how sounds are modeled in Java, and in software in general, you
gain more insight into what functionality is provided in the standard
Java audio implementation. You learn all about Java audio support
in tomorrow's lesson.
The first issue to tackle is understanding the physics behind
sound waves. A sound wave is a mechanical wave moving through
a compressible medium such as air. A sound wave is actually a
result of the pressure of air expanding and contracting. In other
words, a sound wave is a series of traveling pressure changes
in the air. You hear sound because the traveling sound wave eventually
gets to your ears, where the pressure changes are processed and
interpreted by your eardrums. The softness or loudness of a sound
is determined by the amount of energy in the wave. Because sound
waves lose energy as they travel, you hear sounds louder up close
and softer from a distance. Eventually, sound waves travel far
enough to be completely absorbed by the air or some other less
compressible medium such as a wall in your house.
A sound wave is a mechanical wave moving through a compressible
medium such as air.
When I refer to the energy of a sound wave, I'm really talking
about the amplitude of the wave. Amplitudes of sound waves are
usually measured in decibels (dB). Decibels are a logarithmic
unit of measurement, meaning that 80dB is 10 times louder than
79dB. This type of measurement is used because it reflects the
hearing characteristics of the human ear. The threshold of human
hearing is 0dB, which means that anything less is too soft to
be heard by humans. Likewise, the threshold of pain is 120dB,
which is the amplitude level at which humans experience physical
pain. Prolonged exposure to sound this loud can cause permanent
hearing damage, not to mention an annoying ringing sensation.
This typically isn't a problem in computer games!
When a sound wave is converted to an electrical signal (by a microphone,
for example), the amplitude is represented by a voltage. The amplitude
of the voltage directly corresponds to the amplitude of the physical
sound wave. As the amplitude of the wave varies, so does the corresponding
voltage. In fact, the varying amplitude of a sound wave over time
is all that is needed to reproduce a sound. Figure 11.1 shows
a sound wave plotted as a voltage (amplitude) varying over time.
When a microphone converts sound waves to voltage signals, the
resulting signal is an analog (or continuous) signal. Because
computers are digital machines, it is necessary to convert this
analog signal to a digital signal for a computer to process. Analog
to digital (A/D) converters handle the task of converting analog
signals to digital signals, which is also referred to as sampling.
The process of converting an analog signal to a digital signal
doesn't always yield exact results. How closely a digital wave
matches its analog counterpart is determined by the frequency
at which it is sampled, as well as the amount of information stored
at each sample.
Sampling is the process of converting an analog audio signal
to a digital audio signal.
To sample a sound, you just store the amplitude of the sound wave
at regular intervals. Figure 11.2 shows how an analog sound wave
is converted to a digital wave by sampling the sound at regular
intervals. Notice in Figure 11.2 that the digital representation
of the analog sound wave is not a very good one. Taking samples
at more frequent intervals causes the digital signal to more closely
approximate the analog signal and, therefore, sound more like
the analog wave when played.
When sampling sounds, the rate (frequency) at which the sound
is sampled is very important, as well as how much data is stored
for each sample. The unit of measurement for frequency is Hertz
(Hz), which specifies how many samples are taken per second. In
Java 1.0, the only supported sound frequency is 8,000 Hz, which
means that there are 8,000 samples per second. Although it sounds
like a lot, this frequency actually results in a fairly low-quality
sound. To understand why, consider the fact that the frequency
for CD-quality audio is 44,000 Hz.
Note
The limitations on sound quality imposed by Java are really a reflection of the underlying AU sound format, which is discussed in the next section. When Java widens its support for other sound formats in a future release, these limitations will likely
disappear.
The amount of data stored per sample determines the number of
discrete amplitudes that a digital signal can represent. The wider
the range is of amplitudes represented by the digital signal,
the closer the original wave is approximated. In Java 1.0, the
sample data width is limited to 8 bits. A wave sampled at 8 bits
has 256 different discrete amplitude levels (28).
Again, compare this to CD-quality sound, which uses 16 bits per
sample and therefore has 65,536 different discrete amplitude levels
(216).
The AU sound format is currently the only sound format supported
by Java. The AU name stands for ULAW, which specifies the
type of encoding used to store each sample. The format is specific
to Sun and NeXT computer systems, and it specifies that sounds
be 8,000 Hz mono 8-bit ULAW encoded. This is a pretty low-quality
sound format, especially when compared to what other formats provide.
However, within the context of the Web, the AU format is acceptable
for now. This is mainly because of the ever-present bandwidth
problem associated with the transfer of data over the Internet.
Restricting sounds to a compact format such as AU guarantees that
all sounds incur relatively low transmission times.
However, don't expect this situation to last long. Sun is already
promising more complete multimedia support in a future release
of Java, which will no doubt include support for more sound formats.
At that point, it will be up to Web developers to balance the
scale between sound quality and bandwidth delays.
Aside from the programming issues surrounding sound in Java, which
you learn about tomorrow, integrating sound into Java games consists
primarily of creating or finding the right sound effects and music
to fit your needs. You'll be happy to know that creating sound
effects for games is often one of the most creative and fun aspects
of game development, because there are very few rules. Which aspects
of a game you want to associate sounds with are totally up to
you. Along with that, you have complete freedom over the sounds
you create and use.
Well, almost complete freedom. Actually, two limitations are imposed
on sounds in games. The first limitation is communication bandwidth,
which keeps you from being able to use lots of long sounds. This
limitation exists because it takes time to transmit resources
used by a Java game, such as graphics and sounds, over the Internet.
To keep game players from having to wait an inordinate amount
of time for resources to load, you should try to keep the quantity
and size of sounds used by your games within reasonable limits.
The second limitation, which is a little less obvious, is that
you can't use copyrighted sounds without written permission from
the owner of the copyright. For example, sounds sampled from copyrighted
movies or audio recordings can't be used without permission. It
is technically no different than using copyrighted software without
permission or a licensing agreement. So be careful when sampling
sounds from copyrighted sources.
Warning
Some seemingly public domain sound collections are actually copyrighted and can get you into trouble. Most of these types of collections come in the form of an audio CD containing a variety of sound effects. Be sure to read the fine print on these CDs, and
make sure you can legally reuse the sounds or get explicit permission from the publisher.
Beyond these two limitations, you are free to do whatever you
want with sounds in your game creations. Let's take a look at
how you can begin experimenting with sound.
To be able to create and modify your own sounds, you need some
type of software sound editing utility. Sound editing utilities
usually provide a means of sampling sounds from a microphone,
CD-ROM, or line input. From there, each utility varies as to what
degree of editing it provides. Some sound editing utilities include
very advanced signal processing features, in addition to the relatively
standard amplification and echoing features.
The most important component of a good sound editor in regard
to Java games is the capability to save sounds in the AU format.
It doesn't matter how cool the sounds are if you can't play them
with Java. Another key feature is the capability to zoom in and
clip sounds down to exactly the portions you want to use. Because
the length of sounds is of the utmost importance in Java games,
you should always clip sounds down to the absolute minimum length
possible.
The rest of this section focuses on some popular shareware sound
editors that you can use to edit sounds for Java games. They all
support the AU sound format and provide some degree of sound effects
processing. There are also equally, or more, feature-packed commercial
sound utilities out there, but I want to keep the focus on shareware
because you can easily download shareware and try it out.
Cool Edit, by Syntrillium Software, is a sound editor for Windows
95 that is loaded with features. Its creators have suggested thinking
of it as a paint program for audio. Just as a paint program enables
you to create images with colors, brush strokes, and a variety
of special effects, Cool Edit enables you to "paint"
with sound: tones, pieces of songs with voices and other noises,
sine waves and sawtooth waves, noise, or just pure silence. Cool
Edit provides a wide variety of special effects for manipulating
sounds, such as reverberation, noise reduction, echo and delay,
flanging, filtering, and many others.
You can get information about Cool Edit and download the latest
version from the Syntrillium Software Web site, which is located
at http://www.netzone.com/syntrillium.
Figure 11.3 shows the Syntrillium Software Web site.
Sound Exchange (also known as SoX), by Lance Norskog, is the self-proclaimed
Swiss army knife of sound editors because it provides a minimal
interface but a lot of features. It functions more as a sound
converter rather than a sound editor and is available for both
UNIX and DOS pcs. It provides support for converting between many
different sound formats, along with sampling rate conversion and
some sound effects. The complete source code for SoX is also available,
so if you're adventurous enough, you could port it to another
platform. As if you don't have enough to keep you busy learning
Java game programming!
You can get information about Sound Exchange and download the
latest version from the Sound Exchange Web site, which is located
at http://www.spies.com/Sox.
Figure 11.4 shows the Sound Exchange Web site.
Sound Machine, by Rod Kennedy, is a Macintosh sound editor with
lots of conversion and sound effects features. Mr. Kennedy is
also working on some interesting Netscape plug-ins that will interact
with Sound Machine. Pretty neat!
You can get information about Sound Machine and download the latest
version from the Sound Machine Web site, which is located at
Sound Hack, by Tom Erbe, is another Macintosh sound utility with
a wide variety of neat features. Unlike Sound Machine, however,
Sound Hack is more of a sound processor, and it leans toward more
esoteric sound processing features. For example, Sound Hack includes
processing effects such as pitch shifting, binaural filter spatialization,
and spectral mutation, among others. If you have no idea what
these features are, just grab a copy of Sound Hack and try them
out for yourself!
You can get information about Sound Hack (including online documentation)
and download the latest version from the Sound Hack Web site,
which is located at http://shoko.CALARTS.EDU/~tre/SndHckDoc.
Figure 11.6 shows the Sound Hack Web site.
After you've decided on a sound utility, you're ready to start
creating and editing sounds. The first decision to make is how
you will create the sounds. For example, are you planning to record
sounds yourself with a microphone or sample sounds from a stereo
cassette deck or VCR? The microphone is probably the easiest route,
because many multimedia computers come equipped with one. It's
also the most creative route. However, you might already have
some sounds in mind from a prerecorded cassette, CD, or movie,
which means that you need to look into connecting an external
sound source to your computer. This is covered in detail a little
later in toChapter's lesson.
Regardless of where you sample sounds from, the process of getting
a sampled sound cleaned up for use in a game is basically the
same. After you've sampled a sound, play it back to make sure
that it sounds okay. It's likely that the sound will be either
too loud or too soft. You can judge whether the volume of the
sound is acceptable by looking at the waveform displayed in the
sound editor. If the sound amplitude goes beyond the top or bottom
of the waveform display, you know it's definitely too loud. If
you can barely hear it, it's probably too soft. To remedy this
problem, you can either adjust the input level for the sound device
and resample the sound or try to use amplification effects provided
by the sound utility.
The waveform of a sound is the graphical appearance of
the sound when plotted over time.
The best way to fix the volume problem is to adjust the input
level of the sound device and resample the sound. For example,
in Windows 95 you can easily adjust the microphone or line input
level using the Volume Control application (see Figure 11.7).
After you have the volume of the sound at a level you like, you
need to clip the sound to remove unwanted portions of the sound.
Clipping a sound involves zooming in on the waveform in
a sound editor and cutting out the silence that appears before
and after the sound. This helps shorten the length of the sound
and prevents unnecessary latency.
Clipping is the process of removing unneeded parts of a
sound, such as silence at the beginning and end.
Note
Latency is the amount of time between when you queue a sound for playing and when the user actually hears it. Latency should be kept to a minimum so that sounds are heard when you want them to be heard without any delay. Unnecessary silence at the
beginning of a sound is a common cause of latency problems. The other, less controllable, cause is the audio mixing support in Java itself.
When you have a sound clipped, it should be ready for prime time!
You might want to check out the kinds of effects that are available
with the sound utility you are using. Some simple effects range
from reverse to echo, with more advanced effects including fading
and phase shifts. It's all up to your imagination and your discerning
ears!
If you are recording sounds with a microphone, you can get much
better results by covering the microphone with soft foam, like
the kind found on some portable earphones. Some microphones already
have foam covers. The foam cover greatly reduces the hiss caused
by blowing on the microphone. It seems that no matter how careful
you are, you always end up blowing into the microphone a little.
This causes a noisy hiss unless you have the microphone covered.
You can tape tissue over the microphone if you can't find any
foam.
After you have the microphone set up for recording, prepare to
throw convention aside and get creative. It's really amazing what
can be done with a microphone and a little reckless abandon! You
can come up with some pretty neat sound effects just by being
creative with everyChapter household items. Let's take a few examples.
If you need gunshots or simple explosions, try tapping the microphone
on a table. You can get different sounds by hitting it harder
or softer and by trying different surfaces. Please don't hold
me responsible if you beat your microphone to death on a table,
though! You'll notice that harder surfaces generate sharper sounds.
Because most gunshot sounds are repeated often, it's nice to have
them as short and sweet as possible. The sharp sounds generated
by a hard surface work pretty well for this.
If you're looking for more realistic explosions that actually
fade out, you're going to have to perform a little. Hold your
hand around the microphone and make a rough, blowing sound into
your hand. After a little practice, you can get pretty realistic
explosion sounds with this method. Just make sure no one's around
when you're practicing!
If you need mechanical sounds, look no farther than your kitchen
appliances. You probably don't want to drag your whole computer
into the kitchen, which means you'll be limited to portable appliances.
However, that still leaves a lot of opportunities. My juicer makes
sounds that easily could pass for some interesting futuristic
weapons. How about opening a bottle of soda? Sounds an awful lot
like hydraulic brakes, doesn't it? Or maybe the huff or puff of
a big alien?
What if you need some background sounds? I know I could open my
window on many nights and record the sound of crickets chirping
all night long. Although less dramatic, cricket sounds can add
a lot to the realism of a night scene in a game. That is, until
dogs start barking!
The goal here isn't to go through an exhaustive description of
every possible thing you can use to create sounds. I mainly just
want to spark your imagination so that you can start thinking
about what you can do with things that are readily available.
That's the beauty of creating games. You can turn otherwise ordinary
things into interesting elements of a game. Think about all the
things you hear on a daily basis. Then go through your house and
make notes of what sounds you could create with different items.
You'll find that this process can be a lot of fun. It's even better
after you've incorporated the sounds into a game and people ask
where the sounds came from.
Another very useful method for finding sound effects for games
is to sample sounds from external sound sources such as VCRs and
CD players. Before I say any more, let me reiterate that it is
illegal to distribute sounds sampled from movies or copyrighted
CDs or cassettes without getting permission.
Sampling sounds from external sound sources requires a little
more work than recording them with a microphone, but not much.
Basically, the extra work is in connecting the external sound
source to your computer. You connect external sound sources via
a line input on your computer; most multimedia computer systems
these Chapters have a line input for receiving analog audio. For example,
Soundblaster sound cards on pcs have a line input jack that can
be used to connect a stereo cassette deck or VCR. To see whether
your computer has a line input jack, look at the back of your
computer. If you have speakers hooked up, they are probably plugged
in very close to the line input jack. Look for one or more jacks
labeled input. On pcs equipped with Soundblaster family
sound cards, the word input usually accompanies the input
jack. Input jacks are usually the same type of mini connectors
used for headphones on a portable Walkman.
After you determine where the line input jack is located, plug
in the line out cable from the sound device from which you want
to sample sounds. The only problem is that the connectors are
usually of differing types. The type of connector used by most
audio equipment-including cassette decks, CD players, and VCRs-is
called an RCA connector. You need to go to an electronics store
and buy a cable that allows you to connect the RCA sound device
to the mini input jack on your computer. You might also want to
pick up an RCA extension cable so that you don't have to stack
the sound device on top of your monitor!
When you get the cables squared away, plug the RCA end into the
line output of the sound device, and the mini end into the input
jack on the back of your computer. Then fire up the sound utility
and get ready for some fun. From this point on, it's pretty much
the same as recording sounds using a microphone, except that the
sound device is generating the sound rather than you. The sound
utility doesn't really care where the sound is coming from; it
knows only to look at the input jack and grab whatever sound information
is there.
If a sound doesn't sound right after you sample it, it's probably
because you have the cable plugged into the microphone input rather
than the line input. Try switching inputs (if you have another
one) and trying again. If it sounds okay this time, you're set.
If not, don't worry because there are work-arounds.
If you only have a microphone input, you need to make an adjustment
to record sounds from other input devices because microphone inputs
are designed to deal only with low-amplitude signals. The signals
from other sound devices can easily overwhelm a microphone input
jack. The solution is to somehow alter the incoming signal so
that it comes in at around a microphone level. The easiest fix
is to lower the input level of the sound source in software. An
example of this is using the Volume Control application in Windows
95.
If you aren't so lucky to be able to fix things in software, you
can adjust the output level of the sound device by passing it
through an audio mixer. If you don't have an audio mixer handy,
your best bet is to buy an attenuator connector. Attenuator connectors
adjust the signal level down to a level that will work for a microphone
input. You can find attenuator connectors at most electronics
stores.
An attenuator is an electronic device or circuit that lowers
the magnitude of an electric signal. In the case of audio signals,
an attenuator results in a decrease in volume.
After you have the technical difficulties out of the way, you
can focus on the creative end of sampling sounds. When it comes
to movies, I tend to favor war movies for finding gunshots and
explosions, for obvious reasons. Science fiction movies are great
for space sounds and other weird effects. The range of sounds
that can be found in movies is practically unlimited.
One advantage of sampling sounds from movies is that they typically
are of very high quality. Companies exist that do nothing more
than create sounds for movies. For this reason, movies provide
probably the richest variety of sounds available. Typically, every
sound you hear in a movie has been carefully placed there. The
problem, of course, is that they are protected by copyright law,
which means that you can't just run around ripping sounds out
of movies and putting them into your games.
If you've decided that you don't have what it takes to create
your own sounds, you still have options. In this case, you need
to seek an outside source for your sounds. The best source for
finding prerecorded sounds is in sound archives on the Web. Many
different sound archives are out there with a vast amount of sounds
to choose from. Many are even available already in the AU sound
format. Even if you get sounds from a sound archive, be very careful
about the copyright issues surrounding using them.
A good starting point for finding sounds is the World Wide Web
Virtual Library, which maintains an Audio page with links to sound
archives. This Audio Web site is located at
Figure 11.8 shows what the WWW Virtual Library Audio Web site
looks like.
ToChapter you took a step away from the details of Java coding to
learn about sound and how it can be created for games. You began
with the physics of sound and followed it up with the basics of
digital sound representation and the AU sound format supported
by Java. You then saw where you could get some shareware sound
utilities that enable you to record and edit your own sounds.
You finished up by learning about creative outlets for creating
your own sounds, both from scratch and also from existing sources.
I hope toChapter's lesson gave you a break from technical programming
details, along with providing a creative surge for you to go out
and create some interesting sounds. My main goal was to remind
you that games are all about fun-and not just from a player's
perspective. The more you enjoy the process of creating games,
the more fun they will probably end up being. Sound creation is
only one of the aspects of game development that can be both challenging
and fun.
Just in case you forgot that this guide is about Java, tomorrow's
lesson turns your attention toward the specifics of playing sound
in Java. Don't worry; it's a lot easier than you might suspect!
What's the difference between sampled sound and sampled music?
A
Technically, there is no difference; they are both sampled as digital audio and stored in the AU sound format. However, sampled music is usually designed to be relatively short in length and sampled so that it
can be looped repeatedly to sound like a longer piece of music. The trick then is to sample music sounds so that they end similarly to how they begin, thereby smoothing out the looping effect.
Q
Can I record sounds from an audio CD in an internal CD-ROM drive?
A
Certainly! As a matter of fact, this is an ideal scenario because you bypass the whole issue of connecting an external sound device through an input jack. Typically, this simply involves adjusting the volume of
the CD-ROM appropriately and sampling just as if you were using the microphone.
Q
What if I find a bunch of neat sounds but they are stored in a different sound format, such as WAV?
A
You need to convert them to the AU sound format to be able to use them with Java. This is usually as easy as loading them into a sound utility and saving them as an AU file type.
The Workshop section provides questions and exercises to help
strengthen your grasp of the material you learned toChapter. Try to
answer the questions and at least go over the exercises before
moving on to tomorrow's lesson. You'll find the answers to the
questions in appendix A, "Quiz Answers."