p5.j​​s声音库:如何添加/删除p5。来自p5的短语()。部分()?

时间:2016-05-13 16:49:42

标签: javascript p5.js

我正在研究带有声音库的p5.js,并使用p5 Phrase和p5 Part来同时播放多个声音文件。

我能够addPhrase(),但removePhrase()函数中的mousePressed函数根本不起作用。 如何在p5声部中添加和删除短语之间切换,这会打开/关闭特定的声音文件?

var box, drum, myPart;
var drumPhrase;
var boxPhrase;
var boxPat = [1, 0, 0, 2, 0, 2, 0, 0];
var drumPat = [0, 1, 1, 0, 2, 0, 1, 0];

function preload() {
    box = loadSound('sound/noise.mp3');
    drum = loadSound('sound/drum1.wav');
}

function setup() {
    noStroke();
    fill(255);
    textAlign(CENTER);
    masterVolume(0.1);

    boxPhrase = new p5.Phrase('box', playBox, boxPat);
    drumPhrase = new p5.Phrase('drum', playDrum, drumPat);
    myPart = new p5.Part();

    myPart.addPhrase(boxPhrase);
    myPart.addPhrase(drumPhrase);

    myPart.setBPM(60);
    masterVolume(0.1);

    myPart.start();

}

function draw() {
    background(0);    
}

function playBox(time, playbackRate) {
    box.rate(playbackRate);
    box.play(time);
}

function playDrum(time, playbackRate) {
    drum.rate(playbackRate);
    drum.play(time);
}

function mousePressed() {
    myPart.removePhrase(box);

}

1 个答案:

答案 0 :(得分:1)

你是对的,p5.sound中有一个错误,所以p5.Part.removePhrase不起作用。

以下是修复:在setup()函数末尾添加以下代码段:

p5.Part.prototype.removePhrase = function (name) {
    for (var i in this.phrases) {
        if (this.phrases[i].name === name) {
            this.phrases.splice(i, 1);
        }
    }
};

这将错误的功能替换为实际的工作代码。

我会让p5.js开发人员知道,以便在官方版本中修复bug。