振荡器值在 safari 中没有变化?
Oscillator value does not change in safari?
我正在尝试将网络音频 api 与 NexusUI JS 一起用于 dial/knobs?
在 chrome 中,表盘正在改变振荡器频率,但在 safari 中,它的播放我认为默认为 440hz。
有人可以告诉我我错过了什么或做错了什么吗?看来我的方向是正确的,因为我在 chrome 中得到输出,因为 safari 非常严格,我忽略了一些基本错误。
使用 nexusUI 的原因:它是我发现的最简约的 dial/knob。我只需要一个超级基本的旋钮。拨动开关我可以很容易地用播放/暂停按钮代替。
我正在尝试做的事情的例子。 (Same on codepen)
document.body.style.backgroundColor = "#2a2c2d";
var power = new Nexus.Toggle("#power", {
state: false
});
Nexus.colors.accent = "#16e1ff";
Nexus.colors.fill = "#2a2c2d";
Nexus.colors.accent = "#16e1ff";
var dial = new Nexus.Dial("#dial");
dial.value = 0;
dial.min = 20;
dial.max = 6000;
dial.on("change", function (v) {
knb1.frequency.value = v;
console.log(v);
return v;
});
window.AudioContext = window.AudioContext || window.webkitAudioContext;
var context = new AudioContext();
var knb1 = context.createOscillator();
var knb1Gain = context.createGain();
var breath1 = context.createOscillator();
var breathGain1 = context.createGain();
knb1.type = "sine";
knb1Gain.gain.value = 0.1 / 8;
knb1.connect(knb1Gain);
knb1Gain.connect(context.destination);
breath1.connect(breathGain1);
breath1.type = "sine";
breath1.frequency.value = 0.01;
breathGain1.gain.value = (0.2 + 0.01) / 8;
knb1.start();
context.onstatechange = function () {
console.log(context.state);
};
power.on("change", function (v) {
v ? context.resume() : context.suspend();
});
<script src="https://cdn.jsdelivr.net/npm/nexusui@latest/dist/NexusUI.js"></script>
<div id="power"><div>
<div id="dial"></div>
我的代码有误。
knb1.frequency.value = v;
错了!
正确的行是knb1.frequency.setValueAtTime(v, context.currentTime);
更改此行解决了我的问题。
我正在尝试将网络音频 api 与 NexusUI JS 一起用于 dial/knobs?
在 chrome 中,表盘正在改变振荡器频率,但在 safari 中,它的播放我认为默认为 440hz。
有人可以告诉我我错过了什么或做错了什么吗?看来我的方向是正确的,因为我在 chrome 中得到输出,因为 safari 非常严格,我忽略了一些基本错误。
使用 nexusUI 的原因:它是我发现的最简约的 dial/knob。我只需要一个超级基本的旋钮。拨动开关我可以很容易地用播放/暂停按钮代替。
我正在尝试做的事情的例子。 (Same on codepen)
document.body.style.backgroundColor = "#2a2c2d";
var power = new Nexus.Toggle("#power", {
state: false
});
Nexus.colors.accent = "#16e1ff";
Nexus.colors.fill = "#2a2c2d";
Nexus.colors.accent = "#16e1ff";
var dial = new Nexus.Dial("#dial");
dial.value = 0;
dial.min = 20;
dial.max = 6000;
dial.on("change", function (v) {
knb1.frequency.value = v;
console.log(v);
return v;
});
window.AudioContext = window.AudioContext || window.webkitAudioContext;
var context = new AudioContext();
var knb1 = context.createOscillator();
var knb1Gain = context.createGain();
var breath1 = context.createOscillator();
var breathGain1 = context.createGain();
knb1.type = "sine";
knb1Gain.gain.value = 0.1 / 8;
knb1.connect(knb1Gain);
knb1Gain.connect(context.destination);
breath1.connect(breathGain1);
breath1.type = "sine";
breath1.frequency.value = 0.01;
breathGain1.gain.value = (0.2 + 0.01) / 8;
knb1.start();
context.onstatechange = function () {
console.log(context.state);
};
power.on("change", function (v) {
v ? context.resume() : context.suspend();
});
<script src="https://cdn.jsdelivr.net/npm/nexusui@latest/dist/NexusUI.js"></script>
<div id="power"><div>
<div id="dial"></div>
我的代码有误。
knb1.frequency.value = v;
错了!
正确的行是knb1.frequency.setValueAtTime(v, context.currentTime);
更改此行解决了我的问题。