diff --git a/JavaScript/Music Player/images/music-1.jpeg b/JavaScript/Music Player/images/music-1.jpeg new file mode 100644 index 0000000..d8968e9 Binary files /dev/null and b/JavaScript/Music Player/images/music-1.jpeg differ diff --git a/JavaScript/Music Player/images/music-2.jpeg b/JavaScript/Music Player/images/music-2.jpeg new file mode 100644 index 0000000..8e13c62 Binary files /dev/null and b/JavaScript/Music Player/images/music-2.jpeg differ diff --git a/JavaScript/Music Player/images/music-3.jpeg b/JavaScript/Music Player/images/music-3.jpeg new file mode 100644 index 0000000..b1889dc Binary files /dev/null and b/JavaScript/Music Player/images/music-3.jpeg differ diff --git a/JavaScript/Music Player/images/music-4.jpeg b/JavaScript/Music Player/images/music-4.jpeg new file mode 100644 index 0000000..26841fb Binary files /dev/null and b/JavaScript/Music Player/images/music-4.jpeg differ diff --git a/JavaScript/Music Player/images/music-5.jpeg b/JavaScript/Music Player/images/music-5.jpeg new file mode 100644 index 0000000..df26345 Binary files /dev/null and b/JavaScript/Music Player/images/music-5.jpeg differ diff --git a/JavaScript/Music Player/images/music-6.jpeg b/JavaScript/Music Player/images/music-6.jpeg new file mode 100644 index 0000000..26d64d5 Binary files /dev/null and b/JavaScript/Music Player/images/music-6.jpeg differ diff --git a/JavaScript/Music Player/index.html b/JavaScript/Music Player/index.html new file mode 100644 index 0000000..6c9fad7 --- /dev/null +++ b/JavaScript/Music Player/index.html @@ -0,0 +1,45 @@ + + + + + + Music Player | Ankit Ranjan + + + + +
+
+ Now Playing +
+
+ +
+
+

+

