索引不在允许的范围内

时间:2017-04-25 09:06:57

标签: javascript safari web-audio

我目前在Safari 10.1中遇到Tone.Analyzer问题。 使用Tone.Analyzer(1024)初始化size > Math.pow(2, 10)时,出现以下错误: 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的任何信息,哪个浏览器接受the Value must be a power of two in the range 32 to 32768. while the Tone.js documentation

的大小(Same as in the Web Audio API documentation)提及

Safaris Audio API getByteFrequencyData是否未实现更高的尺寸? 希望实现高度精确的均衡器,但样本量需要>低频率为4000。

2 个答案:

答案 0 :(得分:1)

早期版本的WebAudio规范称2048是AnalyserNode的最大FFT大小。后来版本的限制至少为32k,Safari仍然实现旧的限制。

答案 1 :(得分:0)

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

备选(遗憾的是)似乎需要导入一个开源的JS FFT(我喜欢https://github.com/audioplastic/ooura,虽然我没有尝试过JS版本...... C版非常好)。更愿意webRTC完成时域和频域采样和计算的繁重工作。将来更加明确,更不用说更轻松的解决方案了。