是否有可能呈现音频文件的可视化?
也许使用 SoundManager2 / Canvas / HTML5 音频?你知道一些技术吗?
我想创建这样的东西:
是否有可能呈现音频文件的可视化?
也许使用 SoundManager2 / Canvas / HTML5 音频?你知道一些技术吗?
我想创建这样的东西:
您在这里有一些示例和教程:http: //www.html5rocks.com/en/tutorials/#webaudio
目前它在最后一个 Chrome 和最后一个 Firefox (Opera ?) 中工作。
演示: http: //www.chromeexperiments.com/tag/audio/
现在要这样做,对于网站的所有访问者,您可以检查通过 Flash“代理”访问音频数据的 SoundManagerV2.js http://www.schillmania.com/projects/soundmanager2/demo/api/(他们已经在 HTML5 音频引擎上工作,一旦主流浏览器实现它就会发布它)
由您在画布中绘制 3 个不同的音频数据:波形、均衡器和峰值。
soundManager.defaultOptions.whileplaying = function() { // AUDIO analyzer !!!
$document.trigger({ // DISPATCH ALL DATA RELATIVE TO AUDIO STREAM // AUDIO ANALYZER
type : 'musicLoader:whileplaying',
sound : {
position : this.position, // In milliseconds
duration : this.duration,
waveformDataLeft : this.waveformData.left, // Array of 256 floating-point (three decimal place) values from -1 to 1
waveformDataRight: this.waveformData.right,
eqDataLeft : this.eqData.left, // Containing two arrays of 256 floating-point (three decimal place) values from 0 to 1
eqDataRight : this.eqData.right, // ... , the result of an FFT on the waveform data. Can be used to draw a spectrum (frequency range)
peakDataLeft : this.peakData.left, // Floating-point values ranging from 0 to 1, indicating "peak" (volume) level
peakDataRight : this.peakData.right
}
});
};
使用 HTML5,您可以获得:
var freqByteData = new Uint8Array(analyser.frequencyBinCount);
var timeByteData = new Uint8Array(analyser.frequencyBinCount);
function onaudioprocess() {
analyser.getByteFrequencyData(freqByteData);
analyser.getByteTimeDomainData(timeByteData);
/* draw your canvas */
}
该工作了 !;)
通过 FFT 运行样本,然后将给定频率范围内的能量显示为给定点的图形高度。您通常希望频率范围从左侧的大约 20 Hz 到右侧的大致采样率/2(如果采样率超过 40 KHz,则为 20 KHz)。
不过,我不太确定在 JavaScript 中这样做。不要误会我的意思:JavaScript 完全有能力实现 FFT——但我完全不确定是否可以实时进行。OTOH,对于用户查看,您每秒可以进行大约 5-10 次更新,这可能是一个更容易达到的目标。例如,每 200 毫秒更新 20 毫秒的样本可能是合理的希望,但我当然不能保证您能够跟上这一点。
为此,您需要进行傅里叶变换(查找 FFT),这在 javascript 中会很慢,并且目前无法实时进行。
如果您真的想在浏览器中执行此操作,我建议您在 java/silverlight 中执行此操作,因为它们在浏览器中提供了最快的数字处理速度。
这是不可能的,除非通过将音频作为二进制数据获取并解压缩 MP3(不是 JavaScript 的强项),或者使用Java 或 Flash 来提取您需要的信息位(这似乎是可能的,但也似乎更令人头疼比我个人愿意承担的)。
但是您可能对Dave Humphrey 的音频实验感兴趣,其中包括一些很酷的可视化内容。他通过修改浏览器源代码并重新编译它来做到这一点,所以这对你来说显然不是一个现实的解决方案。但是这些实验可能会导致将来向<audio>
元素添加新功能。