javascript - 当我尝试将音频连接到双二阶滤波器时,为什么 JS 会抛出类型错误?

标签 javascript audio typeerror web-audio-api

我一直在涉足 WebAudio API,但由于某种原因,我无法让双二阶滤波器工作。我的振荡器、包络和自定义效果都工作正常,但滤波器一直给我带来麻烦。

我有一个主增益控制vca,我想通过过滤器将其发送到context.destinationvca 的定义简单如下:

var vca = context.createGain();
vca.gain.value = 0.3

我的过滤器是这样构建的:

function lowpass() {
  var filter = context.createBiquadFilter();
  filter.type = 'lowpass';
  filter.frequency.value = 1000
}
var filt = new lowpass

当我尝试运行以下命令时,CodePen 抛出类型错误:

vca.connect(filt);
filt.connect(context.destination)

为什么会发生这种情况?是不是滤波器设置有问题,我连接VCA的方法有问题吗?我构建过滤器的方式?谢谢。

最佳答案

这是创建新过滤器的方式。 lowpass() 是一个常规函数,但 new 关键字将其视为构造函数。

您可以通过将代码作为常规函数调用并从中返回过滤器来修复代码。

function lowpass() {
  var filter = context.createBiquadFilter();
  filter.type = 'lowpass';
  filter.frequency.value = 1000
  return filter;
}
var filt = lowpass()

如果想更进一步,您可以将 context 传递到函数中,而不是依赖于在外部作用域中定义的 context 来使其更清晰一些.

function lowpass(context) {
  var filter = context.createBiquadFilter();
  filter.type = 'lowpass';
  filter.frequency.value = 1000
  return filter;
}
var filt = lowpass(context)

关于javascript - 当我尝试将音频连接到双二阶滤波器时,为什么 JS 会抛出类型错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61423283/

相关文章:

javascript - Laravel 删除按钮不适用于 Ajax 调用

iPhone - 系统声音代码

ios - 测量在 iOS 中内嵌播放的嵌入式 YouTube 视频的音频电平

python - 类型错误:prepare_request_body() 获得关键字参数 'redirect_uri' 的多个值

python - range() 函数产生错误 'TypeError: ' str' object is not callable'

javascript - 将 JS 函数返回的 url 传递到 href

javascript - 跨子域设置 Cookies javascript 陷阱

javascript - 为什么不使用 jquery 将外部内容加载到 HTML 中?

C 跨平台声音输入库

python - TypeError: 'map' object is not subscriptable 错误在 Python 3