aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-06-25 21:04:43 -0700
committerAlon Zakai <alonzakai@gmail.com>2012-06-25 21:04:43 -0700
commiteabb7aca36fd1f843ba4693e7ab6aea50c3cad9b (patch)
treec15ef6b058ef11d1b00d56d285b4a62b06c7e6f8
parent6c4cc9b0b8e1f6451fc4d376ef8260979f169c05 (diff)
refactor Mix_PlayChannel and fix volume for RAW
-rw-r--r--src/library_sdl.js19
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