Phi*_*enn 1 javascript html5-audio
我从一个网站获得了这个片段(现在不记得在哪里)并且它已经停止工作了.
我用它来演奏音调.
这是我做错了还是Chrome最近改变了?
Play = (function () {
var ctx = new(window.audioContext || window.webkitAudioContext);
return function (duration, freq, finishedCallback) {
duration = +duration;
if (typeof finishedCallback != "function") {
finishedCallback = function () {};
}
var osc = ctx.createOscillator();
osc.type = 0;
osc.connect(ctx.destination);
osc.frequency.value = freq;
osc.noteOn(0);
setTimeout(
function () {
osc.noteOff(0);
finishedCallback();
}
,duration
);
};
})();
Play(50,500)
Run Code Online (Sandbox Code Playgroud)
小智 5
这里有两个问题 - 没有audioContext
(小"a",但此刻不影响Chrome).只需将其更改为:
var ctx = new (window.AudioContext || window.webkitAudioContext);
Run Code Online (Sandbox Code Playgroud)
添加对start()的支持,这是最新的方法.有几种方法可以做到这一点,这是一个基本的例子:
if (osc.start) {
osc.start(0);
}
else {
osc.noteOn(0);
}
Run Code Online (Sandbox Code Playgroud)
(当然,osc.noteOff(0)
➜ osc.stop(0)
也是如此)
Play = (function() {
var ctx = new(AudioContext || webkitAudioContext);
return function(duration, freq, finishedCallback) {
duration = +duration;
if (typeof finishedCallback != "function") {
finishedCallback = function() {};
}
var osc = ctx.createOscillator();
osc.type = 0;
osc.connect(ctx.destination);
osc.frequency.value = freq;
if (osc.start) osc.start();
else osc.noteOn(0);
setTimeout(
function() {
if (osc.stop) osc.stop(0);
else osc.noteOff(0);
finishedCallback();
}, duration
);
};
})();
Play(50, 500)
Run Code Online (Sandbox Code Playgroud)