1.ファイル名をsoudEQとして一回保存する。
2.index.htmlのheadに下記のコードを追加する。
<script src="https://cdn.jsdelivr.net/npm/p5@1.11.11/lib/addons/p5.sound.min.js"></script>3.サウンドファイル(sample.mp3)をアップロードする。
4.下記のスクリプトをスケッチに貼り付ける。
let sound; // 再生する音
let fft; // 音のデータを取り出す道具
function preload() {
sound = loadSound('sample.mp3');
}
function setup() {
createCanvas(400, 200);
// ★波形データを1024個に固定して取り出す
// 1024個のうち、前半512を「左」、後半512を「右」として扱う
fft = new p5.FFT(0.8, 1024);
textSize(16);
}
function draw() {
background(240);
// まだ再生していない時は案内だけ出す
if (!sound.isPlaying()) {
fill(80);
textAlign(CENTER, CENTER);
text('クリックで再生 / 停止', 200, 100);
return;
}
// 波形(音の振れ方)を配列でもらう(長さは1024)
// 値はだいたい -1.0 ~ +1.0 の範囲
let wave = fft.waveform();
// 左右の「音量っぽい値」を作るための合計
let leftSum = 0;
let rightSum = 0;
for (let i = 0; i < 512; i++) {
leftSum += abs(wave[i]);
}
for (let i = 512; i < 1024; i++) {
rightSum += abs(wave[i]);
}
let leftLevel = leftSum / 512;
let rightLevel = rightSum / 512;
// ★円の大きさ(半径)を作る
let leftRadius = 10 + leftLevel * 250;
let rightRadius = 10 + rightLevel * 250;
// ★大きくなりすぎないように上限を決める
if (leftRadius > 80) leftRadius = 80;
if (rightRadius > 80) rightRadius = 80;
// ★小さくなりすぎないように下限を決める
if (leftRadius < 10) leftRadius = 10;
if (rightRadius < 10) rightRadius = 10;
noStroke();
fill(100, 150, 255);
ellipse(100, 100, leftRadius * 2, leftRadius * 2);
// 右の円(中心は決め打ちで300,100)
fill(255, 120, 120);
ellipse(300, 100, rightRadius * 2, rightRadius * 2);
// 数値を表示
fill(50);
textAlign(CENTER, CENTER);
text('L', 100, 170);
text('R', 300, 170);
let leftValue = int(leftLevel * 100);
let rightValue = int(rightLevel * 100);
text(leftValue, 100, 190);
text(rightValue, 300, 190);
}
function mousePressed() {
// クリックで再生/停止できるようにする
if (sound.isPlaying()) {
sound.pause();
} else {
sound.loop(); // ループ再生(繰り返し)
}
}