/*
Simple DirectMedia Layer
- Copyright (C) 1997-2018 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
#if SDL_AUDIO_DRIVER_EMSCRIPTEN
#include "SDL_audio.h"
-#include "SDL_log.h"
#include "../SDL_audio_c.h"
#include "SDL_emscriptenaudio.h"
-#include "SDL_assert.h"
#include <emscripten/emscripten.h>
{
const int framelen = (SDL_AUDIO_BITSIZE(this->spec.format) / 8) * this->spec.channels;
EM_ASM_ARGS({
+ var SDL2 = Module['SDL2'];
var numChannels = SDL2.audio.currentOutputBuffer['numberOfChannels'];
for (var c = 0; c < numChannels; ++c) {
var channelData = SDL2.audio.currentOutputBuffer['getChannelData'](c);
}
EM_ASM_ARGS({
+ var SDL2 = Module['SDL2'];
var numChannels = SDL2.capture.currentCaptureBuffer.numberOfChannels;
for (var c = 0; c < numChannels; ++c) {
var channelData = SDL2.capture.currentCaptureBuffer.getChannelData(c);
EMSCRIPTENAUDIO_CloseDevice(_THIS)
{
EM_ASM_({
+ var SDL2 = Module['SDL2'];
if ($0) {
if (SDL2.capture.silenceTimer !== undefined) {
clearTimeout(SDL2.capture.silenceTimer);
/* based on parts of library_sdl.js */
- /* create context (TODO: this puts stuff in the global namespace...)*/
+ /* create context */
result = EM_ASM_INT({
- if(typeof(SDL2) === 'undefined') {
- SDL2 = {};
+ if(typeof(Module['SDL2']) === 'undefined') {
+ Module['SDL2'] = {};
}
+ var SDL2 = Module['SDL2'];
if (!$0) {
SDL2.audio = {};
} else {
}
SDL_zerop(this->hidden);
#endif
+ this->hidden = (struct SDL_PrivateAudioData *)0x1;
/* limit to native freq */
- this->spec.freq = EM_ASM_INT_V({ return SDL2.audioContext.sampleRate; });
+ this->spec.freq = EM_ASM_INT_V({
+ var SDL2 = Module['SDL2'];
+ return SDL2.audioContext.sampleRate;
+ });
SDL_CalculateAudioSpec(&this->spec);
to be honest. */
EM_ASM_({
+ var SDL2 = Module['SDL2'];
var have_microphone = function(stream) {
//console.log('SDL audio capture: we have a microphone! Replacing silence callback.');
if (SDL2.capture.silenceTimer !== undefined) {
if ((SDL2 === undefined) || (SDL2.capture === undefined)) { return; }
audioProcessingEvent.outputBuffer.getChannelData(0).fill(0.0);
SDL2.capture.currentCaptureBuffer = audioProcessingEvent.inputBuffer;
- Runtime.dynCall('vi', $2, [$3]);
+ dynCall('vi', $2, [$3]);
};
SDL2.capture.mediaStreamNode.connect(SDL2.capture.scriptProcessorNode);
SDL2.capture.scriptProcessorNode.connect(SDL2.audioContext.destination);
SDL2.capture.silenceBuffer.getChannelData(0).fill(0.0);
var silence_callback = function() {
SDL2.capture.currentCaptureBuffer = SDL2.capture.silenceBuffer;
- Runtime.dynCall('vi', $2, [$3]);
+ dynCall('vi', $2, [$3]);
};
SDL2.capture.silenceTimer = setTimeout(silence_callback, ($1 / SDL2.audioContext.sampleRate) * 1000);
} else {
/* setup a ScriptProcessorNode */
EM_ASM_ARGS({
+ var SDL2 = Module['SDL2'];
SDL2.audio.scriptProcessorNode = SDL2.audioContext['createScriptProcessor']($1, 0, $0);
SDL2.audio.scriptProcessorNode['onaudioprocess'] = function (e) {
if ((SDL2 === undefined) || (SDL2.audio === undefined)) { return; }
SDL2.audio.currentOutputBuffer = e['outputBuffer'];
- Runtime.dynCall('vi', $2, [$3]);
+ dynCall('vi', $2, [$3]);
};
SDL2.audio.scriptProcessorNode['connect'](SDL2.audioContext['destination']);
}, this->spec.channels, this->spec.samples, HandleAudioProcess, this);