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
© Copyright 2025 Paperzz