gpt4 book ai didi

javascript - Web Audio API getFloatFrequencyData 函数将 Float32Array 参数数据设置为 -Infinity 值数组

转载 作者:行者123 更新时间:2023-11-28 17:50:23 24 4
gpt4 key购买 nike

我目前正在 Chrome (60.0.3112.90) 中使用 Web Audio API,以便可能通过 FilerReader、AudioContext、createScriptProcessor 和 createAnalyser 构建给定文件的声波。我有以下代码:

const visualize = analyser => {
analyser.fftSize = 256;
let bufferLength = analyser.frequencyBinCount;
let dataArray = new Float32Array(bufferLength);
analyser.getFloatFrequencyData(dataArray);
}

loadAudio(file){
// creating FileReader to convert audio file to an ArrayBuffer
const fileReader = new FileReader();

navigator.getUserMedia = (navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia);

fileReader.addEventListener('loadend', () => {
const fileArrayBuffer = fileReader.result;

let audioCtx = new (window.AudioContext || window.webkitAudioContext)();
let processor = audioCtx.createScriptProcessor(4096, 1, 1);
let analyser = audioCtx.createAnalyser();

analyser.connect(processor);
let data = new Float32Array(analyser.frequencyBinCount);

let soundBuffer;
let soundSource = audioCtx.createBufferSource();

// loading audio track into buffer
audioCtx.decodeAudioData(
fileArrayBuffer,
buffer => {
soundBuffer = buffer;
soundSource.buffer = soundBuffer;

soundSource.connect(analyser);
soundSource.connect(audioCtx.destination);

processor.onaudioprocess = () => {
// data becomes array of -Infinity values after call below
analyser.getFloatFrequencyData(data);
};

visuaulize(analyser);
},
error => 'error with decoding audio data: ' + error.err
);
});

fileReader.readAsArrayBuffer(file);
}

加载文件后,我会一直到达analysisr.getFloatFrequencyData(data)。阅读Web音频API文档后,它说参数是:

The Float32Array that the frequency domain data will be copied to. 
For any sample which is silent, the value is -Infinity.

就我而言,我有一个 mp3 和 wav 文件来测试它,在调用 analysisr.getFloatFrequency(data) 后,这两个文件最终都会给我data 成为“-Infinity”值的数组。

这可能是由于我对 Web Audio 的 API 的无知,但我的问题是为什么这两个包含响亮音频的文件给我一个代表无声样本的数组?

最佳答案

Web Audio AnalyserNode 仅设计用于实时工作。 (它曾经被称为 RealtimeAnalyser。)Web Audio 不具备对缓冲区进行分析的能力;看看另一个库,例如 DSP.js .

关于javascript - Web Audio API getFloatFrequencyData 函数将 Float32Array 参数数据设置为 -Infinity 值数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45697898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com