Javascript 未捕获类型错误:无法读取属性';getByteTimeDomainData';未定义的

Javascript 未捕获类型错误:无法读取属性';getByteTimeDomainData';未定义的,javascript,jquery,audio-streaming,document-ready,Javascript,Jquery,Audio Streaming,Document Ready,我正在尝试创建一个类似飞翼鸟的游戏,其中麦克风的振幅用于驾驶飞机。问题是,我在尝试使用AnalyzerNode访问音频信号数据时,不断收到“未捕获类型错误:无法读取未定义的属性'getByteTimeDomainData' 我认为问题的产生是因为AudioContext的初始化发生在调用AnalyserNode之后,因为控制台日志显示getAudioAmp()在draw()之前声明$(document).ready()使用console.log() 以下是代码的相关部分: var canvas

我正在尝试创建一个类似飞翼鸟的游戏,其中麦克风的振幅用于驾驶飞机。问题是,我在尝试使用
AnalyzerNode
访问音频信号数据时,不断收到“
未捕获类型错误:无法读取未定义的属性'getByteTimeDomainData'

我认为问题的产生是因为
AudioContext
的初始化发生在调用AnalyserNode之后,因为控制台日志显示
getAudioAmp()
draw()
之前声明
$(document).ready()
使用
console.log()

以下是代码的相关部分:

var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
var audioContext;
var mediaStreamSource;
var analyser;
var bufferLength;
var dataArray;
var myAudio = document.querySelector('audio');

$(document).ready(function() {
  navigator.getUserMedia = (navigator.webkitGetUserMedia ||navigator.mozGetUserMedia ||navigator.msGetUserMedia);
  if (navigator.getUserMedia) {
    navigator.getUserMedia({video: false,audio: true},
                            function(stream) {
                              if (window.AudioContext) {
                                audioContext = new AudioContext();
                              } else {
                                audioContext = new webkitAudioContext();
                              }
                              mediaStreamSource = audioContext.createMediaStreamSource(stream);
                              console.log(1)
                              analyser = audioContext.createAnalyser();   <----initialization of AnalyserNode------------
                              bufferLength = analyser.frequencyBinCount;
                              dataArray = new Uint8Array(bufferLength);
                              mediaStreamSource.connect(analyser);},

                             function(){alert("The following error occured: " + err.name);});
  } else {
      alert('OOPS No browser Support');
  }
});

var getAudioAmp  = function() {
  console.log(2)
  analyser.getByteTimeDomainData(dataArray); <---Line that causes Error----------------
  var total = 0;
  for (var i = 0; i < bufferLength; i++) {
    total += dataArray[i];
    var amp = total / dataArray.length;
  }
  return amp;

}

function draw() {
      console.log(3)
      ctx.clearRect(0, 0, canvas.width, canvas.height);
      amp = getAudioAmp() <----------------where I call getAudioAmp()-------------
      console.log(amp)
      drawScore()
      drawStat()
      drawplane()
      drawBricks()
      collisionDetection()
      score++;
      requestAnimationFrame(draw);
    }

draw(); 
var canvas=document.getElementById(“myCanvas”);
var ctx=canvas.getContext(“2d”);
听力语境;
var-mediaStreamSource;
var分析仪;
变量缓冲长度;
var数据阵列;
var myAudio=document.querySelector('audio');
$(文档).ready(函数(){
navigator.getUserMedia=(navigator.webkitGetUserMedia | | | navigator.mozGetUserMedia | | | navigator.msGetUserMedia);
if(navigator.getUserMedia){
getUserMedia({video:false,audio:true},
功能(流){
if(window.AudioContext){
audioContext=新的audioContext();
}否则{
audioContext=新的webkitAudioContext();
}
mediaStreamSource=audioContext.createMediaStreamSource(流);
控制台日志(1)

Analyzer=audioContext.CreateAnalyzer();您在哪里创建变量
Analyzer
,它被省略了。
draw
函数中的
ctx
是什么?是否
navigator.getUserMedia
需要先运行?kkawabat,您能发布html吗?太好了,这就足够了。