Sound Engine Evaluation for Computer Games

Download Report

Transcript Sound Engine Evaluation for Computer Games

Sound Engine Evaluation for
Computer Games
Case Study: fmod
Jyun-Ming Chen
Typical Game Loop
Roles of music/sound
BGM (background music)
Sound effect
Fall 2010
2
Microsoft SDK
BGM (Midi)

mciSendCommand (…)
Sound (Wave)

Need more
sophisticated
tools!
sndPlaySound
See msdn for details
Ex: midi_wav.zip on webhd2/game-ex
Fall 2010
3
Check List
BGM




File formats supported:
mid, mp3, mod, …
Looping
Early termination
Volume control
Sound effects




Fall 2010
File formats supported
Trigger mechanism
Reverb and other DSP FX
(e.g., room effects)
Pre-load to avoid delay in
first play
General

Mixing capability (how
many sounds can be
mixed at one time)
Spatial sound



Position: 3D vs. panning
Velocity: Doppler
supported?
Occlusion?!
Sync capability


sound to action
Action to sound
Others

CPU overhead
4
Case Study: fmod
Cross platform audio library (Win32, Linux,
mac, WinCE, PS2, Xbox, …)
Free unless for commercial use
Fall 2010
5
Documentation
FSOUND: for sound effect
FMUSIC: for bgm
Fall 2010
6
FSOUND API
Fall 2010
7
Initialization
Required for both
FMUSIC &
FSOUND
Fall 2010
8
FSOUND_Sample
Load, Free
SetMode: LOOP normal | bidi | off
Get/SetLoopPoints
GetLength
Get/SetMinMaxDistance (min is the distance
where the sound starts to attenuate)

Fall 2010
increase the min_distance of a sound to make it
'louder' in a 3d world, and decrease it to make it
'quieter' in a 3d world.
9
FSOUND_Stream
If the PCM data (wav) or compressed
file (ogg, mp3, …) is too big to be read
in as a sample, we can use stream
functions to read it (decompress it onthe-fly)
Certain functionalities are restricted
Fall 2010
10
Channel Functions
FSOUND_PlaySound, PlaySoundEx



FSOUND_FREE: Choose a free channel to play in
Returns the channel selected
Extended version can play paused (allow
attributes to be changed, then play)
FSOUND_SetFrequency (channel, 11025);
FSOUND_SetVolume(channel, 255);
FSOUND_SetPan(channel, 255);
FSOUND_SetPaused(channel, FALSE);
FSOUND_StopSound
Fall 2010
11
FMUSIC (mid, mod; mp3)
LoadSong
PlaySong: can play more than one music (yes,
but why?)
SetPaused
SetLooping: default TRUE
SetPanSeparation, SetMasterSpeed,
SetMasterVolume
StopSong, StopAllSongs
FreeSong
SetReverb (midi only)
Fall 2010
12
OpenGL Tests
Webhd2/gameex/fmod_opengl_tests
Basics
Fall 2010
14
Bgmusic
FMUSIC PLAYS S3M AND MID; NOT
MP3 (sequenced file, not PCM-type)
OK for mod files
Fall 2010
15
Works for mp3, ogg, wav
Only wav can store cue point (for sync)
Stream
Fall 2010
16
3dsound
FSOUND_Update():
This updates the 3d sound engine, and should be called
whether sound source or listener changes position
Fall 2010
17
Listener Attributes
Float *pos
Float *Vel (per second)

NULL to ignore
Fx, fy, fz (forward
orientation unit vector)
Tx, ty, tz (top-up orientation
unit vector)
Fall 2010
y
z
x
Global Axes in Fmod
Left-handed
18
Doppler
Fall 2010
FSOUND_3D_SetDopplerFactor (4.0);
19
Commonly Used APIs
Init and Close
Load and Free sample
Fall 2010
20
Sound API
Fall 2010
21