我刚刚在互联网上遇到了一个完全用 JavaScript 编写的任天堂模拟器,但它没有声音。这让我想到:有没有办法在浏览器中使用 JavaScript 合成声音然后播放?如果一般情况下不可能,那么是否有任何 Safari/Opera/FireFox/IE/Etc。使之成为可能的扩展?
我问的不是合成声音的技术,只是播放由浏览器中运行的代码合成的声音的技术。
我刚刚在互联网上遇到了一个完全用 JavaScript 编写的任天堂模拟器,但它没有声音。这让我想到:有没有办法在浏览器中使用 JavaScript 合成声音然后播放?如果一般情况下不可能,那么是否有任何 Safari/Opera/FireFox/IE/Etc。使之成为可能的扩展?
我问的不是合成声音的技术,只是播放由浏览器中运行的代码合成的声音的技术。
我想你最好的选择是让 Javascript 使用 ExternalInterface ( http://www.adobe.com/devnet/flash/articles/external_interface.html ) 与 Flash 对话。Flash 现在有一种在声音缓冲区和通用 ByteArray 类之间传输数据的方法。
http://www.adobe.com/devnet/flash/articles/dynamic_sound_generation/
您可以使用 Flex SDK http://www.adobe.com/products/flex/免费开发 Flash 。
大多数开发人员在希望使用 JavaScript 将声音添加到他们的应用程序时会使用SoundManager 2 。它具有钩子,因此 JavaScript 可以与 Flash 8 和 9 功能交互。我不确定它是否暴露了使用字节数据的能力,我猜你正在追求,我从来没有处理过这个问题。
原来NES模拟器的作者找到了一个动态音频库:
https://github.com/bfirsh/dynamicaudio.js
我还没有尝试过,但文档看起来很有希望:
var dynamicaudio = new DynamicAudio({'swf': '/static/dynamicaudio.swf'})
写(样本);// 播放 -1.0 到 1.0 范围内的浮点音频样本数组。
理论上,应该可以合成声音,然后让浏览器使用数据 URL 播放它们。
在实践中,Steven Wittens 实际上已经制作了这种技术的演示。encodeAudio8bit
和encodeAudio16bit
函数是魔法发生的地方。