gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 13:31:12 26 4
gpt4 key购买 nike

我想从 <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);

在 0 延迟的 setTimeout 中创建 MediaElementSource

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

关于html - 如何从 HTML5 中的音频标签获取 FFT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10134806/

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