javascript振荡器在firefox

时间:2016-02-24 17:37:56

标签: javascript html5-audio

所以我试着在javascript中写一个简单的闹钟。目标是一个网站,它可以在指定的时间重复发出声音,并且可以在线加载,即使互联网连接在加载页面后断开也会继续工作。容易,对吧?

问题是产生声音。

我的第一次尝试是:



function beep() {
  var sound = new Audio( "<base64 encoded waw>" );
  sound.play();
}

var beeping;

function startBeeping() {
  beeping = setInterval(beep, 500);
}

function stopBeeping() {
  clearInterval(beeping);
}
&#13;
&#13;
&#13;

这在Firefox(Linux,44.0)中运行良好,但在Chrome(Linux,48.0.2564.109)中加载页面后,它会发出一声嘟嘟声。我试图搜索StackOverflow和其他来源并尝试使用代码很长一段时间(例如在函数外声明sound变量,再次发出蜂鸣声后重新调用它,调用sound.load(),设置{ {1}},在每次发出哔哔声后声明sound.currentTime=0 HTML5元素克隆它...),但无论我做什么,Chrome每次加载都不会多次播放声音。显然,过去存在一些问题,但我们的Chrome版本标记为已解决。

我的第二次尝试是:

&#13;
&#13;
<audio>
&#13;
&#13;
&#13;

与相同的var audioCtx = new (window.AudioContext || window.webkitAudioContext || window.audioContext); var oscillator = audioCtx.createOscillator(); var gainNode = audioCtx.createGain(); gainNode.connect(audioCtx.destination); oscillator.connect(gainNode); gainNode.gain.value = 50; oscillator.frequency.value = 880; oscillator.type = "sawtooth"; oscillator.start(); oscillator.disconnect(gainNode); function startTone() { oscillator.connect(gainNode); }; function stopTone() { oscillator.disconnect(gainNode); } function beep() { startTone(); setTimeout(stopTone, 200); }startBeeping()功能一起使用,这在Chrome中效果很好,但随便在Firefox中无效(我会解释,我保证)。

我还尝试使用stopBeeping()oscillator.start(),同时在每次发出蜂鸣声后再次声明oscillator.stop()oscillator个变量,使用gainNode和{{1}相反,设置oscillator.detune()并返回到880Hz以打开和关闭...问题是,虽然所有这些功能在Chrome中完美运行,但oscillator.start()功能只能每隔一秒工作一次在Firefox上将其输入控制台。这意味着我加载页面,在控制台中键入oscillator.frequency.value=0并且没有任何反应。然后我再次将beep()输入控制台并发出哔哔声。然后再没有任何事情发生,等等。每隔一秒就会发出哔哔声。更有趣的是,即使我将beep()输入控制台也是如此。第一次没有任何事情发生,但它第二次起作用(只发出一次哔哔声)。

此代码的不同版本也产生了一些关于振荡器对象的抱怨&#34;不是&#34;或者&#34;处于错误状态&#34; (这就是消息所说的内容),甚至是语法错误&#34;缺失]&#34;,这完全是奇怪的,因为确实没有语法错误,没有任何方括号和功能仍然每隔一段时间工作......

我的上一个版本(下面,我用它保存在一个beep()文件中并在本地打开)始终可以在Chrome中使用,但在Firefox中可以使用,或者不能完全随机工作。没有更改代码,没有打开新选项卡,只是重新加载和/或尝试多次使用页面)。这意味着,我加载页面一次,它可能在开始时工作,也可能不工作(您可以根据天气知道天气,当您启动警报时可以听到哔声),然后它会工作一次或多次然后再没有。它工作与否的次数一直在变化,我没有弄清楚任何影响它的情况......除了移动我的一些DOM操作代码使其工作或多或少可靠(例如,将beep(); beep()电话移动到alarm.html几乎每次都会打破它。)

&#13;
&#13;
setCurrentTime()
&#13;
&#13;
&#13;

这是什么样的木头?

请不要向我推荐一些jQuery thingie或者一个肯定会在浏览器中运行的JS库/ web-app--我只对这个特定代码的内容感兴趣。我真的不需要在JS中有一个工作警报。

0 个答案:

没有答案