英文原文:Web Audio API comes to Firefox
Mozilla 公司称,他们一直在为 Firefox 支持 Web Audio API 而努力,而今这个愿望就快达成了。目前,Firefox Nightly 和 Firefox Aurora 两个版本已经基本支该持 API。Web Audio 提供了诸多炫酷的功能,开发者可以基于此创建应用 、游戏,可以说基本上任何一款应用都需要先进的音频处理。
Web Audio API 是 JavaScript 中主要用于在网页应用中处理音频请求的一个高级应用接口,这个 API 目的是用于让最新技术与传统的游戏音频引擎的综合处理相兼容,也即尽力提供一些桌面音频处理程序的要求。
Web Audio API 特性包括:
代码示例
下面是利用 Web Audio 创建应用的一个简单示例。试想下,当你在创建一款游戏,你想要玩家在点击游戏画布时(game canvas)呈现枪声的声音。为了确保你不会受网络延迟、音频解码器延迟等影响,你可以使用 Web Audio 来加载音频作为游戏加载进程缓冲区的一部分。
为了营造一个整洁的声音效果,我们可以在点击鼠标时使用循环声音并在鼠标松开后创建渐变效果。下面的这段代码示例演示了这一效果:
// Load the sound file from the network var decodedBuffer; var ctx = new AudioContext (); var xhr = new XMLHttpRequest (); xhr.open ("GET", "gunshot.ogg", true); xhr.responseType = "arraybuffer"; xhr.send (); xhr.onload = function() { // At this point, xhr.response contains the encoded data for gunshot.ogg, // so let's decode it into an AudioBuffer first. ctx.decodeAudioData (xhr.response, function onDecodeSuccess (buffer) { decodedBuffer = buffer; }, function onDecodeFailure () { alert ('decode error!'); }); }; // Set up a mousedown/mouseup handler on your game canvas canvas.addEventListener ("mousedown", function onMouseDown () { var src = ctx.createBufferSource (); src.buffer = decodedBuffer; // play back the decoded buffer src.loop = true; // set the sound to loop while the mouse is down var gain = ctx.createGain (); // create a gain node in order to create the fade-out effect when the mouse is released src.connect (gain); gain.connect (ctx.destination); canvas.src = src; // save a reference to our nodes to use it later canvas.gain = gain; src.start (0); // start playback immediately }, false); canvas.addEventListener ("mouseup", function onMouseUp () { var src = canvas.src, gain = canvas.gain; src.stop (ctx.currentTime + 0.2); // set up playback to stop in 200ms gain.gain.setValueAtTime (1.0, ctx.currentTime); gain.gain.linearRampToValueAtTime (0.001, ctx.currentTime + 0.2);// set up the sound to fade out within 200ms }, false);
Web Audio API 还未成为 W3C 标准
谷歌声称,Chrome 是首个实现 Web Audio API,但对于 WebKit 核心的浏览器,需要加上 webkitAudioContext 的前缀。Mozilla 表示,其一直在与 W3C Audio 工作小组讨论 API 问题,并试图解决 API 早期版本存在的一些问题。也就是说,打破代码的向后兼容性能,即解决 webkitAudioContext 前缀问题。值得一提的是,很多 Web Audio API 功能,比如说创建 AudioNodes 或者是解码音频文件,都是采用 AudioContext 的方法。AudioContext(W3C)是一种管理、播放声音的对象。
如果你也想开发音乐应用或者游戏,不妨参考 how to port those applications to the standard API;此外,webkitAudioContext monkeypatch 能够帮助你自动处理一些变化以及如何在 API 标准中实现 webkitAudioContext。
Firefox 计划
如今,Firefox 已实现了 Web Audio API 标准。如果你是一名 Web 开发者对创建先进的音频上感兴趣,不妨查看 Mozilla 开发团队的这篇基于 AudioContext 的 Porting webkitAudioContext code 或许对你有帮助。
Mozilla 表示,目前正在研究台式机及 Android 设备上的 Firefox 24 支持 Web Audio。Mozilla 称,除非是遇到什么特殊情况,否则不会延迟发布时间,但目前开发者可以在 Nightly 和 Aurora 两个版本中使用大部分 API。