带有 SDL 音频的 Emscripten 工作模型
Posted
技术标签:
【中文标题】带有 SDL 音频的 Emscripten 工作模型【英文标题】:Emscripten worker-model with SDL audio 【发布时间】:2016-05-19 08:33:39 【问题描述】:据我了解 Emscripten 工作者模型,它不支持共享状态。但是,我可以在 SDL 音频回调和我的主循环之间共享全局变量,如果我理解正确的话,这应该是不可能的。 emscripten 是否在主线程上执行音频回调,因此这是可能的,还是我完全误解了工作者概念和全局变量共享?
(我的假设是音频回调在工作人员中执行)。
注意:我指的是没有 pthreads 支持的 emscripten。
【问题讨论】:
【参考方案1】:emscripten 是否在主线程上执行音频回调
是的。
据我所知,浏览器中的 javascript(无论是否从 C++ 编译)都无法从主线程播放音频非。
从https://github.com/kripken/emscripten/blob/1.36.4/src/library_sdl.js 可以看出,Emscripten 在底层使用了 AudioContext,通过https://developer.mozilla.org/en/docs/Web/API/AudioContext 和https://developer.mozilla.org/en-US/docs/Web/API/DedicatedWorkerGlobalScope,AudioContext 只能在主线程中创建,而不能在 Worker 范围内访问。
https://developer.mozilla.org/en/docs/Web/API/AudioContext 提到了 AudioWorker,但它声明了关于 createAudioWorker...
创建一个 AudioWorkerNode,它可以与 Web 工作线程交互以直接生成、处理或分析音频。这已于 2014 年 8 月 29 日添加到规范中,尚未在任何浏览器中实现。
【讨论】:
以上是关于带有 SDL 音频的 Emscripten 工作模型的主要内容,如果未能解决你的问题,请参考以下文章
Emscripten 调用 SDL_Init 冻结浏览器文本输入
如何在 cmake 中使用 emscripten 端口(SDL2 和 Freetype)
如何在 Emscripten + SDL 中禁用窗口事件捕获?