210 likes | 326 Vues
Explore the crucial roles of music and sound in computer games, including BGM, sound effects, file formats, looping, volume control, DSP FX, and more. Learn how to optimize sound for your game with detailed guidelines and recommendations.
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