Web Audio API - 加载文件并播放

时间:2014-03-08 21:27:57

标签: javascript audio web

在SO上有一些类似的问题,但似乎语法都已弃用。

我正在尝试从我的DropBox(公共链接)加载声音并在我的应用启动时播放它。

这是我的代码:

var context = new webkitAudioContext();
function start() {
// Note: this will load asynchronously
var request = new XMLHttpRequest();
request.open("GET", "https://dl.dropboxusercontent.com/u/86304379/Pt.%205%20Flood%20the%20Soul.wav", true);
request.responseType = "arraybuffer"; // Read as binary data
// Asynchronous callback
request.onload = function() {
    var data = request.response;

    audioRouting(data);
};
request.send();
}
function audioRouting(data) {
    source = context.createBufferSource(); // Create sound source
    buffer = context.createBuffer(data, true/* make mono */); // Create source buffer from raw binary
    source.buffer = buffer; // Add buffered data to object
    source.connect(context.destination); // Connect sound source to output
    playSound(source); // Pass the object to the play function
}
    // Tell the Source when to play
function playSound() {
    source.noteOn(context.currentTime); // play the source immediately
}

唉 - 我在我的一个函数中调用了playSound(),我得到了

“无法调用方法'noteOn'未定义”

这是因为noteOn已被弃用吗?或者是其他不妥之处。我只想将一些音频加载到音频节点并播放它 - 我没有在网上找到任何足够的代码来显示如何执行此操作。

2 个答案:

答案 0 :(得分:3)

你是对的,noteOn功能确实消失了,现在它是start

user:        crogers
date:        Tue Sep 25 12:56:14 2012 -0700
summary:     noteOn/noteOff changed to start/stop -- added deprecation notes

API与文档一样好 - AudioBufferSourceNode部分是您想要的。

Here's我如何做的一个例子(原谅CoffeeScript)。

答案 1 :(得分:0)

以上是正确的,不推荐使用noteOn。但是因为我们无法确定用户是否会访问仅支持已弃用的呼叫的旧浏览器或仅支持新呼叫的新浏览器,SoundJS通过映射呼叫来设置两者的兼容性。如果您有兴趣,请查看WebAudioPlugin._compatibilitySetUp