【问题标题】:The index is not in the allowed range索引不在允许范围内
【发布时间】:2017-10-12 04:28:51
【问题描述】:

我目前在 Safari 10.1 中遇到了 Tone.Analyzer 的问题。 使用 size > Math.pow(2, 10) (1024) 初始化 Tone.Analyzer 时,出现以下错误: IndexSizeError (DOM Exception 1): The index is not in the allowed range.

我也有submitted this to the ToneJS repository,但我觉得这更像是 Safari 中的一个错误,对吧?

代码

import Tone from 'tone';

const sampleSize = Math.pow(2, 13); // Math.pow(2, 10); works...

this.fft = new Tone.Analyser('fft', sampleSize);
this.panVol = new Tone.PanVol().fan(this.fft).toMaster();

Link to WebpackBin example

但是,我在 interwebz 上找不到任何信息,哪个浏览器接受哪个尺寸,while the Tone.js documentation 提到,the Value must be a power of two in the range 32 to 32768. (Same as in the Web Audio API documentation)

Safaris 音频 API 的 getByteFrequencyData 是否没有实现更大的尺寸? 很想实现一个高精度的均衡器,但较低频率的样本大小需要 > 4000。

【问题讨论】:

    标签: javascript safari web-audio-api


    【解决方案1】:

    WebAudio 规范的早期版本表示,2048 是 AnalyserNode 的最大 FFT 大小。后来的版本做了限制至少 32k,Safari 仍然执行旧的限制。

    【讨论】:

    • 嗯,然后 Math.pow(2, 11) 应该可以工作,但遗憾的是它没有。
    • 检查了代码。 2048 是最大值。由于四舍五入,不确定 Math.pow(2,11) 是否准确返回 2048。
    • 感谢您检查代码。我想我会在 Apples bugtracker 中打开一张票。因为 Firefox 和 Chrome 按照规范实现了它。你介意更新你的答案。然后将其标记为正确,谢谢。
    【解决方案2】:

    我有类似的问题。不使用 Tone.js,但 Safari 11 AudioContext.analyser.fftSize 似乎被限制为 2048 并且没有更多。我实际上需要最大32K。但是,相同的代码在 Apple 桌面上的 Chrome 中运行良好。

    替代方案(遗憾的是)似乎需要导入开源 JS FFT(我喜欢 https://github.com/audioplastic/ooura,虽然我还没有尝试过 JS 版本...C 版本非常好)。宁愿 webRTC 做时域和频域采样和计算的繁重工作。更不用说更轻的解决方案了。

    【讨论】:

    • 是的,我希望 iOS 11 和 macOS High Sierra 能解决这个问题,但是嗯。 ?
    猜你喜欢
    • 2021-04-26
    • 2016-10-05
    • 2016-02-24
    • 1970-01-01
    • 2016-04-05
    • 2013-11-03
    • 2021-11-26
    • 2013-11-20
    • 2013-12-30
    相关资源
    最近更新 更多