0

我在这里找到了一个简单的网络音频 API 示例:http: //jsfiddle.net/stuartmemo/xMruN/

当我在 JsFiddle 中运行它时,它运行良好(在 Chrome 中)但是当我在本地复制代码时它不起作用。这是我在本地使用的代码:

<!DOCTYPE html >
<meta charset="UTF-8">
<title>Test</title>

<script type="text/javascript">
var context = new webkitAudioContext(),
oscillator = context.createOscillator();
oscillator.type = 3;
oscillator.frequency.value = 500;
oscillator.connect(context.destination);
oscillator.noteOn(0);​
</script>

我觉得这有一个我忽略的简单解决方案,但我已经做了 20 分钟。顺便说一句,我正在 Web 服务器上运行我的本地示例(尽管我怀疑我应该这样做)。

谢谢

4

4 回答 4

1

您应该像这样等待窗口加载:

window.addEventListener('load', function () {
    var context, oscillator;
    try {
        context = new webkitAudioContext();
    } catch (e) {
        alert("Your browser does not support Web Audio API");
    }
    oscillator = context.createOscillator();
    oscillator.type = 3;
    oscillator.frequency.value = 500;
    oscillator.connect(context.destination);
    oscillator.noteOn(0); // play it immediately
    oscillator.noteOff(1); // turn it off after 1 second from now
});
于 2013-01-18T12:52:18.983 回答
0

删除了这一行,它可以工作。

oscillator.noteOn(0);​</p>

于 2012-07-23T10:40:16.553 回答
0

振荡器类型不再用整数指定。改用字符串,例如

oscillator.type = 'sawtooth';

我不知道这是否是导致您的问题的原因。也许 JsFiddle 使用了较旧的网络音频 api 实现?

于 2014-09-29T17:02:06.307 回答
0

删除了这一行,它可以工作。

oscillator.noteOn(0);​

noteOn 方法在 Web Audio API 中已弃用。您可以将该行更改为:

oscillator.start(0);

......它应该按最初的预期工作。

顺便说一句,我正在 Web 服务器上运行我的本地示例(尽管我怀疑我应该这样做)。

实际上,除非您从服务器运行,否则某些 Web Audio API 的东西将无法工作。因此,您通过运行本地服务器来做正确的事情。

于 2014-08-31T16:30:48.027 回答