diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-06-25 21:04:43 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-06-25 21:04:43 -0700 |
commit | eabb7aca36fd1f843ba4693e7ab6aea50c3cad9b (patch) | |
tree | c15ef6b058ef11d1b00d56d285b4a62b06c7e6f8 | |
parent | 6c4cc9b0b8e1f6451fc4d376ef8260979f169c05 (diff) |
refactor Mix_PlayChannel and fix volume for RAW
-rw-r--r-- | src/library_sdl.js | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/src/library_sdl.js b/src/library_sdl.js index 78f8e1e1..88649c38 100644 --- a/src/library_sdl.js +++ b/src/library_sdl.js @@ -1139,7 +1139,9 @@ var LibrarySDL = { Mix_PlayChannel: function(channel, id, loops) { // TODO: handle loops - var audio = SDL.audios[id].audio; + var info = SDL.audios[id]; + if (!info) return 0; + var audio = info.audio; if (!audio) return 0; if (channel == -1) { channel = 0; @@ -1150,19 +1152,20 @@ var LibrarySDL = { } } } - var info = SDL.channels[channel]; - info.audio = audio.cloneNode(true); + var channelInfo = SDL.channels[channel]; + channelInfo.audio = audio = audio.cloneNode(true); if (SDL.channelFinished) { - info.audio['onended'] = function() { // TODO: cache these + audio['onended'] = function() { // TODO: cache these Runtime.getFuncWrapper(SDL.channelFinished)(channel); } } - if (SDL.audios[id].buffer) { - audio["mozWriteAudio"](SDL.audios[id].buffer); + if (info.buffer) { + audio['mozSetup'](SDL.mixerNumChannels, SDL.mixerFrequency); + audio["mozWriteAudio"](info.buffer); } else { - info.audio.play(); + audio.play(); } - info.audio.volume = info.volume; + audio.volume = channelInfo.volume; return channel; }, Mix_PlayChannelTimed: 'Mix_PlayChannel', // XXX ignore Timing |