WEB Audio API 错误:无法读取属性“getByteFrequencyData”
WEB Audio API Error: Cannot read Property 'getByteFrequencyData'
我正在尝试制作音频栏可视化工具。
阅读网络音频API,我有以下代码:
.HTML:
<audio controls>
<source src="video/DownToEarth.mp3" type="audio/mp3">
</audio>
<canvas id="analyser_render"></canvas>
JAVASCRIPT:
var audioCtx, myAudio, canvas, ctx, source, analyser, bufferLength, dataArray, bars, bar_x, bar_width, bar_height;
window.addEventListener("load", initMp3Player, false);
function initMp3Player(){
var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
var myAudio = document.querySelector('audio');
var source = audioCtx.createMediaElementSource(myAudio);
var analyser = audioCtx.createAnalyser();
var bufferLength = analyser.frequencyBinCount;
var dataArray = new Uint8Array(bufferLength);
analyser.minDecibels = -90;
analyser.maxDecibels = -10;
var canvas = document.getElementById('analyser_render');
ctx = canvas.getContext('2d');
source.connect(analyser);
analyser.connect(audioCtx.destination);
frameLooper();
}
function frameLooper(){
window.requestAnimationFrame(frameLooper);
analyser.getByteFrequencyData(dataArray);
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = '#00CCFF';
bars = 100;
for (var i = 0; i < bars; i++) {
bar_x = i * 3;
bar_width = 2;
bar_height = -(dataArray[i] / 2);
ctx.fillRect(bar_x, canvas.height, bar_width, bar_height);
}
}
现在一切看起来都井井有条,但是每次我尝试运行它时,我都会继续收到错误:未捕获的类型错误:无法读取未定义的属性"getByteFrequencyData"我有数据进入dataArray,但getByteFrequencyData似乎没有从中得到任何东西。
我从这篇文章中读到,我可能想包含一些关于最小和最大分贝范围的行,但这并没有产生任何差异,我仍然收到此错误。
变量
analyser
不存在于您尝试使用它的范围内,因为它是本地函数initMp3Player
。
您需要更改frameLooper
的签名:
function frameLooper(analyser){...
当您调用它时,传递 analyser
,这在您调用它的位置的范围内。
frameLooper(analyser);
以便它可以在您的frameLooper
函数中使用。
或者,您可以在更高的范围内声明analyser
...但避免使用全局变量可能是个好主意。
相关文章:
- TypeError:无法读取属性'推'未定义的JavaScript
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- 未捕获的TypeError无法读取未定义的属性socialsharing
- 未捕获的类型错误:无法读取属性'删除'的未定义
- AngularJS指令出错-无法读取属性'编译'的未定义
- 未捕获的类型错误:无法读取属性'name'即使它存在,也无法定义
- 看到“;未捕获的类型错误:无法读取属性'weight'未定义的“;尽管按照字面上的指示
- angularjs无法读取未定义的属性then
- 无法读取属性'材料'未定义的Three.js
- 得到"TypeError:无法读取属性'filename'未定义的“;调用“npm start
- Soundcloud api"未捕获的类型错误:无法读取属性'uri'“未定义”;
- 未捕获的类型错误:无法读取属性'addEventListener'的null chrome扩展名
- Soundcloud Javascript SDK 3.0-回调无法读取属性'connectCallback
- 未捕获的类型错误:无法读取属性'状态'在react中为null
- JavaScript承诺-无法读取属性'那么'的未定义
- Javascript Float32数组抛出无法读取属性'0'即使数组定义良好,也为null
- 未捕获的类型错误:无法读取属性'中止'的未定义
- 角度推入数组给出:TypeError:无法读取属性'推'的未定义
- http/rxjs catch回调中的Angular 2重定向导致TypeError:无法读取属性'订阅'
- 角度输入模型有条件地从一个属性读取,写入另一个属性