diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-06-16 14:51:01 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-06-16 14:51:01 -0700 |
commit | 8a24a2e36b6e485a87f6f6c787a7d54484012b6b (patch) | |
tree | 37b21f32436f96ca7fd022c1171338fa44662274 | |
parent | e6ec4c9620ed87b0c9ab3100914b48f662132e52 (diff) |
refactor SDL audio a little and add support for music volume adjustment
-rw-r--r-- | src/library_sdl.js | 56 |
1 files changed, 33 insertions, 23 deletions
diff --git a/src/library_sdl.js b/src/library_sdl.js index 7338f215..6575c334 100644 --- a/src/library_sdl.js +++ b/src/library_sdl.js @@ -16,9 +16,14 @@ var LibrarySDL = { surfaces: {}, events: [], - audios: [null], fonts: [null], + audios: [null], + music: { + audio: null, + volume: 1.0 + }, + keyboardState: null, shiftKey: false, ctrlKey: false, @@ -485,6 +490,16 @@ var LibrarySDL = { } }, + setGetVolume: function(info, volume) { + if (!info) return 0; + var ret = info.volume * 128; // MIX_MAX_VOLUME + if (volume != -1) { + info.volume = volume / 128; + if (info.audio) info.audio.volume = info.volume; + } + return ret; + }, + // Debugging debugSurface: function(surfData) { @@ -1058,13 +1073,7 @@ var LibrarySDL = { } return _Mix_Volume(SDL.numChannels-1, volume); } - var info = SDL.channels[channel]; - var ret = info.volume * 128; - if (volume != -1) { - info.volume = volume / 128; - if (info.audio) info.audio.volume = info.volume; - } - return ret; + return SDL.setGetVolume(SDL.channels[channel], volume); }, Mix_SetPanning: function() { @@ -1135,13 +1144,13 @@ var LibrarySDL = { Mix_HookMusicFinished__deps: ['Mix_HaltMusic'], Mix_HookMusicFinished: function(func) { SDL.hookMusicFinished = func; - if (SDL.music) { // ensure the callback will be called, if a music is already playing - SDL.music['onended'] = _Mix_HaltMusic; + if (SDL.music.audio) { // ensure the callback will be called, if a music is already playing + SDL.music.audio['onended'] = _Mix_HaltMusic; } }, - Mix_VolumeMusic: function(func) { - return 0; // TODO + Mix_VolumeMusic: function(volume) { + return SDL.setGetVolume(SDL.music, volume); }, Mix_LoadMUS: 'Mix_LoadWAV_RW', @@ -1155,31 +1164,32 @@ var LibrarySDL = { if (!audio) return 0; audio.loop = loops != 1; // TODO: handle N loops for finite N audio.play(); + audio.volume = SDL.music.volume; audio['onended'] = _Mix_HaltMusic; // will send callback - SDL.music = audio; + SDL.music.audio = audio; return 0; }, - Mix_PauseMusic: function(id) { - var audio = SDL.audios[id]; + Mix_PauseMusic: function() { + var audio = SDL.music.audio; if (!audio) return 0; - audio.audio.pause(); + audio.pause(); return 0; }, - Mix_ResumeMusic: function(id) { - var audio = SDL.audios[id]; + Mix_ResumeMusic: function() { + var audio = SDL.music.audio; if (!audio) return 0; - audio.audio.play(); + audio.play(); return 0; }, Mix_HaltMusic: function() { - var audio = SDL.music; + var audio = SDL.music.audio; if (!audio) return 0; audio.src = audio.src; // rewind audio.pause(); - SDL.music = null; + SDL.music.audio = null; if (SDL.hookMusicFinished) { FUNCTION_TABLE[SDL.hookMusicFinished](); } @@ -1191,11 +1201,11 @@ var LibrarySDL = { Mix_FadeOutMusic: 'Mix_HaltMusic', // XXX ignore fading out effect Mix_PlayingMusic: function() { - return (SDL.music && !SDL.music.paused) ? 1 : 0; + return (SDL.music.audio && !SDL.music.audio.paused) ? 1 : 0; }, Mix_PausedMusic: function() { - return (SDL.music && SDL.music.paused) ? 1 : 0; + return (SDL.music.audio && SDL.music.audio.paused) ? 1 : 0; }, // SDL TTF |