+
+
+
+ +
+
+ 0:00 + 0:00 +
+
+
+ skip_previous +
+ play_arrow +
+ skip_next +
+
+
+ + + + + + diff --git a/JavaScript/Music Player/js/music-list.js b/JavaScript/Music Player/js/music-list.js new file mode 100644 index 0000000..23799a4 --- /dev/null +++ b/JavaScript/Music Player/js/music-list.js @@ -0,0 +1,56 @@ +// To add more song, just copy the following code and paste inside the array + +// { +// name: "Here is the music name", +// artist: "Here is the artist name", +// img: "image name here - remember img must be in .jpg formate and it's inside the images folder of this project folder", +// src: "music name here - remember img must be in .mp3 formate and it's inside the songs folder of this project folder" +// } + +//paste it inside the array as more as you want music then you don't need to do any other thing + +let allMusic = [ + { + name: "Tu Jaane Na", + artist: "Atif Aslam", + img: "music-1", + src: "music-1" + }, + { + name: "Tum Tak", + artist: "A R Rahman", + img: "music-2", + src: "music-2" + }, + { + name: "Ye Tune Kya Kiya", + artist: "Javed Bashir", + img: "music-3", + src: "music-3" + }, + { + name: "Agar Tum Saath Ho", + artist: "Alka Yagnik", + img: "music-4", + src: "music-4" + }, + { + name: "Lut Gaye", + artist: "Jubin Nautiyal", + img: "music-5", + src: "music-5" + }, + { + name: "Tu Hi Yaar Mera", + artist: "Arijit Singh", + img: "music-6", + src: "music-6" + }, + // like this paste it and remember to give comma after ending of this bracket } + // { + // name: "Here is the music name", + // artist: "Here is the artist name", + // img: "image name here - remember img must be in .jpg formate and it's inside the images folder of this project folder", + // src: "music name here - remember img must be in .mp3 formate and it's inside the songs folder of this project folder" + // } +]; \ No newline at end of file diff --git a/JavaScript/Music Player/js/script.js b/JavaScript/Music Player/js/script.js new file mode 100644 index 0000000..d85ce99 --- /dev/null +++ b/JavaScript/Music Player/js/script.js @@ -0,0 +1,117 @@ +const wrapper = document.querySelector(".wrapper"), +musicImg = wrapper.querySelector(".img-area img"), +musicName = wrapper.querySelector(".song-details .name"), +musicArtist = wrapper.querySelector(".song-details .artist"), +playPauseBtn = wrapper.querySelector(".play-pause"), +prevBtn = wrapper.querySelector("#prev"), +nextBtn = wrapper.querySelector("#next"), +mainAudio = wrapper.querySelector("#main-audio"), +progressArea = wrapper.querySelector(".progress-area"), +progressBar = progressArea.querySelector(".progress-bar"), +musicList = wrapper.querySelector(".music-list"), +moreMusicBtn = wrapper.querySelector("#more-music"), +closemoreMusic = musicList.querySelector("#close"); + +let musicIndex = Math.floor((Math.random() * allMusic.length) + 1); +isMusicPaused = true; + +window.addEventListener("load", ()=>{ + loadMusic(musicIndex); + playingSong(); +}); + +function loadMusic(indexNumb){ + musicName.innerText = allMusic[indexNumb - 1].name; + musicArtist.innerText = allMusic[indexNumb - 1].artist; + musicImg.src = `images/${allMusic[indexNumb - 1].src}.jpeg`; + mainAudio.src = `songs/${allMusic[indexNumb - 1].src}.mp3`; +} + +//play music function +function playMusic(){ + wrapper.classList.add("paused"); + playPauseBtn.querySelector("i").innerText = "pause"; + mainAudio.play(); +} + +//pause music function +function pauseMusic(){ + wrapper.classList.remove("paused"); + playPauseBtn.querySelector("i").innerText = "play_arrow"; + mainAudio.pause(); +} + +//prev music function +function prevMusic(){ + musicIndex--; //decrement of musicIndex by 1 + //if musicIndex is less than 1 then musicIndex will be the array length so the last music play + musicIndex < 1 ? musicIndex = allMusic.length : musicIndex = musicIndex; + loadMusic(musicIndex); + playMusic(); +} + +//next music function +function nextMusic(){ + musicIndex++; //increment of musicIndex by 1 + //if musicIndex is greater than array length then musicIndex will be 1 so the first music play + musicIndex > allMusic.length ? musicIndex = 1 : musicIndex = musicIndex; + loadMusic(musicIndex); + playMusic(); +} + +// play or pause button event +playPauseBtn.addEventListener("click", ()=>{ + const isMusicPlay = wrapper.classList.contains("paused"); + //if isPlayMusic is true then call pauseMusic else call playMusic + isMusicPlay ? pauseMusic() : playMusic(); +}); + +//prev music button event +prevBtn.addEventListener("click", ()=>{ + prevMusic(); +}); + +//next music button event +nextBtn.addEventListener("click", ()=>{ + nextMusic(); +}); + +// update progress bar width according to music current time +mainAudio.addEventListener("timeupdate", (e)=>{ + const currentTime = e.target.currentTime; //getting playing song currentTime + const duration = e.target.duration; //getting playing song total duration + let progressWidth = (currentTime / duration) * 100; + progressBar.style.width = `${progressWidth}%`; + + let musicCurrentTime = wrapper.querySelector(".current-time"), + musicDuartion = wrapper.querySelector(".max-duration"); + mainAudio.addEventListener("loadeddata", ()=>{ + // update song total duration + let mainAdDuration = mainAudio.duration; + let totalMin = Math.floor(mainAdDuration / 60); + let totalSec = Math.floor(mainAdDuration % 60); + if(totalSec < 10){ //if sec is less than 10 then add 0 before it + totalSec = `0${totalSec}`; + } + musicDuartion.innerText = `${totalMin}:${totalSec}`; + }); + // update playing song current time + let currentMin = Math.floor(currentTime / 60); + let currentSec = Math.floor(currentTime % 60); + if(currentSec < 10){ //if sec is less than 10 then add 0 before it + currentSec = `0${currentSec}`; + } + musicCurrentTime.innerText = `${currentMin}:${currentSec}`; +}); + +// update playing song currentTime on according to the progress bar width +progressArea.addEventListener("click", (e)=>{ + let progressWidth = progressArea.clientWidth; //getting width of progress bar + let clickedOffsetX = e.offsetX; //getting offset x value + let songDuration = mainAudio.duration; //getting song total duration + + mainAudio.currentTime = (clickedOffsetX / progressWidth) * songDuration; + playMusic(); //calling playMusic function +}); + + diff --git a/JavaScript/Music Player/songs/music-1.mp3 b/JavaScript/Music Player/songs/music-1.mp3 new file mode 100644 index 0000000..7aa853a Binary files /dev/null and b/JavaScript/Music Player/songs/music-1.mp3 differ diff --git a/JavaScript/Music Player/songs/music-2.mp3 b/JavaScript/Music Player/songs/music-2.mp3 new file mode 100644 index 0000000..26f569f Binary files /dev/null and b/JavaScript/Music Player/songs/music-2.mp3 differ diff --git a/JavaScript/Music Player/songs/music-3.mp3 b/JavaScript/Music Player/songs/music-3.mp3 new file mode 100644 index 0000000..4f33923 Binary files /dev/null and b/JavaScript/Music Player/songs/music-3.mp3 differ diff --git a/JavaScript/Music Player/songs/music-4.mp3 b/JavaScript/Music Player/songs/music-4.mp3 new file mode 100644 index 0000000..5336775 Binary files /dev/null and b/JavaScript/Music Player/songs/music-4.mp3 differ diff --git a/JavaScript/Music Player/songs/music-5.mp3 b/JavaScript/Music Player/songs/music-5.mp3 new file mode 100644 index 0000000..02490a1 Binary files /dev/null and b/JavaScript/Music Player/songs/music-5.mp3 differ diff --git a/JavaScript/Music Player/songs/music-6.mp3 b/JavaScript/Music Player/songs/music-6.mp3 new file mode 100644 index 0000000..4d7ce77 Binary files /dev/null and b/JavaScript/Music Player/songs/music-6.mp3 differ diff --git a/JavaScript/Music Player/style.css b/JavaScript/Music Player/style.css new file mode 100644 index 0000000..70fd912 --- /dev/null +++ b/JavaScript/Music Player/style.css @@ -0,0 +1,148 @@ +@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@200;300;400;500;600;700&display=swap'); +*{ + margin: 0; + padding: 0; + box-sizing: border-box; + font-family: "Poppins", sans-serif; +} + +*::before, *::after{ + padding: 0; + margin: 0; +} +:root{ + --pink: #ff74a4; + --violet: #9f6ea3; + --lightblack: #515C6F; + --white: #ffffff; + --darkwhite: #cecaca; + --pinkshadow: #ffcbdd; + --lightbshadow: rgba(0,0,0,0.15); +} +body{ + display: flex; + align-items: center; + justify-content: center; + min-height: 100vh; + background: linear-gradient(var(--pink) 0%, var(--violet) 100%); +} +.wrapper{ + width: 380px; + padding: 25px 30px; + overflow: hidden; + position: relative; + border-radius: 15px; + background: var(--white); + box-shadow: 0px 6px 15px var(--lightbshadow); +} +.wrapper i{ + cursor: pointer; +} +.progress-area .song-timer, +.controls, .music-list .header{ + display: flex; + align-items: center; + justify-content: space-between; +} +.top-bar{ + display: flex; + align-items: center; + justify-content: center; +} +.top-bar i{ + font-size: 30px; + color: var(--lightblack); +} +.top-bar i:first-child{ + margin-left: -7px; +} +.top-bar span{ + font-size: 18px; + margin-left: -3px; + color: var(--lightblack); +} +.img-area{ + width: 100%; + height: 256px; + overflow: hidden; + margin-top: 25px; + border-radius: 15px; + box-shadow: 0px 6px 12px var(--lightbshadow); +} +.img-area img{ + width: 100%; + height: 100%; + object-fit: cover; +} +.song-details{ + text-align: center; + margin: 30px 0; +} +.song-details p{ + color: var(--lightblack); +} +.song-details .name{ + font-size: 21px; +} +.song-details .artist{ + font-size: 18px; + opacity: 0.9; + line-height: 35px; +} +.progress-area{ + height: 6px; + width: 100%; + border-radius: 50px; + background: #f0f0f0; + cursor: pointer; +} +.progress-area .progress-bar{ + height: inherit; + width: 0%; + position: relative; + border-radius: inherit; + background: linear-gradient(90deg, var(--pink) 0%, var(--violet) 100%); +} + +.controls{ + margin: 40px 70px 5px 70px; +} +.controls i{ + font-size: 28px; + user-select: none; + background: linear-gradient(var(--pink) 0%, var(--violet) 100%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} + +.controls .play-pause{ + height: 54px; + width: 54px; + display: flex; + cursor: pointer; + align-items: center; + justify-content: center; + border-radius: 50%; + background: linear-gradient(var(--white) 0%, var(--darkwhite) 100%); + box-shadow: 0px 0px 5px var(--pink); +} +.play-pause::before{ + position: absolute; + content: ""; + height: 43px; + width: 43px; + border-radius: inherit; + background: linear-gradient(var(--pink) 0%, var(--violet) 100%); +} +.play-pause i{ + height: 43px; + width: 43px; + line-height: 43px; + text-align: center; + background: inherit; + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + position: absolute; +} \ No newline at end of file