«Я хочу, чтобы при нажатии мыши воспроизводился случайный звуковой файл из трех звуковых файлов, предварительно загруженных уже в начале кода. В настоящее время я могу воспроизводить только один звуковой файл за раз»

function preload() {
    bird = loadSound('kooka.mp3');
    bird2 = loadSound('galah.mp3');
    bird3 = loadSound('cuckoo.mp3');
}

function setup() {
    createCanvas(windowWidth, windowHeight);
    background(0);
}

function draw() {
    kooka(); 
}

function kooka () {

    if (mouseIsPressed) {

        bird2.playMode('untildone');
        bird2.play();
        bird2.setVolume(0.3);
2
James Maguire 26 Окт 2019 в 12:56

2 ответа

Лучший ответ

Создайте массив звуков и «выберите» случайный звук из массива:

let sounds = [bird, bird2, bird3];
let randomSound = sounds[Math.floor(Math.random()*sounds.length)];

Math.random() генерирует случайное число от 0,0 до 1,0. Итак, Math.random()*sounds.length - это число с плавающей запятой> = 0.0 и <sounds.length. Math.floor получает целое значение, которое меньше или равно числу.

Если кнопка мыши нажата несколько раз, будет воспроизводиться несколько звуков. Чтобы обеспечить одновременное воспроизведение только одного звука, необходимо записать текущий звук в переменной (currentSound) и убедиться, что звук закончился, прежде чем вы сможете начать новый звук.
Кроме того, используйте mousePressed() обратный вызов, а не встроенную переменную состояния < a href = "https://p5js.org/reference/#/p5/mouseIsPressed" rel = "nofollow noreferrer"> mouseIsPressed . Событие происходит только один раз, когда мышь нажата, в то время как переменная указана, пока мышь нажата. например.:

function draw() {
}

let currentSound;
function mousePressed() {

    let is_playing = currentSound && currentSound.isPlaying();
    if (!is_playing) {

        let sounds = [bird, bird2, bird3];
        currentSound = sounds[Math.floor(Math.random()*sounds.length)];

        currentSound.playMode('untilDone');
        currentSound.play();
        currentSound.setVolume(0.3);
    }
}
1
Rabbid76 27 Окт 2019 в 08:20
var input;
var mic; 
var bird;
var bird2;
var bird3; 
var bird4; 
var bird5; 
var bird6; 


function preload() {
       bird = loadSound('kooka.mp3');
       bird2 = loadSound('galah.mp3');
       bird3 = loadSound('lyre.mp3');
       bird4 = loadSound('friar.mp3');
       bird5 = loadSound('whistler.mp3');
       bird6 = loadSound('cuckoo.mp3');

    }


function setup() {
  createCanvas(windowWidth, windowHeight);
  background(0);
  input = new p5.AudioIn();
  input.start();


}

function draw() {



     var volume = input.getLevel();
     var threshold = 0.2;
     var regularArr = [bird, bird2, bird3, bird4, bird5, bird6];

    if (volume > threshold) {
    shuffle(regularArr, true);
        var newArr = shuffle(regularArr);
        var beh = newArr[0]; 
        var bef = newArr[1]; 
        var ben = newArr[2];
        var beq = newArr[3];
        var bek = newArr[4];
        var bez = newArr[5];

        beh.playMode('untilDone');
        beh.play(0.1);
        bef.stop(); 
        ben.stop();
        beq.stop(); 
        bek.stop(); 
        bez.stop();  
        print(beh);


}
}
0
James Maguire 28 Окт 2019 в 11:52