210 likes | 319 Views
Sound Engine Evaluation for Computer Games. Case Study: fmod Jyun-Ming Chen. Typical Game Loop. Roles of music/sound BGM (background music) Sound effect. Microsoft SDK. Need more sophisticated tools!. BGM (Midi) mciSendCommand ( … ) Sound (Wave) sndPlaySound See msdn for details
E N D
Sound Engine Evaluation for Computer Games Case Study: fmod Jyun-Ming Chen
Typical Game Loop Roles of music/sound • BGM (background music) • Sound effect
Microsoft SDK Need more sophisticated tools! • BGM (Midi) • mciSendCommand (…) • Sound (Wave) • sndPlaySound • See msdn for details • Ex: midi_wav.zip on webhd2/game-ex
BGM File formats supported: mid, mp3, mod, … Looping Early termination Volume control Sound effects 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 Check List
Case Study: fmod • Cross platform audio library (Win32, Linux, mac, WinCE, PS2, Xbox, …) • Free unless for commercial use
Documentation FSOUND: for sound effect FMUSIC: for bgm
Initialization Required for both FMUSIC & FSOUND
FSOUND_Sample • Load, Free • SetMode: LOOP normal | bidi | off • Get/SetLoopPoints • GetLength • Get/SetMinMaxDistance (min is the distance where the sound starts to attenuate) • 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.
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 on-the-fly) • Certain functionalities are restricted
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
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)
OpenGL Tests Webhd2/game-ex/fmod_opengl_tests
FMUSIC PLAYS S3M AND MID; NOT MP3 (sequenced file, not PCM-type) Bgmusic OK for mod files
Works for mp3, ogg, wav Only wav can store cue point (for sync) Stream
3dsound • FSOUND_Update(): • This updates the 3d sound engine, and should be called whether sound source or listener changes position
Float *pos Float *Vel (per second) NULL to ignore Fx, fy, fz (forward orientation unit vector) Tx, ty, tz (top-up orientation unit vector) y z x Global Axes in Fmod Left-handed Listener Attributes
Doppler FSOUND_3D_SetDopplerFactor (4.0);
Commonly Used APIs Init and Close Load and Free sample