diff --git a/src/library_sdl.js b/src/library_sdl.js index dc8df2465d1d6..1b6aac42cd345 100644 --- a/src/library_sdl.js +++ b/src/library_sdl.js @@ -2821,6 +2821,7 @@ var LibrarySDL = { Mix_ReserveChannels: (num) => { SDL.channelMinimumNumber = num; }, + Mix_PlayChannelTimed__deps: ['Mix_HaltChannel'], Mix_PlayChannelTimed__proxy: 'sync', Mix_PlayChannelTimed: (channel, id, loops, ticks) => { // TODO: handle fixed amount of N loops. Currently loops either 0 or infinite times. @@ -2864,9 +2865,14 @@ var LibrarySDL = { audio.frequency = info.audio.frequency; } audio['onended'] = function() { // TODO: cache these - if (channelInfo.audio == this) { channelInfo.audio.paused = true; channelInfo.audio = null; } + if (channelInfo.audio === this || channelInfo.audio.webAudioNode === this) { + channelInfo.audio.paused = true; channelInfo.audio = null; + } if (SDL.channelFinished) {{{ makeDynCall('vi', 'SDL.channelFinished') }}}(channel); } + if (channelInfo.audio) { + _Mix_HaltChannel(channel); + } channelInfo.audio = audio; // TODO: handle N loops. Behavior matches Mix_PlayMusic audio.loop = loops != 0; @@ -2946,7 +2952,11 @@ var LibrarySDL = { } else if (info.audio) { // Play via the