我正在尝试从分析器节点访问 FFT 数据,analyser.getByteFrequencyData(array)但它似乎返回了一个空白数组:
var array = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(array);
Run Code Online (Sandbox Code Playgroud)
但是 usinganalyser.getFloatFrequencyData(array)返回一个数据数组:
var array = new Float32Array(analyser.frequencyBinCount);
analyser.getFloatFrequencyData(array);
Run Code Online (Sandbox Code Playgroud)
我使用的信号链如下:
Source-> Analyser-> ScriptProcessor->Context Destination
那么为什么我不能以字节形式获取频率数据呢?
提前致谢。
javascript audio signal-processing html5-audio web-audio-api
我正在尝试可视化从网页上的元素发出的音频。该元素的来源是通过 sip.js 连接到 Asterisk 调用的 WebRTC 流。音频按预期工作。
但是,当我尝试使用 Web 音频 api 获取频率数据时,它会返回一个全 0 的数组,即使音频正在工作。这似乎是 createMediaElementSource 的问题。如果我调用 getUserMedia 并使用 createMediaStreamSource 将麦克风连接到输入,我确实会得到返回的频率数据。
Chrome 40.0 和 Firefox 31.4 均尝试过此操作。在我的搜索中,我发现 Android Chrome 存在类似错误,但我的桌面 Chrome 和 Firefox 版本似乎应该可以正常运行。到目前为止,我有一种感觉,该错误可能是由于音频播放器从 sip.js 中的另一个 AudioContext 获取音频,或者与 CORS 有关。我尝试过的所有演示都可以正常工作,但仅使用 createMediaStreamSource 来获取麦克风音频,或使用 createMediaElementSource 来播放文件(而不是流式传输到元素)。
我的代码:
var context = new (window.AudioContext || window.webkitAudioContext)();
var analyser = context.createAnalyser();
analyser.fftSize = 64;
analyser.minDecibels = -90;
analyser.maxDecibels = -10;
analyser.smoothingTimeConstant = 0.85;
var frequencyData = new Uint8Array(analyser.frequencyBinCount);
var visualisation = $("#visualisation");
var barSpacingPercent = 100 …Run Code Online (Sandbox Code Playgroud)