javascript - 未使用带有实时输入的 getFloatFrequencyData 获取网络音频中的频率数据

标签 javascript audio html5-audio web-audio-api

工作示例:https://codepen.io/anon/pen/RGmVgG

我有代码可以获取实时麦克风输入数据并将其输出到系统默认扬声器。我已确认我正在获取数据。

然后我尝试获取频率数据,但它返回为 -Infinity 数组(或 Firefox 中的 -100)。

我已经阅读了 MDN 文档,似乎一切都已就位,但我没有获得频率数据。知道我需要做些什么不同的事情吗?

html

Audio Data:
<div id="audio-data"></div>

Frequency Data:
<div id="frequency-data"></div>

js

window.addEventListener('load', () => {
  navigator.mediaDevices.getUserMedia({audio: true})
    .then((stream) => {
      const audioDataDisplay = document.querySelector('#audio-data');
      const frequencyDataDisplay = document.querySelector('#frequency-data');
      const context = new AudioContext();
      const source = context.createMediaStreamSource(stream);
      const processor = context.createScriptProcessor(256, 1, 1);

      source.connect(processor);
      processor.connect(context.destination);

      // route default microphone audio to default speaker output for system
      // display live audio buffer data
      processor.onaudioprocess = (data) => {
        const channelCount = data.outputBuffer.numberOfChannels;

        for (let i = 0; i < channelCount; i++) {
          const inputChannelData = data.inputBuffer.getChannelData(i);
          const outputChannelData = data.outputBuffer.getChannelData(i);

          for (let j = 0; j < inputChannelData.length; j++) {
            outputChannelData[j] = inputChannelData[j];
          }

          audioDataDisplay.innerHTML = outputChannelData;
        }
      }

      // analyze the frequency data and display data
      // only shows as an array of -Infinity in Chrome, -100 in Firefox.
      const analyser = context.createAnalyser();
      const dataArray = new Float32Array(analyser.frequencyBinCount);

      setInterval(() => {
        analyser.getFloatFrequencyData(dataArray);
        frequencyDataDisplay.innerHTML = dataArray;
      }, 1000);
  });
});

最佳答案

您永远不会将任何东西连接到分析器节点。添加类似内容

    source.connect(analyser);

创建分析器后。

关于javascript - 未使用带有实时输入的 getFloatFrequencyData 获取网络音频中的频率数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40295844/

相关文章:

HTML5 音频/视频停止缓冲区

HTML5 验证错误 : Element source not allowed as a child element of audio in this context

javascript - 我如何通过 Web 声音 API 播放一段声音样本?

javascript - 在原型(prototype)内部定义函数(如 toString 函数)

javascript - 如何检查我的范围变量是否实际包含 NaN?

audio - 开始音频编程的最佳方式?

ios - 大部分为静音的iOS应用中的音量控制

node.js - Electron 无法在 Raspberry Pi 3b+ 中使用 <audio> Html5 标签播放 mp3 音频文件

javascript - 在 JavaScript 中使用 getElementsByClass 更改光标?

javascript - ngTable:无法读取属性 "page"?