如何在实例模式下使用p5.js声音

How to use p5.js sound in instance mode

我正在尝试在同一页面上制作一个具有多个 p5 画布的网站,因此经过大量研究,我得出的结论是,最合适的方法是在 p5 上使用实例模式。 我花了一整天的时间试图理解实例模式,我什至在网上找到了一个可以为我转换它的转换器,但我试图自己完成这一切,只是为了检查错误。问题是我找不到使用实例模式在我的草图中使用声音的方法。我的代码要复杂得多,但即使只是尝试基本的代码,它仍然不起作用。

var s = function(p) {

  let song;

  p.preload = function() {
    p.song = load('thunder.mp3')
  }

  p.setup = function() {
    p.createCanvas(720, 200);
    p.background(255, 0, 0);
    p.song.loop();
  };

};

var myp5 = new p5(s, 'c1');
html, body {
  margin: 0;
  padding: 0;
}
canvas {
  display: block;
}
<html>
<head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.1.9/p5.js"></script>
    <script language="javascript" type="text/javascript" src="sketch.js"></script>
    <style> body {padding: 0; 
        margin: 0;
    } 
      <meta charset="UTF-8">
</style>
</head>
<body>
    <div id="c1"></div> <br>
    <div id="c2"></div>
</body>
</html>
你可以在这里测试它:https://editor.p5js.org/jgsantos.dsn/sketches/rUWb6Nurt

此代码在全局模式下运行良好:

let song;

function preload() {
  song = loadSound('thunder.mp3');
}

function setup() {
  createCanvas(720, 200);
  background(255,0,0);
  song.loop();
}
html, body {
  margin: 0;
  padding: 0;
}
canvas {
  display: block;
}
<!DOCTYPE html>
<html lang="en">
  <head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.1.9/p5.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.1.9/addons/p5.sound.min.js"></script>
    <link rel="stylesheet" type="text/css" href="style.css">
    <meta charset="utf-8" />

  </head>
  <body>
    <script src="sketch.js"></script>
  </body>
</html>
你可以在这里测试它 https://editor.p5js.org/jgsantos.dsn/sketches/_lQcDqOsp

它显示此错误:“未捕获的 ReferenceError:未定义加载(:第 9 行)” 我做错了什么? 提前致谢!

请尝试 post 您 运行 的确切代码。您的问题包含的代码与您在评论中 post 编辑的 link 不同。

但退一步说,我是这样看待实例模式和库的:

  • 实例模式意味着属于 sketch 的变量和函数现在通过变量引用,在您的例子中是 p 变量。
  • 但是属于的变量和函数仍然被直接引用,即在“全局模式”中。

换句话说,您不想使用实例模式引用load()(或者是loadSound()?)函数。您仍然应该直接引用该函数,因为它来自库而不是特定的草图。