这篇翻译不完整。请帮忙从英语翻译这篇文章

 AnalyserNode 赋予了节点可以提供实时频率及时间域分析的信息。它使一个 AudioNode 通过音频流不做修改的从输入到输出, 但允许你获取生成的数据, 处理它并创建音频可视化.

AnalyzerNode只有一个输入和输出. 即使未连接输出它也会工作.

Without modifying the audio stream, the node allows to get the frequency and time-domain data associated to it, using a FFT.

输入数 1
输出数 1 (但可能是未连接的)
通道计数模式 "explicit"
通道数 1
通道解释 "speakers"

继承

继承自以下父接口:

构造函数

AnalyserNode()
创建一个新的 AnalyserNode 对象实例。

属性

继承属性自 AudioNode

AnalyserNode.fftSize
一个无符号长整形(unsigned long)的值, 用于确定频域的 FFT (快速傅里叶变换) 的大小。
AnalyserNode.frequencyBinCount 只读
一个无符号长整形(unsigned long)的值, 值为fftSize的一半。这通常等于将要用于可视化的数据值的数量。
AnalyserNode.minDecibels
Is a double value representing the minimum power value in the scaling range for the FFT analysis data, for conversion to unsigned byte values — basically, this specifies the minimum value for the range of results when using getByteFrequencyData().
AnalyserNode.maxDecibels
Is a double value representing the maximum power value in the scaling range for the FFT analysis data, for conversion to unsigned byte values — basically, this specifies the maximum value for the range of results when using getByteFrequencyData().
AnalyserNode.smoothingTimeConstant
是一个双精度浮点型(double)的值,表示最后一个分析帧的平均常数 — 基本上,它随时间使值之间的过渡更平滑。

方法

继承方法自 AudioNode.

AnalyserNode.getFloatFrequencyData()
将当前频域数据拷贝进Float32Array数组。
AnalyserNode.getByteFrequencyData()
将当前频域数据拷贝进Uint8Array数组(无符号字节数组)。
AnalyserNode.getFloatTimeDomainData()
将当前波形,或者时域数据拷贝进Float32Array数组。
AnalyserNode.getByteTimeDomainData()
将当前波形,或者时域数据拷贝进 Uint8Array数组(无符号字节数组)。 

例子

注意:查看 Visualizations with Web Audio API 指南以获得更多关于创建音频可视化效果的信息。

基础用法

下面的例子展示了 AudioContext 创建一个 AnalyserNode, 然后用 requestAnimationFrame<canvas> 去反复收集当前音频的时域数据, 并绘制为一个示波器风格的输出(频谱).

更多的例子/信息, 查看 Voice-change-O-matic 演示 (相关代码在 app.js 的 128行~205行).

var audioCtx = new(window.AudioContext || window.webkitAudioContext)();
var analyser = audioCtx.createAnalyser();

// ...

analyser.fftSize = 2048;
var bufferLength = analyser.frequencyBinCount;
var dataArray = new Uint8Array(bufferLength);
analyser.getByteTimeDomainData(dataArray);

// 获取ID为 "oscilloscope" 的画布
var canvas = document.getElementById("oscilloscope");
var canvasCtx = canvas.getContext("2d");

// 绘制一个当前音频源的示波器

function draw() {

  drawVisual = requestAnimationFrame(draw);

  analyser.getByteTimeDomainData(dataArray);

  canvasCtx.fillStyle = 'rgb(200, 200, 200)';
  canvasCtx.fillRect(0, 0, canvas.width, canvas.height);

  canvasCtx.lineWidth = 2;
  canvasCtx.strokeStyle = 'rgb(0, 0, 0)';

  canvasCtx.beginPath();

  var sliceWidth = canvas.width * 1.0 / bufferLength;
  var x = 0;

  for (var i = 0; i < bufferLength; i++) {

    var v = dataArray[i] / 128.0;
    var y = v * canvas.height / 2;

    if (i === 0) {
      canvasCtx.moveTo(x, y);
    } else {
      canvasCtx.lineTo(x, y);
    }

    x += sliceWidth;
  }

  canvasCtx.lineTo(canvas.width, canvas.height / 2);
  canvasCtx.stroke();
};

draw();

规范

Specification Status Comment
Web Audio API
AnalyserNode
Working Draft  

浏览器兼容性

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support14 Yes25 No156
AnalyserNode() constructor55 ?53 No42 ?
fftSize141225 No156
frequencyBinCount141225 No156
minDecibels141225 No156
maxDecibels141225 No156
smoothingTimeConstant141225 No156
getFloatFrequencyData141225 No156
getByteFrequencyData141225 No156
getFloatTimeDomainData141225 No156
getByteTimeDomainData141225 No156
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Basic support Yes14 Yes2615 ? Yes
AnalyserNode() constructor5555 ?5342 ?6.0
fftSize Yes14 Yes2615 ? Yes
frequencyBinCount Yes14 Yes2615 ? Yes
minDecibels Yes14 Yes2615 ? Yes
maxDecibels Yes14 Yes2615 ? Yes
smoothingTimeConstant Yes14 Yes2615 ? Yes
getFloatFrequencyData Yes14 Yes2615 ? Yes
getByteFrequencyData Yes14 Yes2615 ? Yes
getFloatTimeDomainData Yes14 Yes2615 ? Yes
getByteTimeDomainData Yes14 Yes2615 ? Yes

相关内容

文档标签和贡献者

此页面的贡献者: luojia, maicss, yvan0423, WhiteMind, Ambar, shanghui, teoli, Darrel.Hsu
最后编辑者: luojia,