Advertisement
zbeucler

MusicControls.js

Jun 2nd, 2020
2,430
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React, { useState, useEffect } from 'react';
  2.  
  3.  
  4.  
  5. const songData = {
  6.   "we used to talk every night": {
  7.     url:
  8.       "https://token-metadata.s3-us-west-1.amazonaws.com/SS2/audio/song1.mp3",
  9.     songName: "we used to talk every night",
  10.     artist: "elijah who",
  11.   },
  12.   "Be Mine": {
  13.     url:
  14.       "https://token-metadata.s3-us-west-1.amazonaws.com/SS2/audio/song2.mp3",
  15.     songName: "Be Mine",
  16.     artist: "Jazzinuf",
  17.   },
  18.   "feelin' fine": {
  19.     url:
  20.       "https://token-metadata.s3-us-west-1.amazonaws.com/SS2/audio/song3.mp3",
  21.     songName: "feelin' fine",
  22.     artist: "elijah who",
  23.   },
  24.   "Thunderbolt 404": {
  25.     songName: "Thunderbolt 404",
  26.     artist: "letsruntrack",
  27.     url:
  28.       "https://token-metadata.s3-us-west-1.amazonaws.com/SS2/audio/song4.mp3",
  29.   },
  30.   blue: {
  31.     songName: "blue",
  32.     artist: "jinsang x l o k a",
  33.     url:
  34.       "https://token-metadata.s3-us-west-1.amazonaws.com/SS2/audio/song5.mp3",
  35.   },
  36.   "Silent Thoughts": {
  37.     songName: "Silent Thoughts",
  38.     artist: "GentleBeatz ",
  39.     url:
  40.       "https://token-metadata.s3-us-west-1.amazonaws.com/SS2/audio/song6.mp3",
  41.   },
  42.   Return: {
  43.     songName: "Return",
  44.     artist: "Mingu5",
  45.     url:
  46.       "https://token-metadata.s3-us-west-1.amazonaws.com/SS2/audio/song7.mp3",
  47.   },
  48.   "put me back in my dream": {
  49.     songName: "put me back in my dream",
  50.     artist: "DOMINANT",
  51.     url:
  52.       "https://token-metadata.s3-us-west-1.amazonaws.com/SS2/audio/song8.mp3",
  53.   },
  54.   "Moonlit Metro": {
  55.     songName: "Moonlit Metro",
  56.     artist: "Cantrip",
  57.     url:
  58.       "https://token-metadata.s3-us-west-1.amazonaws.com/SS2/audio/song9.mp3",
  59.   },
  60.   "venice venture": {
  61.     url:
  62.       "https://token-metadata.s3-us-west-1.amazonaws.com/SS2/audio/song10.mp3",
  63.     songName: "venice venture",
  64.     artist: "big wild",
  65.   },
  66.   // 11 12 13 unnamed
  67.   "penthouse suite": {
  68.     songName: "penthouse suite",
  69.     artist: "bonus points",
  70.     url:
  71.       "https://token-metadata.s3-us-west-1.amazonaws.com/SS2/audio/song14.mp3",
  72.   },
  73.   "dejitaru glow": {
  74.     songName: "dejitaru glow",
  75.     artist: "a.l.i.s.o.n, crystal cola",
  76.     url:
  77.       "https://token-metadata.s3-us-west-1.amazonaws.com/SS2/audio/song15.mp3",
  78.   },
  79. }
  80.  
  81.  
  82.  
  83. //////////// ^song info  ////////////
  84.  
  85.  
  86.  
  87. const songArr = Object.values(songData);
  88.  
  89. const MusicControls = () => {
  90.   const [isPlaying, setIsPlaying] = useState(false);
  91.   const [songPlayingIndex, setSongPlayingIndex] = useState(0);
  92.   const song = songArr[songPlayingIndex];
  93.   const [audio, setAudio] = useState(new window.Audio(song.url));
  94.  
  95.   const onClickPrevSong = () => {
  96.     let newSongIndex = songPlayingIndex - 1;
  97.     if (newSongIndex < 0) {
  98.       newSongIndex = songArr.length - 1;
  99.     }
  100.     setSongPlayingIndex(newSongIndex);
  101.   };
  102.  
  103.   const onClickNextSong = () => {
  104.     let newSongIndex = songPlayingIndex + 1;
  105.     if (newSongIndex >= songArr.length) {
  106.       newSongIndex = 0;
  107.     }
  108.     setSongPlayingIndex(newSongIndex);
  109.   };
  110.  
  111. /////// onEndAudio Func ///////
  112.   const onEndAudio = () => {
  113.     console.log('function log');
  114.     onTogglePlaySong()
  115.   };
  116. ///////////////////////////////
  117.  
  118.   const onTogglePlaySong = () => {
  119.     setIsPlaying(!isPlaying);
  120.   };
  121.  
  122.   useEffect(() => {
  123.     if (isPlaying) {
  124.       audio.play();
  125.     }
  126.     if (!isPlaying) {
  127.       audio.pause();
  128.     }
  129.   }, [isPlaying]);
  130.   useEffect(() => {
  131.     if (isPlaying) {
  132.       audio.src = songArr[songPlayingIndex].url;
  133.       audio.play();
  134.     }
  135.   }, [songPlayingIndex]);
  136.  
  137.  
  138.  
  139.   return (
  140.           <MusicControls
  141.             isPlaying={isPlaying}
  142.             onClickPrev={onClickPrevSong}
  143.             onClickNext={onClickNextSong}
  144.             onTogglePlay={onTogglePlaySong}
  145.             song={songArr[songPlayingIndex]}
  146.             onEndAudio={()=> console.log('MusicControl log')}
  147.           />
  148. )}
  149.  
  150.  
  151.  
  152. export default MusicControls;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement