【專輯藝人】: Spring Of Life《生命之春》
【專輯名稱】: Eric Chiryoku
【發行日期】: 2006年
【唱片公司】: Orange Music
【專輯類型】: New-age, Instrumental, Easy Listening
【專輯簡介】:
艾瑞克·奇瑞庫(英語:Eric Chiryoku),是駐新加坡作曲家及出色的多樂器演奏家。他融合了流行和民謠音樂,將想像力延伸到一個極點,使聆聽者樂於讓他們的心臟和靈魂被一些出色的創新鋼琴,長笛和小提琴作品深深撫摸。
艾瑞克曾兩次獲得2007年國際在線音樂獎最佳作曲家和男性獨奏藝術家提名。2005年,艾瑞克出版首張專輯《冬季物語》(Winter Story),2006年,他更憑藉《冬季物語》這首曲獲得了最佳器樂配樂獎。《生命之春》(Spring of Life)緊隨其後於翌年出版。2012年,他出版《秋日之旅》(Autumn Journey),並於2015年以《夏日在我心中》(Summer in My Heart)完成四季系列。
2013年11月,新加坡華納音樂發行《三個季節的旅程》(Journey of 3 Seasons)合輯,收錄了從《冬季物語》、《生命之春》和《秋日之旅》三張專輯中精選出來的20首作品。
【專輯播放】 · · · · · ·
----- all music copyrighted please purchase original materials -----
----- 所有的音樂只是試聽音質請購買原裝版本 -----
${song.name}
${song.singer}
`;
});
playlist.innerHTML = htmls.join("");
},
defineProperties: function () {
Object.defineProperty(this, "currentSong", {
get: function () {
return this.songs[this.currentIndex];
} });
},
handleEvents: function () {
const _this = this;
const cdWidth = cd.offsetWidth;
// X? l? CD quay / d?ng
// Handle CD spins / stops
const cdThumbAnimate = cdThumb.animate([{ transform: "rotate(360deg)" }], {
duration: 10000, // 10 seconds
iterations: Infinity });
cdThumbAnimate.pause();
// X? l? phóng to / thu nh? CD
// Handles CD enlargement / reduction
document.onscroll = function () {
const scrollTop = window.scrollY || document.documentElement.scrollTop;
const newCdWidth = cdWidth - scrollTop;
cd.style.width = newCdWidth > 0 ? newCdWidth + "px" : 0;
cd.style.opacity = newCdWidth / cdWidth;
};
// X? l? khi click play
// Handle when click play
playBtn.onclick = function () {
if (_this.isPlaying) {
audio.pause();
} else {
audio.play();
}
};
// Khi song ???c play
// When the song is played
audio.onplay = function () {
_this.isPlaying = true;
player.classList.add("playing");
cdThumbAnimate.play();
};
// Khi song b? pause
// When the song is pause
audio.onpause = function () {
_this.isPlaying = false;
player.classList.remove("playing");
cdThumbAnimate.pause();
};
// Khi ti?n ?? bài hát thay ??i
// When the song progress changes
audio.ontimeupdate = function () {
if (audio.duration) {
const progressPercent = Math.floor(
audio.currentTime / audio.duration * 100);
progress.value = progressPercent;
}
};
// X? l? khi tua song
// Handling when seek
progress.onchange = function (e) {
const seekTime = audio.duration / 100 * e.target.value;
audio.currentTime = seekTime;
};
// Khi next song
// When next song
nextBtn.onclick = function () {
if (_this.isRandom) {
_this.playRandomSong();
} else {
_this.nextSong();
}
audio.play();
_this.render();
_this.scrollToActiveSong();
};
// Khi prev song
// When prev song
prevBtn.onclick = function () {
if (_this.isRandom) {
_this.playRandomSong();
} else {
_this.prevSong();
}
audio.play();
_this.render();
_this.scrollToActiveSong();
};
// X? l? b?t / t?t random song
// Handling on / off random song
randomBtn.onclick = function (e) {
_this.isRandom = !_this.isRandom;
_this.setConfig("isRandom", _this.isRandom);
randomBtn.classList.toggle("active", _this.isRandom);
};
// X? l? l?p l?i m?t song
// Single-parallel repeat processing
repeatBtn.onclick = function (e) {
_this.isRepeat = !_this.isRepeat;
_this.setConfig("isRepeat", _this.isRepeat);
repeatBtn.classList.toggle("active", _this.isRepeat);
};
// X? l? next song khi audio ended
// Handle next song when audio ended
audio.onended = function () {
if (_this.isRepeat) {
audio.play();
} else {
nextBtn.click();
}
};
// L?ng nghe hành vi click vào playlist
// Listen to playlist clicks
playlist.onclick = function (e) {
const songNode = e.target.closest(".song:not(.active)");
if (songNode || e.target.closest(".option")) {
// X? l? khi click vào song
// Handle when clicking on the song
if (songNode) {
_this.currentIndex = Number(songNode.dataset.index);
_this.loadCurrentSong();
_this.render();
audio.play();
}
// X? l? khi click vào song option
// Handle when clicking on the song option
if (e.target.closest(".option")) {
}
}
};
},
scrollToActiveSong: function () {
setTimeout(() => {
$(".song.active").scrollIntoView({
behavior: "smooth",
block: "nearest" });
}, 300);
},
loadCurrentSong: function () {
heading.textContent = this.currentSong.name;
cdThumb.style.backgroundImage = `url('${this.currentSong.image}')`;
audio.src = this.currentSong.path;
},
loadConfig: function () {
this.isRandom = this.config.isRandom;
this.isRepeat = this.config.isRepeat;
},
nextSong: function () {
this.currentIndex++;
if (this.currentIndex >= this.songs.length) {
this.currentIndex = 0;
}
this.loadCurrentSong();
},
prevSong: function () {
this.currentIndex--;
if (this.currentIndex