カウントする のプログラムを組み合わせ、2つの音を交互に鳴らしてみます。
//一定時間おきに、
//四角と円を交互に
//ランダムに図形を描く
//音を鳴らす
//変数
let timestamp = 0;
let count = 0;
let mySound = [];
function preload(){
//音のファイルはSonicPiの音源をWAVに変換し使っています
//https://sonic-pi.net/
mySound[0] = loadSound("sound/mehackit_phone1.wav");
mySound[1] = loadSound("sound/mehackit_phone2.wav");
mySound[2] = loadSound("sound/mehackit_phone3.wav");
mySound[3] = loadSound("sound/mehackit_phone4.wav");
}
function setup() {
//画面サイズ
createCanvas(500, 500);
//背景を塗る
background(200, 220, 220);
}
function draw() {
//500ミリ秒おきに
if (millis() - timestamp > 500) {
timestamp = millis();
//countを4で割ったあまりが0のとき
if(count % 4 == 0){
drawRect(); //四角
mySound[0].play();
}
//countを4で割ったあまりが1のとき
if(count % 4 == 1){
drawEllipse(); //円
mySound[1].play();
}
//countを4で割ったあまりが2のとき
if(count % 4 == 2){
drawRect(); //四角
mySound[2].play();
}
//countを4で割ったあまりが3のとき
if(count % 4 == 3){
drawEllipse(); //円
mySound[3].play();
}
//countを1ずつ増加
count ++;
}
}
//四角を描く
function drawRect(){
//線をナシ
noStroke();
//塗り色
fill(random(100, 200), random(100, 200), random(10, 25), 50);
//四角の基準点を中心に
rectMode(CENTER);
//四角を描く
rect(random(0, 500), random(0, 500), random(0, 500), random(0, 500));
}
//円を描く
function drawEllipse(){
//線をナシ
noStroke();
//塗り色
fill(random(200, 255), 50, random(10, 250), 50);
//円を描く
ellipse(random(0, 500), random(0, 500), random(0, 500), random(0, 500));
}
カウント変数を「%」で計算した余りをつかって、リズムをつくることができます。
「500ミリ秒おきに」というところを「250ミリ秒おきに」変えると、カウントするスピードを速めることができます。
「4で割った余り」「7で割った余り」を使うと、「%」に続く数値が、最小公倍数のときにタイミングが合います。
この4や7を変えることで、なかなかタイミングが重ならず、たまにタイミングがあったりして、複雑に聞こえてきます。