【发布时间】:2017-09-06 10:43:59
【问题描述】:
我正在学习/玩 Web Audio API,它很棒。 我有一些代码,可以分析音频流的 FFT 并实时进行一些计算。它在浏览器中运行。
但现在我需要做同样的事情,但处理整个音频文件并获取数据数组,而不是实时播放和分析,最好在 Phantomjs 中完成。如果不行,浏览器也可以..
示例代码:
var audioElement = document.getElementById("player");
var audioContext = new AudioContext();
var source = audioContext.createMediaElementSource(audioElement);
analyserNode = audioContext.createAnalyser();
analyserNode.fftSize = 2048;
source.connect(analyserNode);
source.connect(audioContext.destination);
analyserNode.connect(audioContext.destination);
和循环功能:
var freqByteData = new Uint8Array(analyserNode.frequencyBinCount);
analyserNode.getByteFrequencyData(freqByteData);
//do processing FFT data
现在我需要加载一个 mp3 文件,并对其处理一个循环函数以获取一些结果数据数组。所以不要等待它播放,而是立即处理它。
问题是,我从未尝试过 phantomjs。我需要像浏览器一样的准确结果,我也在计算中使用 analyserNode.smoothingTimeConstant。 要求是每秒获取数据 30 次。
如果可能的话,如何重写这段代码并运行它 ./phantomapp 文件.mp3 它将数据保存到一些txt文件或stdout?
如果 phantomjs 无法实现,如何采用这段代码在浏览器中运行?
谢谢
【问题讨论】:
-
PhantomJS 目前不支持音视频。也许看看 Electron 和/或 NW.js?
-
所以你是服务器端的吧?首先感谢 ffmpeg 将您的 mp3 解压缩为原始 wav。然后分析这个原始 wav 就更容易了。几个节点包:npmjs.com/browse/keyword/fft
标签: javascript phantomjs fft web-audio-api