javascript - 获取链式振荡器的最终输出频率

标签 javascript web-audio-api

我已经设置了一个带有特雷门琴的网页,并且我正在尝试根据演奏音符的频率来更改网页元素的颜色。我现在生成声音的方式如下所示:

osc1 = page.audioCX.createOscillator();
pos = getMousePos(page.canvas, ev);
osc1.frequency.value = pos.x;

gain = page.audioCX.createGain();
gain.gain.value = 60;

osc2 = page.audioCX.createOscillator();
osc2.frequency.value = 1;

osc2.connect(gain);
gain.connect(osc1.frequency);
osc1.connect(page.audioCX.destination);

它的作用是振荡 osc1 创建的声音的音高。我可以使用 osc1.Frequency.value 将颜色更改为 osc1 的频率,但这不会影响其他部分应用的更改。

如何从这些链接元素中获得合成频率?

最佳答案

您必须自己进行加法(osc1.Frequency.value + 增益输出)。

获取增益输出的最佳当前(但见下文)方法可能是使用 ScriptProcessorNode。您可以仅使用传递到 ScriptProcessorNode 的每个缓冲区中的最后一个样本,并根据您想要更新颜色的频率设置缓冲区大小。

(关于 ScriptProcessorNode 的注意事项:如果没有至少一个输出 channel ,则有一个 bug in Chrome and Safari 会使 ScriptProcessorNode 无法工作。您可能必须使用一个输入和一个输出来创建它,让它发送所有零到输出,并将其连接到目的地,以使其工作。)

近期答案:您还可以尝试使用 AnalyserNode,但在当前规范下,时域数据只能从 AnalyserNode 以字节形式读取,这意味着浮点样本是以某种未指定的方式转换为 [0, 255] 范围内(可能将范围 [-1, 1] 缩放到 [0, 255],因此您需要的值将被剪裁)。最新的规范草案包括 getFloatTimeDomainData 方法,这可能是您最干净的解决方案。据我所知,它似乎已经在 Chrome 中实现,但在 Firefox 中还没有实现。

关于javascript - 获取链式振荡器的最终输出频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28922461/

相关文章:

javascript - 为什么 html video 标签无法加载我的视频?

javascript - 以字符串形式正则表达式获取最大数字

node.js - Web Audio API 在播放时通过 http 流式传输音频标签

javascript - 如何使用网络音频 api 获得音轨样本的正确幅度(不播放)

javascript - Web Audio API 演示在 iOS 上不起作用

javascript - 如何在 JavaScript 中将 PCM 数据编码为 MP3?

javascript - 使用 NuxtJS 和 Vuex 路由 404 - 组件应该调用突变还是操作可以返回 promise ?

javascript - 在 forEach 中使用条件语句时,如何检测每个 child 是否都未满足条件?

javascript - 第一个公共(public)模板。该怎么办?

javascript - 通过 Web Audio API 使用多个 audioContext 是否存在相关问题?