说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

不只是Chrome,Firefox也开始支持Web Audio API

HTML文档下载 WORD文档下载 PDF文档下载
Web Audio API是Javascript中主要用于在网页应用中处理音频请求的一个高级应用接口。目前,Firefox Nightly和Firefox Aurora两个版本已经基本支该持API。

Mozilla公司称,他们一直在为Firefox支持Web Audio API而努力,而今这个愿望就快达成了。目前,Firefox Nightly和Firefox Aurora两个版本已经基本支该持API。Web Audio提供了诸多炫酷的功能,开发者可以基于此创建应用 、游戏,可以说基本上任何一款应用都需要先进的音频处理。


Web Audio API是JavaScript中主要用于在网页应用中处理音频请求的一个高级应用接口,这个API目的是用于让最新技术与传统的游戏音频引擎的综合处理相兼容,也即尽力提供一些桌面音频处理程序的要求。

Web Audio API特性包括:

  • 查看音频播放期间调度事件发生的确切时间;
  • 支持各种类型的音频过滤波器以实现各种效果,包括回声、消除噪音等;
  • 支持利用合成声音(Sound synthesis)创建电子音乐;
  • 支持3D位置音频模拟效果,比如某种声音随着游戏场景而移动;
  • 支持外部输入的声音与WebRTC 进行集成(调用WebRTC,在你的设备中增添吉他声),或者在WebRTC中调用其他地方传输过来的声音;
  • 利用音频数据分析创造良好的可视化声音等。

代码示例

下面是利用Web Audio创建应用的一个简单示例。试想下,当你在创建一款游戏,你想要玩家在点击游戏画布时(game canvas)呈现枪声的声音。为了确保你不会受网络延迟、音频解码器延迟等影响,你可以使用Web Audio来加载音频作为游戏加载进程缓冲区的一部分。

为了营造一个整洁的声音效果,我们可以在点击鼠标时使用循环声音并在鼠标松开后创建渐变效果。下面的这段代码示例演示了这一效果:

// Load the sound file from the networkvar 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 canvascanvas.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 toport 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。

英文出自:Mozilla

备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