음악에 맞게 가사의 색상변경

음악을 재생할 때 음악에 맞추어서 노래가사의 색상이 변경되도록 만들어보았습니다.
json으로 가사의 시작점과 끝점을 만들어야 한다는 점이 번거롭기는 합니다.
감사합니다.
[code]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Lyrics Player</title>
<style>
/* 기본 스타일 */
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 20px;
background-color: #f0f0f0;
text-align: center;
}
audio {
width: 100%;
max-width: 600px;
margin-top: 20px;
outline: none;
}
#lyricsContainer {
margin-top: 20px;
padding: 10px;
background-color: white;
border-radius: 10px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
max-width: 800px;
margin-left: auto;
margin-right: auto;
}
.lyrics {
font-size: 1.5rem; /* 기본 폰트 크기 */
margin: 10px 0;
color: #333;
transition: all 0.3s ease-in-out;
}
.active {
color: red;
font-size: 2rem;
font-weight: bold;
}
/* 반응형 디자인 */
@media (max-width: 768px) {
.lyrics {
font-size: 1.2rem;
}
.active {
font-size: 1.8rem;
}
body {
padding: 10px;
}
}
@media (max-width: 480px) {
.lyrics {
font-size: 1rem;
}
.active {
font-size: 1.5rem;
}
audio {
width: 100%;
}
#lyricsContainer {
padding: 5px;
}
}
</style>
</head>
<body>
<audio id="audio" controls>
<source src="sample.mp3" type="audio/mpeg">
Your browser does not support the audio element.
</audio>
<div id="lyricsContainer"></div>
<script>
document.addEventListener("DOMContentLoaded", () => {
const audio = document.getElementById("audio");
const lyricsContainer = document.getElementById("lyricsContainer");
// JSON 데이터를 직접 포함
const lyrics = [
{ "line": "바람도 차가운날 저녁에", "startTime": 1.342, "endTime": 6.255 },
{ "line": "그이와 단둘이서 만났네", "startTime": 6.436, "endTime": 10.289 },
{ "line": "정답던 이시간이 지나면", "startTime": 10.861, "endTime": 15.227 },
{ "line": "나 혼자 떠나 가야해", "startTime": 15.884, "endTime": 20.271 },
{ "line": "거리엔 가로등불 하나 둘", "startTime": 21.136, "endTime": 24.819 },
{ "line": "어둠은 불빛속에 내리고", "startTime": 25.649, "endTime": 29.686 },
{ "line": "정답던 이 시간이 지나면", "startTime": 30.69, "endTime": 34.431 },
{ "line": "나 혼자 떠나 가야해", "startTime": 35.587, "endTime": 38.462 },
{ "line": "그대여 그대여 울지말아요", "startTime": 39.894, "endTime": 43.781 },
{ "line": "사랑은 사랑은 슬픈거래요", "startTime": 44.512, "endTime": 48.481 },
{ "line": "그대여 그대여 나를 보세요 그리고 웃어요", "startTime": 48.99, "endTime": 58.278 }
];
// 가사를 화면에 표시
lyrics.forEach(line => {
const div = document.createElement("div");
div.className = "lyrics";
div.textContent = line.line;
div.dataset.startTime = line.startTime;
div.dataset.endTime = line.endTime;
lyricsContainer.appendChild(div);
});
// 재생 시간에 맞춰 가사 색상 변경
audio.addEventListener("timeupdate", () => {
const currentTime = audio.currentTime;
document.querySelectorAll(".lyrics").forEach(div => {
const startTime = parseFloat(div.dataset.startTime);
const endTime = parseFloat(div.dataset.endTime);
if (currentTime >= startTime && currentTime < endTime) {
div.classList.add("active");
} else {
div.classList.remove("active");
}
});
});
});
</script>
</body>
</html>
[/code]
json
[code][
{
"line": "바람도 차가운날 저녁에",
"startTime": 1.342,
"endTime": 6.255
},
{
"line": "그이와 단둘이서 만났네",
"startTime": 6.436,
"endTime": 10.289
},
{
"line": "정답던 이시간이 지나면",
"startTime": 10.861,
"endTime": 15.227
},
{
"line": "나 혼자 떠나 가야해",
"startTime": 15.884,
"endTime": 20.271
},
{
"line": "거리엔 가로등불 하나 둘",
"startTime": 21.136,
"endTime": 24.819
},
{
"line": "어둠은 불빛속에 내리고",
"startTime": 25.649,
"endTime": 29.686
},
{
"line": "정답던 이 시간이 지나면",
"startTime": 30.690,
"endTime": 34.431
},
{
"line": "나 혼자 떠나 가야해",
"startTime": 35.587,
"endTime": 38.462
},
{
"line": "그대여 그대여 울지말아요",
"startTime": 39.894,
"endTime": 43.781
},
{
"line": "사랑은 사랑은 슬픈거래요",
"startTime": 44.51 2,
"endTime": 48.481
},
{
"line": "그대여 그대여 나를 보세요 그리고 웃어요",
"startTime": 48.990,
"endTime": 58.278
}
]
[/code]
첨부파일
댓글 5개
수고하셨습니다.
@glitter0gim
관심을 가져주셔서 감사드립니다^^
좋습니다. 감사합니다. !!
@teemall
격려의 댓글을 남겨주셔서 감사드립니다.^^
가사 추출 프로그램은
https://blog.naver.com/silhwan5125/100112135812
가 최고입니다.
단지 추출된 문자열을 json 형식으로 모든 가사를 "한번에" 바꾸려면 정규표현식으로 파싱질을 해야 하지만 개별로 바꾸려면 나름대로 괜찮을 거에요.
추천
게시판 목록
개발자팁
질문은 QA에서 해주시기 바랍니다.
| 번호 | 분류 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|---|
| 5396 | 기타 |
슈퍼스타맨
|
5개월 전 | 367 | |
| 5395 | PHP |
untitled
|
6개월 전 | 833 | |
| 5394 | MySQL |
선택과집중
|
7개월 전 | 612 | |
| 5393 | 웹서버 |
techstar
|
9개월 전 | 876 | |
| 5392 |
oneit
|
1년 전 | 1230 | ||
| 5391 | 11개월 전 | 1133 | |||
| 5390 | 11개월 전 | 919 | |||
| 5389 | 10개월 전 | 889 | |||
| 5388 | 10개월 전 | 989 | |||
| 5387 | 9개월 전 | 821 | |||
| 5386 | JavaScript |
nekoieye
|
9개월 전 | 987 | |
| 5385 | 웹서버 | 9개월 전 | 999 | ||
| 5384 | JavaScript |
수평선1203
|
10개월 전 | 832 | |
| 5383 | 기타 | 11개월 전 | 1141 | ||
| 5382 | 기타 |
수평선1203
|
11개월 전 | 591 | |
| 5381 | JavaScript | 11개월 전 | 924 | ||
| 5380 | 기타 |
지구인430
|
11개월 전 | 707 | |
| 5379 | JavaScript | 11개월 전 | 706 | ||
| 5378 | 12개월 전 | 1209 | |||
| 5377 | 기타 |
수평선1203
|
1년 전 | 776 | |
| 5376 | jQuery |
수평선1203
|
1년 전 | 592 | |
| 5375 | jQuery |
techstar
|
1년 전 | 745 | |
| 5374 | 기타 |
수평선1203
|
1년 전 | 798 | |
| 5373 | MySQL |
wodud3073
|
1년 전 | 826 | |
| 5372 | 기타 |
수평선1203
|
1년 전 | 1028 | |
| 5371 | JavaScript |
wodud3073
|
1년 전 | 740 | |
| 5370 | JavaScript |
wodud3073
|
1년 전 | 745 | |
| 5369 | PHP |
wodud3073
|
1년 전 | 1254 | |
| 5368 | PHP | 1년 전 | 1426 | ||
| 5367 | 기타 |
nekoieye
|
1년 전 | 1302 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기