如何从HTML5中的音频标签获取FFT

我想从< audio>获得FFT数据.标记,但没有任何语法错误它不起作用.看一下Web Audio api文档,我写了一个示例代码,这是我的代码
<audio id="aud" controls="controls" src="test.mp3"></audio>

<script type="text/javascript">
var audioElement = document.getElementById("aud");
var audioContext = new webkitaudiocontext();
var streamingAudioSource = audioContext.createMediaElementSource(audioElement);
var jsProcessor = audioContext.createJavaScriptNode(4096,1,1);
jsProcessor.onaudioprocess = process;
var analyser = audioContext.createAnalyser();
analyser.fftSize = 2048;

//streaming:AudioSource->jsProcessor->analyser->destination
streamingAudioSource.connect(jsProcessor);
jsProcessor.connect(analyser);
analyser.connect(audioContext.destination);
//autoplay
audioElement.play();
function process(event){
    var freqByteData = new Uint8Array(analyser.frequencyBinCount);
    analyser.getByteFrequencyData(freqByteData);
    document.getElementById("info").innerHTML=freqByteData[1];//show data in div
}
</script>

我的Chrome版本是20.0.1096.1 dev-m,我认为它运行良好.通过process(),我试着写下freqByteData,但它显示0,并且它们都是0.
我的代码必定有问题,我想知道如何从音频标签获取频率数据.

解决方法

如果在window.onload之前调用createMediaSourceElement,它似乎会中断.有关此问题的错误报告: http://code.google.com/p/chromium/issues/detail?id=112368

目前有两种解决方法

在执行整个javascript之前等待窗口加载事件

window.addEventListener('load',function(){
  // your code
},false);

要么

在setTimeout中创建MediaElementSource,延迟为0

setTimeout(function (){
  var streamingAudioSource = audioContext.createMediaElementSource(audioElement);
  var jsProcessor = audioContext.createJavaScriptNode(4096,1);
  // The rest of the code
},0);

相关文章

HTML5和CSS3实现3D展示商品信息的代码
利用HTML5中的Canvas绘制笑脸的代码
Html5剪切板功能的实现
如何通过HTML5触摸事件实现移动端简易进度条
Html5移动端获奖无缝滚动动画实现
关于HTML5和CSS3实现机器猫的代码