
amp.getLevel() โ 0.1 ~ 0.3 ์ ๋๋ก ์ค์ map(), constrain() ์ฌ์ฉp5.js์์ ๋ง์ดํฌ ์ ๋ ฅ์ ์๊ฐํํ ๋๋ ์๋ ๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
1. p5.AudioIn
1. p5.Amplitude
let mic;
let amp;
function setup() {
createCanvas(800, 800);
background(15);
// ๋ง์ดํฌ ์
๋ ฅ ๊ฐ์ฒด ์์ฑ
mic = new p5.AudioIn();
mic.start();
// ์งํญ์ ๋ถ์ํ๋ ๊ฐ์ฒด ์์ฑ
amp = new p5.Amplitude();
amp.setInput(mic);
}
function draw() {
background(15, 40);
// ํ์ฌ ๋ง์ดํฌ ์
๋ ฅ ๋ ๋ฒจ (0.0 ~ 1.0)์ ์ ์ฅํ๋ ๋ณ์
let level = amp.getLevel();
// ๋ ๋ฒจ ๊ฐ์ ๋ฐ์ง๋ฆ์ ๋ณํ
// ์
๋ ฅ ๋ฒ์(0 - 0.3)์ ๋ฐ์ง๋ฆ ๋ฒ์(30 - 330)์ผ๋ก ๋งตํ
// ๋ฐ์ง๋ฆ์ 30 - 330 ๋ฒ์๋ก ์ ํ
let radius = map(level, 0, 0.3, 30, 330);
radius = constrain(radius, 30, 330);
noStroke();
fill(255, 150);
ellipse(width / 2, height / 2, radius * 2, radius * 2);
}
// ๋ธ๋ผ์ฐ์ ์ ์ค๋์ค ์ปจํ
์คํธ๋ฅผ ํ์ฑํํ๊ธฐ ์ํ ์ก์
function mousePressed() {
getAudioContext().resume();
}
์ด๋ ๊ฒ ๊ธฐ๋ณธ ๋ผ๋๋ฅผ ์ก๊ณ ๋ธ๋ผ์ฐ์ ์์ ๋ง์ดํฌ ๊ถํ๋ ์ฃผ์์ง๋ง ๋ฐ์์ด ์์ต๋๋ค. ์ด์ ๋ ๋ธ๋ผ์ฐ์ ์ ๋ณด์ ์ ์ฑ ๋๋ฌธ์ผ๋ก ๋ค์์ ๋ด์ฉ์ ์ถ๊ฐํด์ผ์ง ์ ์ ์๋ํฉ๋๋ค.
โ ๋ง์ฐ์ค๋ฅผ ํด๋ฆญํด์ผ๋ง ๋ง์ดํฌ๊ฐ ์์๋๋๋ก ๋ช
์
โ AudioContext ์ํ๋ฅผ ์ง์ ํ์ธ
let mic;
let amp;
let started = false; // ์ด๊ธฐ ์ํ๋ฅผ false๋ก ์ค์
function setup() {
createCanvas(800, 800);
background(15);
mic = new p5.AudioIn();
amp = new p5.Amplitude();
}
function draw() {
background(15, 40);
if (!started) {
fill(200);
textAlign(CENTER, CENTER);
textSize(16);
text("ํ๋ฉด์ ํด๋ฆญํ๋ฉด ๋ง์ดํฌ๊ฐ ํ์ฑํ๋ฉ๋๋ค", width / 2, height / 2);
return;
}
let level = amp.getLevel();
let radius = map(level, 0.0, 0.2, 30, 330);
radius = constrain(radius, 30, 330);
noStroke();
fill(255, 150);
ellipse(width / 2, height / 2, radius * 2, radius * 2);
}
function mousePressed() {
// ์ค๋์ค ์ปจํ
์คํธ ๊ฐ์ ์์
userStartAudio();
mic.start(() => {
amp.setInput(mic);
started = true; // ์ํ๋ฅผ true๋ก ์ ํ
console.log("๋ง์ดํฌ ์์๋จ");
});
}
์
๋ ฅ ๋ ๋ฒจ์ ์กฐ์ ํ์ฌ ๋น์ฃผ์ผ๋ผ์ด์ ์ด์
์ ๋ณํ๋ฅผ ์ค ์ ์์ต๋๋ค.
map(level, 0.0, 0.2, 30, 330);
์์ ๋ ๋ฒจ ๊ฐ์ ๋ฒ์๋ฅผ 0.0 ~ 0.2๋ก ์ค์ ํ์๋๋ฐ, ์ด ์์น๋ฅผ ์์ ์๋ฆฌ์๋ ํฌ๊ฒ ๋ฐ์ํ๋๋ก ๋ฏผ๊ฐ๋๋ฅผ ์ฌ๋ฆฌ๊ฑฐ๋ ๋ฐ๋๋ก ํ ์๋ ์์ต๋๋ค.
๋ค์ ๋จ๊ณ๋ก๋