如何在 p5.js 中动态更改声音文件

How to change Sound file dynamically in p5.js

我只是想加载动态声音里面的负载。 但是有缓冲区错误。需要停止,但是如果停止了,就不能播放了。

let mySound;
function preload() {
  soundFormats('mp3', 'ogg');
  mySound = loadSound('assets/doorbell');
}

function setup() {
  let cnv = createCanvas(100, 100);
  cnv.mousePressed(canvasPressed);
  background(220);
  text('tap here to play', 10, 20);
}

function canvasPressed() {
  // playing a sound file on a user gesture
  // is equivalent to `userStartAudio()`
  mySound = loadSound('assets/othersound'); //<----------LOAD ANOTHER SOUND
  
  mySound.play();
}
 

在你的 canvasPressed 函数中;反转这两行:

mySound.play();
mySound = loadSound('assets/othersound'); //<----------LOAD ANOTHER SOUND

首先播放已经加载(预加载)的声音,然后加载新声音。 但是,如果声音文件较大或服务器速度较慢,则第二次单击时声音可能尚未加载。您可以随时检查它是否加载了 mySound.isLoad()。但更有效的方法是这样做:

function canvasPressed() {
  // playing a sound file on a user gesture
  // is equivalent to `userStartAudio()`

  mySound = loadSound('assets/othersound', function(){

      mySound.play();

  });      

}

那么您就不必在预加载中加载任何内容。在 loadSound() 函数中,第一个参数是声音文件的 url,第二个参数是 'succesCallback'。该函数在加载声音文件并准备播放时运行。