๋ธ๋ก๊ทธ์ ๋ฐฐ๊ฒฝ์์ ๋ฃ๋ ๋ฒ: Vocaroo์ HTML ์ฝ๋๋ก ๊ฐ์ฑ ์๋์ฌ์ ํ๋ ์ด์ด ๋ง๋ค๊ธฐ
๋ฌด๋ฃ ์ค๋์ค ํธ์คํ ์๋น์ค Vocaroo๋ฅผ ํ์ฉํ์ฌ ๋ธ๋ก๊ทธ์ ์๋์ผ๋ก ์ฌ์๋๋ ๋ฐฐ๊ฒฝ์์ (BGM) ํ๋ ์ด์ด๋ฅผ ์ฝ์ ํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค. HTML๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ด์ฉํด ์คํฌ๋กค ์ ์์ ์ด ์๋ ์ฌ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ์์ธํ ๋ฐฉ๋ฒ์ ๋๋ค.
๋ธ๋ก๊ทธ์ ๊ธ์ ์ฐ๋ค ๋ณด๋ฉด, ๋๋ก๋ ํ ์ค์ ๋ฌธ์ฅ๋ณด๋ค ํ ๊ณก์ ์์ ์ด ๋ ํฐ ๊ฐ๋์ ์ ํ ๋๊ฐ ์์ต๋๋ค. ํนํ ๊ฐ์ฑ์ ์ธ ์์ธ์ด๋ ์ผ๊ธฐ, ๊ธ๊ท, ์ฌํ ํ๊ธฐ ๋ฑ์ ์์ฑํ ๋ ๋ฐฐ๊ฒฝ ์์ ์ ํ ์คํธ์ ์ ์์ ๊น์ด๋ฅผ ๋ฐฐ๊ฐ์์ผ ์ฃผ๋ ์์๊ฐ ๋ ์ ์์ต๋๋ค. ์ด๋ฒ ๊ธ์์๋ ๋ฌด๋ฃ ์ค๋์ค ํธ์คํ ์ฌ์ดํธ์ธ Vocaroo๋ฅผ ์ด์ฉํด ๋ธ๋ก๊ทธ์ ์๋์ผ๋ก ์ฌ์๋๋๋ฐฐ๊ฒฝ์์ ํ๋ ์ด์ด๋ฅผ ์ฝ์ ํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค.
Vocaroo๋ก ๋ธ๋ก๊ทธ ์๋ ์ฌ์ ๋ฐฐ๊ฒฝ์์ ํ๋ ์ด์ด ์ฝ์ ํ๊ธฐ
Vocaroo๋ ์น๋ธ๋ผ์ฐ์ ๋ง์ผ๋ก ์์ฑ ๋ น์๊ณผ ๊ณต์ ๊ฐ ๊ฐ๋ฅํ ๋ฌด๋ฃ ์ค๋์ค ์๋น์ค์ ๋๋ค. ๋ณ๋์ ์ค์น ์์ด ๋ฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ, ์์ฑ๋ ์์์ ๊ณต์ ๋งํฌ ๋๋ MP3 ๋ค์ด๋ก๋ ํ์์ผ๋ก ์ ๊ณต๋์ด ๋ธ๋ก๊ทธ, ์ด๋ฉ์ผ, ๋ฉ์์ง ๋ฑ์ ์ฝ์ ํ๊ธฐ ์ข์ต๋๋ค.
Vocaroo ์ฃผ์ ํน์ง ๋ฐ ๋ธ๋ก๊ทธ ํ์ฉ ์ฅ์
- ํ์๊ฐ์ ์์ด ๋ น์ ๋ฐ MP3 ์ ๋ก๋ ๊ฐ๋ฅ
- MP3 ๋ค์ด๋ก๋ ๋ฐ ์ง์ ์๋ฒ ๋ฉ ๊ฐ๋ฅํ ๊ณต์ ๋งํฌ ์ ๊ณต
- ์์ ์ ์ฅ ๊ธฐ๋ฐ์ด๋ฏ๋ก ์ ์๊ถ์ ๋ฌธ์ ๊ฐ ์๋ ๊ฐ์ธ ์์ ๋๋ ์งง์ ์ฝํ ์ธ ์ ํ์ฉ (์ฅ๊ธฐ ๋ณด๊ด์ ๋น์ถ์ฒ)
- ๊ฐ๋ณ๊ณ ๋น ๋ฅธ ๋ก๋ฉ ์๋๋ก ๋ธ๋ก๊ทธ ์ฑ๋ฅ ์ ํ ์ต์ํ
๋ธ๋ก๊ทธ์ ์๋ ์ฌ์ ๋ฐฐ๊ฒฝ์์ ์ฝ๋๋ฅผ ๋ฃ๋ ๋ฐฉ๋ฒ
์๋ ์ฝ๋๋ฅผ ๋ธ๋ก๊ทธ ๋ณธ๋ฌธ HTML ํธ์ง ๋ชจ๋์์ ์ํ๋ ์์น์ ์ฝ์ ํ๋ฉด, ๋ฐฉ๋ฌธ์๊ฐ ์คํฌ๋กค์ ๋ด๋ฆฌ๊ฑฐ๋ ํด๋น ํ๋ ์ด์ด๊ฐ ๋ทฐํฌํธ์ ๋ค์ด์ค๋ฉด ์์ ์ด ์๋์ผ๋ก ์ฌ์๋ฉ๋๋ค. ๋ณผ๋ฅจ์ 20%๋ก ๊ณ ์ ๋์ด ์์ด ๋ฐฉ๋ฌธ์์๊ฒ ๊ณผํ ์์์ ์ฃผ์ง ์๊ณ ๋ธ๋ก๊ทธ ๋ถ์๊ธฐ๋ฅผ ์ฑ์์ค๋๋ค.

