diff options
author | ILOVEPIE <thehairyrock@gmail.com> | 2013-03-21 10:26:51 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-09-24 16:56:44 -0700 |
commit | 0462f14bd6b6bdd9ad6adee0e30bddebab6da144 (patch) | |
tree | 6ebdb36381fed047a2e0b634d4f9a91705b4ca9e | |
parent | abeaac2b2c9560cfb6cd6f00249e098ad733cc0e (diff) |
Rewritten with audioBuffers
Added myself to AUTHORS
Signed-off-by: ILOVEPIE <thehairyrock@gmail.com>
-rw-r--r-- | AUTHORS | 1 | ||||
-rw-r--r-- | src/library_sdl.js | 62 |
2 files changed, 35 insertions, 28 deletions
@@ -97,4 +97,5 @@ a license to everyone to use it as detailed in LICENSE.) * Charlie Birks <admin@daftgames.net> * Ranger Harke <ranger.harke@autodesk.com> (copyright owned by Autodesk, Inc.) * Tobias Vrinssen <tobias@vrinssen.de> +* Patrick R. Martin <patrick.martin.r@gmail.com> diff --git a/src/library_sdl.js b/src/library_sdl.js index c5bbb989..a2d0457b 100644 --- a/src/library_sdl.js +++ b/src/library_sdl.js @@ -1489,8 +1489,8 @@ var LibrarySDL = { // Mozilla Audio API/WebAudioAPI try { SDL.audio.audioOutput = new Audio(); - SDL.audio.hasWebkitAudio = ((typeof(AudioContext) === "function")||(typeof(webkitAudioContext) === "function")); - if(typeof(SDL.audio.audioOutput['mozSetup'])==="function"||!SDL.audio.hasWebkitAudio){ + SDL.audio.hasWebAudio = ((typeof(AudioContext) === "function")||(typeof(webkitAudioContext) === "function")); + if(!SDL.audio.hasWebAudio&&(typeof(SDL.audio.audioOutput['mozSetup'])==="function")){ SDL.audio.audioOutput['mozSetup'](SDL.audio.channels, SDL.audio.freq); // use string attributes on mozOutput for closure compiler SDL.audio.mozBuffer = new Float32Array(totalSamples); SDL.audio.pushAudio = function(ptr, size) { @@ -1503,36 +1503,42 @@ var LibrarySDL = { }else{ if (typeof(AudioContext) === "function") { SDL.audio.context = new AudioContext(); + SDL.audio.soundSource = SDL.audio.context.createBufferSource(); } else if (typeof(webkitAudioContext) === "function") { SDL.audio.context = new webkitAudioContext(); } + SDL.audio.nextSoundSource = 0; + SDL.audio.soundSource = new Array(); + SDL.audio.nextPlayTime = 0; SDL.audio.pushAudio=function(ptr,size){ - SDL.audio.soundSource = SDL.audio.context.createBufferSource(1,SDL.audio.samples,SDL.audio.freq); - if(typeof(SDL.audio.context.createScriptProcessor) === "function"){ - SDL.audio.soundInjector = SDL.audio.context.createScriptProcessor(SDL.audio.samples,1,SDL.audio.channels); - }else{ - SDL.audio.soundInjector = SDL.audio.context.createJavaScriptNode(SDL.audio.samples,1,SDL.audio.channels); - } - SDL.audio.soundInjector.onaudioprocess = function(e) { - SDL.audio.webAudioFunc(SDL.audio.buffer,e); - } - SDL.audio.soundSource.connect(SDL.audio.soundInjector); - SDL.audio.soundInjector.connect(SDL.audio.context.destination); - if(typeof(SDL.audio.soundSource.start)=== "function"){ - SDL.audio.soundSource.start(0); - }else{ - SDL.audio.soundSource.noteOn(0); - } - } - SDL.audio.webAudioFunc = function(ptr,e){ - for(var j = 0; i<e.outputBuffer.numberOfChannels; j++){ - var webaudioBuffer = e.outputBuffer.getChannelData(j); - var q = 0 - for (var i = j*SDL.audio.samples; i < ((j*SDL.audio.samples)+SDL.audio.samples); i++) { - webaudioBuffer[q] = ({{{ makeGetValue('ptr', 'i*2', 'i16', 0, 0) }}}) / 0x8000; // hardcoded 16-bit audio, signed (TODO: reSign if not ta2?) - q++; - } - } + if(SDL.audio.lastSoundSource>-1){ + if(SDL.audio.soundSource[SDL.audio.lastSoundSource].playbackState === 3){ + SDL.audio.soundSource = new Array(); + SDL.audio.nextPlayTime = 0; + SDL.audio.lastSoundSource = -1; + SDL.audio.nextSoundSource = 0; + } + } + SDL.audio.soundSource[SDL.audio.nextSoundSource] = SDL.audio.context.createBufferSource(); + SDL.audio.soundSource[SDL.audio.nextSoundSource].connect(SDL.audio.context.destination); + SDL.audio.soundSource[SDL.audio.nextSoundSource].buffer = SDL.audio.context.createBuffer(SDL.audio.channels,(size / totalSamples),SDL.audio.freq); + for(var j = 0; j<SDL.audio.channels; j++){ + var channelData = SDL.audio.SoundSource[SDL.audio.nextSoundSource].buffer.getChannelData(j); + var samples = SDL.audio.samples; + for(var i = 0; i<samples; i++){ + channelData[i] = ({{{ makeGetValue('ptr', '(i+samples*j)*2', 'i16', 0, 0) }}}) / 0x8000; // hardcoded 16-bit audio, signed (TODO: reSign if not ta2?) + } + } + SDL.audio.nextPlayTime = SDL.audio.context.currentTime+SDL.audio.soundSource[SDL.audio.nextSoundSource].buffer.duration; + + if(typeof(SDL.audio.soundSource.start)=== "function"){ + SDL.audio.soundSource[SDL.audio.nextSoundSource].start(SDL.audio.nextPlayTime); + }else{ + SDL.audio.soundSource[SDL.audio.nextSoundSource].noteOn(SDL.audio.nextPlayTime); + } + + SDL.audio.lastSoundSource = SDL.Audio.nextSoundSource; + SDL.Audio.nextSoundSource++; } } } catch(e) { |