【问题标题】:PhantomJS analyze FFT data of mp3 file and save itPhantomJS 分析 mp3 文件的 FFT 数据并保存
【发布时间】: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


【解决方案1】:

Github上有一个项目:https://github.com/sebpiq/node-web-audio-api

声称“Web 音频 API 的 Node.js 实现”。

警告:“这甚至不是 alpha。只有当你喜欢冒险时才使用这个库。”

这是一个相关的 SO 问题:Why Web Audio API isn't supported in nodejs?

【讨论】:

  • 谢谢。我知道使用 nodejs 是不可能的。我更新了我的问题并将 nodejs 更改为 phantomjs 作为要求。
【解决方案2】:

对phantomjs一无所知,但是如果您可以使用decodeAudioData将整个文件加载到内存中,则可以使用OfflineAudioContext来处理该文件。这将尽可能快地运行。使用OfflineAudioContext.suspend(time) 停止处理,以便您可以在正确的时间致电AnalyserNode.getByteFrequencyData(freqByteData) 以获取您的频率数据。然后在某个适当的时间安排暂停,并从暂停中resume()

【讨论】:

    猜你喜欢
    • 2014-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    相关资源
    最近更新 更多