Javascript 无法使用ML5.js pitchdetection获取频率值

Javascript 无法使用ML5.js pitchdetection获取频率值,javascript,machine-learning,Javascript,Machine Learning,我使用ML5.js和P5.js来检测乐器的音高。当我允许使用麦克风时,我无法检测频率(获取空值)。回调函数工作正常。下面是我编写的以下代码 <!DOCTYPE html> <html lang="en"> <head> <title>DSP Pitch detector!</title> <meta name="viewport" content="width=device-width, initial-sca

我使用ML5.js和P5.js来检测乐器的音高。当我允许使用麦克风时,我无法检测频率(获取空值)。回调函数工作正常。下面是我编写的以下代码

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>DSP Pitch detector!</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- p5 -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.9.0/p5.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.9.0/addons/p5.dom.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.9.0/addons/p5.sound.min.js"></script>
    <!-- ml5 -->
    <script src="https://unpkg.com/ml5@0.4.0/dist/ml5.min.js"></script>
  </head>

  <body>
     <p>this is detection</p>
    <script>
      // Your code will go here
      // open up your console - if everything loaded properly you should see 0.3.1

      const model_url = 'https://cdn.jsdelivr.net/gh/ml5js/ml5-data-and-models/models/pitch-detection/crepe/';
      let pitch;
      let audioContext;
      let mic;
      let freq = 0;


      console.log('ml5 version:', ml5.version);



      //p5.js
      function setup(){
        createCanvas(600, 600);
        audioContext = getAudioContext();
        mic = new p5.AudioIn();
        mic.start(listening);
      }

      //once listening modal is loaded
      //once modal is loaded we'll call get pitch and got pitch

      function listening() {
        console.log('listening!!');
        pitch = ml5.pitchDetection(
        model_url,
        audioContext,
        mic.stream,
        modelLoaded
        );
      }

      function modelLoaded() {
          console.log('modal loaded!!');
          pitch.getPitch(gotPitch);

      }

      function gotPitch(error, frequency){
          if(error){
              console.error(error)
          }
          else{
              if(frequency){
                  freq = frequency;
              }
            //   console.log(frequency);
          }
        // once you got the pitch and you loaded it ... you watch to decet the pitch again
        pitch.getPitch(gotPitch);
      }


      function draw(){
        background(200);
        textAlign(CENTER,CENTER);
        fill(255);
        textSize(64);
        text(freq.toFixed(2), width/2,height/2)

      }
    </script>
  </body>
</html>


DSP俯仰检测器!
这是检测

//你的代码会在这里 //打开您的控制台-如果所有内容都正确加载,您将看到0.3.1 常数模型https://cdn.jsdelivr.net/gh/ml5js/ml5-data-and-models/models/pitch-detection/crepe/'; 让我来投球; 让听觉语境; 让麦克风; 设freq=0; log('ml5版本:',ml5.version); //p5.js 函数设置(){ createCanvas(600600); audioContext=getAudioContext(); 麦克风=新的p5.AudioIn(); 麦克风启动(监听); } //一旦加载了侦听模式 //模态加载后,我们将调用get pitch和get pitch 函数监听(){ log('listing!!'); 俯仰=ml5.5俯仰检测( 模型url, 音频背景, 麦克·斯特朗, 模型加载 ); } 函数modelLoaded(){ log('modal loaded!!'); 基音。getPitch(gotPitch); } 功能变桨(误差、频率){ 如果(错误){ 控制台错误(错误) } 否则{ 中频(频率){ 频率=频率; } //控制台日志(频率); } //一旦你得到了球,你把球装上……你就要看着球再次下降 基音。getPitch(gotPitch); } 函数绘图(){ 背景(200); textAlign(居中,居中); 填充(255); 文本大小(64); 文本(频率固定(2),宽度/2,高度/2) }
当它听到音频时,我应该得到频率值,但我得到的是空值