1. ์คํฌ๋กค ์ ์๋ ์ฌ์ (Intersection Observer ํ์ฉ)
์ด ์ฝ๋๋ ์ค๋์ค ํ๋ ์ด์ด๊ฐ ํ๋ฉด์ ์ผ์ ๋ถ๋ถ(threshold: 0.3) ๋ํ๋ ๋ ์ฌ์์ ์์ํ๋๋ก ํ์ฌ, ์ฌ์ฉ์์ ์ํธ์์ฉ ์์ด ๋ฌด๋จ์ผ๋ก ์์ ์ด ์ฌ์๋๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค. ๋ํ ์ด๊ธฐ ์ํ๋ ์์๊ฑฐ(muted)๋ก ์ค์ ๋ฉ๋๋ค.
div id="audio-container" style="padding: 20px; background: #f0f0f0; border-radius: 10px;"
audio id="auto-player" muted controls style="width: 100%"
source src="https://media.vocaroo.com/mp3/1dsVCLXZkNsm" type="audio/mpeg"
๋ธ๋ผ์ฐ์ ๊ฐ ์ค๋์ค๋ฅผ ์ง์ํ์ง ์์ต๋๋ค.
/audio
/div
script
document.addEventListener('DOMContentLoaded', () = {
const audio = document.getElementById('auto-player');
let hasUnmuted = false;
// ์ด๊ธฐ ์ํ: ์์๊ฑฐ, ๋ณผ๋ฅจ 20% ์ค์
audio.muted = true;
audio.volume = 0.2;
const observer = new IntersectionObserver((entries) = {
entries.forEach(entry = {
if (entry.isIntersecting) {
if (!hasUnmuted) {
audio.muted = false; // ๋ทฐํฌํธ ์ง์
์ ์์๊ฑฐ ํด์
hasUnmuted = true;
}
audio.play().catch(() = {});
}
});
}, { threshold: 0.3 }); // 30%๊ฐ ๋ณด์ผ ๋ ์๋
observer.observe(document.getElementById('audio-container'));
// ํน์ Intersection Observer๊ฐ ์๋ํ์ง ์์ ๊ฒฝ์ฐ ๋๋น, ์ฒซ ์คํฌ๋กค ์ด๋ฒคํธ๋ก ์์๊ฑฐ ํด์ ๋ฐ ์ฌ์ ์๋
const onScroll = () = {
if (!hasUnmuted) {
audio.muted = false;
hasUnmuted = true;
audio.play().catch(() = {});
}
window.removeEventListener('scroll', onScroll);
};
window.addEventListener('scroll', onScroll);
});
/script
2. ์คํฌ๋กค + ๋ทฐํฌ์ธํธ ์ดํ ์ 20์ด ํ ์ฌ์ ๋ฉ์ถค
์ด ์ฝ๋๋ ํ๋ ์ด์ด๊ฐ ํ๋ฉด ๋ฐ์ผ๋ก ์์ ํ ๋ฒ์ด๋ฌ์ ๋์๋ ์์ ์ด ๊ณ์ ํ๋ฅด๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด, 20์ด์ ์ ์ ๊ธฐ๊ฐ์ ์ค ๋ค ์๋์ผ๋ก ์์ ์ ์ ์ง(pause)์ํค๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์ด ์ฌ์ฉ์ ๊ฒฝํ์ ๋์ฑ ๋ฐฐ๋ คํฉ๋๋ค.
div id="audio-container" style="padding: 20px; background: #f0f0f0; border-radius: 10px;"
audio id="auto-player" muted controls style="width: 100%"
source src="https://media.vocaroo.com/mp3/1dsVCLXZkNsm" type="audio/mpeg"
๋ธ๋ผ์ฐ์ ๊ฐ ์ค๋์ค๋ฅผ ์ง์ํ์ง ์์ต๋๋ค.
/audio
/div
script
document.addEventListener('DOMContentLoaded', () = {
const audio = document.getElementById('auto-player');
let hasUnmuted = false;
let stopTimeout = null;
audio.muted = true;
audio.volume = 0.2;
const observer = new IntersectionObserver((entries) = {
entries.forEach(entry = {
if (entry.isIntersecting) {
// ๋ทฐ ์์ผ๋ก ๋ค์ด์ค๋ฉด ์ฌ์ ์์
if (!hasUnmuted) {
audio.muted = false;
hasUnmuted = true;
}
audio.play().catch(() = {});
// ๋ฒ์ด๋ฌ์ ๋ ์ค์ ๋ ์ ์ง ํ์ด๋จธ๊ฐ ์๋ค๋ฉด ์ทจ์
if (stopTimeout) {
clearTimeout(stopTimeout);
stopTimeout = null;
}
} else {
// ๋ทฐ ๋ฐ์ผ๋ก ๋ฒ์ด๋๋ฉด 20์ด ํ ์ ์ง ํ์ด๋จธ ์ค์
stopTimeout = setTimeout(() = {
audio.pause();
}, 20000); // 20์ด ํ ์ ์ง
}
});
}, { threshold: 0.3 });
observer.observe(document.getElementById('audio-container'));
// ์ฒซ ์คํฌ๋กค ์์๋ ์ฌ์ (๋ชจ๋ฐ์ผ ํ๊ฒฝ ๋์)
const onScroll = () = {
if (!hasUnmuted) {
audio.muted = false;
hasUnmuted = true;
audio.play().catch(() = {});
}
window.removeEventListener('scroll', onScroll);
};
window.addEventListener('scroll', onScroll);
});
/script
๋ฐฐ๊ฒฝ์์ ์ด ์ ์ด์ธ๋ฆฌ๋ ๋ธ๋ก๊ทธ ์ฝํ ์ธ
- ์ฌํ ์์ธ์ด, ์ฌ์ง ์ค์ฌ์ ์ฌํ ํ๊ธฐ
- ๊ฐ์ฑ ์ฌ์ง ์ค์ฌ์ ํฌ์คํธ ๋ฐ ๊ฐ์ธ ์ฐฝ์๋ฌผ
- ํ๋ง ๊ธ๊ท ๋ชจ์, ๋ ๋ฐฑํ ๊ธ
- ์นดํ ์ถ์ฒ, ๋์ ๋ถ์๊ธฐ ์๊ฐ ๋ฑ ํน์ ์ ์ ์ฐ์ถ์ด ํ์ํ ์ฃผ์
๋ฐฐ๊ฒฝ์์ ์ด ์๋ ๋ธ๋ก๊ทธ๋ ์กฐ์ฉํ ๋ง์์ ์ธ๋ฆฌ๋ ๋ถ์๊ธฐ๋ฅผ ๋ง๋ค์ด ์ค๋๋ค. ์ฌ์ด๋๊ฐ ํ ์คํธ์ ์ฌ๋ฐฑ์ ์ฑ์์ฃผ๊ณ , ๋ ์๊ฐ ๊ธ์ ๋ ์ค๋ ๋จธ๋ฌผ๊ฒ ํฉ๋๋ค. ์์ ์ ๋ธ๋ก๊ทธ ๊ธ์ ์๋ช ์ ๋ถ์ด๋ฃ๋ ๋๊ตฌ์ ๋๋ค. ๊ฐ๋จํ ์ฝ๋ ํ ์ค๋ก ๋ธ๋ก๊ทธ์ ์์ํ ์์ ์ ํ๋ฅด๊ฒ ํ ์ ์๋ค๋ฉด, ๊ทธ ์์ฒด๋ก ํ๋์ ๋์งํธ ๊ฐ์ฑ ์ฐ์ถ์ด ๋ ์ ์์ต๋๋ค.
Vocaroo์ ์๋์ฌ์ ์ค๋์ค ํ๋ ์ด์ด๋ฅผ ํ์ฉํด ์ฌ๋ฌ๋ถ์ ๋ธ๋ก๊ทธ๋ ๊ฐ์ฑ ํ ์คํผ ์ถ๊ฐํด ๋ณด์ธ์.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ (FAQ) - ๋ธ๋ก๊ทธ ๋ฐฐ๊ฒฝ์์ ์๋ ์ฌ์
Q1: Vocaroo ๋์ ๋ค๋ฅธ ๋ฌด๋ฃ ์ค๋์ค ํธ์คํ ์๋น์ค๋ฅผ ์ฌ์ฉํด๋ ์ด ์ฝ๋๊ฐ ์๋ํ๋์?
๋ค, ์๋ํฉ๋๋ค. ์ค์ํ ๊ฒ์ source src="..." ๋ถ๋ถ์ ์ฝ์
ํ ์์
ํ์ผ์ ์ง์ ๋งํฌ(URL)๊ฐ MP3์ ๊ฐ์ ์ค๋์ค ํ์ผ ํ์์ด์ด์ผ ํฉ๋๋ค. SoundCloud๋ ๋ค๋ฅธ ํธ์คํ
์๋น์ค์์ MP3 ๋งํฌ๋ฅผ ์ง์ ์ ๊ณตํ๋ค๋ฉด Vocaroo ๋งํฌ ๋์ ํด๋น ๋งํฌ๋ฅผ ์ฌ์ฉํ์ค ์ ์์ต๋๋ค.
Q2: ๋ฐฐ๊ฒฝ์์ ์ ์๋ ์ฌ์ํ ๋ ์ด๊ธฐ ์์๊ฑฐ(muted)๋ฅผ ํ๋ ์ด์ ์ ํ์์ฑ์ ๋ฌด์์ธ๊ฐ์?
๋๋ถ๋ถ์ ์ต์ ์น ๋ธ๋ผ์ฐ์ (ํฌ๋กฌ, ์ฌํ๋ฆฌ ๋ฑ)๋ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ณดํธํ๊ธฐ ์ํด, ์ฌ์ฉ์์ ์ํธ์์ฉ ์์ด ๋ฏธ๋์ด๋ฅผ ์๋ ์ฌ์ํ๋ ๊ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐจ๋จํ๊ฑฐ๋ ์์๊ฑฐ ์ํ๋ก ๋ง๋ญ๋๋ค. ๋ฐ๋ผ์ ์ฝ๋๋ฅผ muted=true๋ก ์์ํ์ฌ ๋ธ๋ผ์ฐ์ ์ ์๋ ์ฌ์ ์ ์ฑ
์ ์ฐํํ๊ณ , ์ฌ์ฉ์์ ์คํฌ๋กค ์ํธ์์ฉ์ด ์ผ์ด๋ ํ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํด ์์๊ฑฐ๋ฅผ ํด์ ํ๊ณ ์ฌ์ํ๋ ๋ฐฉ์์ด ํ์ฌ ๊ฐ์ฅ ์์ ์ ์ธ ์๋ ์ฌ์ ๊ตฌํ ๋ฐฉ๋ฒ์
๋๋ค.
Q3: ๋ฐฐ๊ฒฝ์์ ๋ณผ๋ฅจ์ 20% ์ธ์ ๋ค๋ฅธ ๊ฐ์ผ๋ก ๋ฐ๊พธ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋์?
์ ๊ณต๋ JavaScript ์ฝ๋์์ audio.volume = 0.2; ๋ถ๋ถ์ ์ํ๋ ๊ฐ์ผ๋ก ์์ ํ์๋ฉด ๋ฉ๋๋ค. ์ฌ๊ธฐ์ ๋ณผ๋ฅจ์ 0.0(์ต์)๋ถํฐ 1.0(์ต๋) ์ฌ์ด์ ์์์ ๊ฐ์ผ๋ก ์ง์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, 50% ๋ณผ๋ฅจ์ผ๋ก ์ค์ ํ๊ณ ์ถ๋ค๋ฉด audio.volume = 0.5;๋ก ๋ณ๊ฒฝํ๋ฉด ๋ฉ๋๋ค.