振荡器值在 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);

更改此行解决了我的问题。