aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Bishop <mbtyke@gmail.com>2013-03-08 18:03:12 -0500
committerMichael Bishop <mbtyke@gmail.com>2013-03-08 18:03:12 -0500
commit81cdeaa3766e34acfb2f5cbaa25cf71d7d761bcc (patch)
tree36472b14ab9dd27e499c3871f1a5a152f3a6b0eb
parent404380d16573f326cd04363dd926cdd303662dc6 (diff)
Added test and fixed bugs exposed by the test.
-rw-r--r--src/library_sdl.js40
-rw-r--r--tests/sdl_audio_mix.c12
2 files changed, 31 insertions, 21 deletions
diff --git a/src/library_sdl.js b/src/library_sdl.js
index a7a59a89..3dbb9a33 100644
--- a/src/library_sdl.js
+++ b/src/library_sdl.js
@@ -1333,10 +1333,10 @@ var LibrarySDL = {
// If the user asks us to allocate a channel automatically, get the first
// free one.
if (channel == -1) {
- channel = 0;
- for (var i = 0; i < SDL.numChannels; i++) {
+ channel = SDL.channelMinimumNumber;
+ for (var i = SDL.channelMinimumNumber; i < SDL.numChannels; i++) {
if (!SDL.channels[i].audio) {
- channel = [Math.max(i, SDL.channelMinimumNumber)];
+ channel = i;
break;
}
}
@@ -1406,6 +1406,7 @@ var LibrarySDL = {
audio.play();
}
audio.volume = channelInfo.volume;
+ audio.paused = false;
return channel;
},
Mix_PlayChannelTimed: 'Mix_PlayChannel', // XXX ignore Timing
@@ -1496,44 +1497,45 @@ var LibrarySDL = {
// http://www.libsdl.org/projects/SDL_mixer/docs/SDL_mixer_38.html#SEC38
// "Note: Does not check if the channel has been paused."
- Mix_Playing: function(id) {
- if (id === -1) {
+ Mix_Playing: function(channel) {
+ if (channel === -1) {
var count = 0;
- for (var i = 0; i < SDL.audios.length; i++) {
+ for (var i = 0; i < SDL.channels.length; i++) {
count += _Mix_Playing(i);
}
return count;
}
- var info = SDL.audios[id];
+ var info = SDL.channels[channel];
if (info && info.audio && !info.audio.paused) {
return 1;
}
return 0;
},
- Mix_Pause: function(id) {
- if (id === -1) {
- for (var i = 0; i<SDL.audios.length;i++) {
+ Mix_Pause: function(channel) {
+ if (channel === -1) {
+ for (var i = 0; i<SDL.channels.length;i++) {
_Mix_Pause(i);
}
return;
}
- var info = SDL.audios[id];
+ var info = SDL.channels[channel];
if (info && info.audio) {
info.audio.pause();
+ info.audio.paused = true;
}
},
// http://www.libsdl.org/projects/SDL_mixer/docs/SDL_mixer_39.html#SEC39
- Mix_Paused: function(id) {
- if (id === -1) {
+ Mix_Paused: function(channel) {
+ if (channel === -1) {
var pausedCount = 0;
- for (var i = 0; i<SDL.audios.length;i++) {
+ for (var i = 0; i<SDL.channels.length;i++) {
pausedCount += _Mix_Paused(i);
}
return pausedCount;
}
- var info = SDL.audios[id];
+ var info = SDL.channels[channel];
if (info && info.audio && info.audio.paused) {
return 1;
}
@@ -1545,14 +1547,14 @@ var LibrarySDL = {
},
// http://www.libsdl.org/projects/SDL_mixer/docs/SDL_mixer_33.html#SEC33
- Mix_Resume: function(id) {
- if (id === -1) {
- for (var i = 0; i<SDL.audios.length;i++) {
+ Mix_Resume: function(channel) {
+ if (channel === -1) {
+ for (var i = 0; i<SDL.channels.length;i++) {
_Mix_Resume(i);
}
return;
}
- var info = SDL.audios[id];
+ var info = SDL.channels[channel];
if (info && info.audio) {
info.audio.play();
}
diff --git a/tests/sdl_audio_mix.c b/tests/sdl_audio_mix.c
index 6866f555..e3431e0c 100644
--- a/tests/sdl_audio_mix.c
+++ b/tests/sdl_audio_mix.c
@@ -17,9 +17,11 @@ void one_iter() {
switch( frames ) {
case 1:
soundChannel = Mix_PlayChannel(-1, sound, 0);
- assert(soundChannel != -1);
+ printf("channel = %d", soundChannel);
+ assert(soundChannel != -1 && soundChannel != 0);
break;
case 2:
+ printf("channel %d is playing = %d", soundChannel, Mix_Playing(soundChannel));
assert(Mix_Playing(soundChannel));
break;
case 30:
@@ -54,7 +56,13 @@ void one_iter() {
int main(int argc, char **argv) {
SDL_Init(SDL_INIT_AUDIO);
-
+ Mix_Init(MIX_INIT_OGG);
+
+ // This reserves channel 0 for other purposes.
+ // We are just going to verify that we are not
+ // allocated channel 0 when we call Mix_PlayChannel(-1, ...)
+ Mix_ReserveChannels(1);
+
int ret = Mix_OpenAudio(0, 0, 0, 0); // we ignore all these..
assert(ret == 0);