[英]Play random sound file (mp3 file) from preload on mouse click
“我想要它,所以當鼠標按下時,它會從代碼頂部已經預加載的三個聲音文件中播放一個隨機聲音文件。目前我一次只能播放一個聲音文件”
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);
創建一個聲音數組並從數組中“選擇”一個隨機聲音:
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()
回調而不是內置的 state 變量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);
}
}
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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.