@name Music Player v1.0 @inputs Controller:wirelink Info:wirelink Radio:wirelink User:entity @outputs StreamURL:string PLAY Volume SongTimeDecimal PlayedTime CurrentSongNumber @persist Player:entity RangeToPlayer:number PlayedTime:number CurrentSongNumber NextSongNumber LastSongNumber @trigger #!!!PLAYER EDIT STARTS HERE!!! #Playlist = array("Default" #) #Format: #"Song Name", "Song Artist", "Song Time Minutes", "Song Time Seconds", "Song Link" #To get the link, find music on soundcloud, then use this converter to get the link in .mp3 #https://www.appendipity.com/get-mp3-links-soundcloud/ SongInfo = array("Find Yourself", "John O Callaghan", "7", "26", "http://media.soundcloud.com/stream/59kSSbkraFIV.mp3", "Walk", "Foo Fighters", "4", "16", "http://media.soundcloud.com/stream/3sQXZtg2IkIh.mp3", "Take me to Church", "Jasmine", "4", "07", "http://media.soundcloud.com/stream/AGgjElPgqpOw.mp3", "Forgive me", "Group1Crew", "3", "46", "http://media.soundcloud.com/stream/CAdLM04pOECV.mp3", "My Friend", "Tristam", "4", "22", "http://media.soundcloud.com/stream/ILeojRVJSIzI.mp3", "Whole World Is Watching", "Within Temptation", "4", "13", "http://media.soundcloud.com/stream/oPkcnW03k3ij.mp3" ) #!!!PLAYER EDIT STOPS HERE!!! if(first() | duped()) { hint("Music Player v1.0 - Made by Mentin", 15) #Put in your own Steam ID if(!isSinglePlayer() & owner():steamID()!= "STEAM_0:1:28842512"){ selfDestruct() } #How far must you be from the Screen for it to activate RangeToPlayer = 200 #The volume of the music player at start up Volume = 1.0 #DO NOT CHANGE WHAT'S UNDER! CurrentSongNumber = 1 NextSongNumber = 2 PLAY = 0 } #BASIC NumberOfSongs = SongInfo:count()/5 #Last Song LastSongName = SongInfo[1+(LastSongNumber-1)*5,string] #Current Song SongName = SongInfo[1+(CurrentSongNumber-1)*5,string] SongArtist = SongInfo[2+(CurrentSongNumber-1)*5,string] SongTimeM = SongInfo[3+(CurrentSongNumber-1)*5,string] SongTimeS = SongInfo[4+(CurrentSongNumber-1)*5,string] SongLink = SongInfo[5+(CurrentSongNumber-1)*5,string] SongTime = SongTimeM + "." + SongTimeS SongTimeDecimal = SongTimeM:toNumber()*60 + SongTimeS:toNumber() #Next Song NextSongName1 = SongInfo[1+(NextSongNumber-1)*5,string] NextSongArtist = SongInfo[2+(NextSongNumber-1)*5,string] NextSongTimeM = SongInfo[3+(NextSongNumber-1)*5,string] NextSongTimeS = SongInfo[4+(NextSongNumber-1)*5,string] NextSongLink = SongInfo[5+(NextSongNumber-1)*5,string] NextSongTime = NextSongTimeM + "." + NextSongTimeS #NEXT SONGS #Current TempX1 = CurrentSongNumber TempX2 = TempX1 + 1 TempX3 = TempX2 + 1 TempX4 = TempX3 + 1 if(TempX1 == NumberOfSongs) { TempX1 = 0 TempX2 = 1 TempX3 = 2 TempX4 = 3 } elseif (TempX2 == NumberOfSongs) { TempX2 = 0 TempX3 = 1 TempX4 = 2 } elseif (TempX3 == NumberOfSongs) { TempX3 = 0 TempX4 = 1 } elseif (TempX4 == NumberOfSongs) { TempX4 = 0 } #Use Above Info To Get Names SongName1 = SongInfo[1+(TempX1)*5,string] SongName2 = SongInfo[1+(TempX2)*5,string] SongName3 = SongInfo[1+(TempX3)*5,string] SongName4 = SongInfo[1+(TempX4)*5,string] #Next TempY1 = NextSongNumber TempY2 = TempY1 + 1 TempY3 = TempY2 + 1 if(TempY1 == NumberOfSongs) { TempY1 = 0 TempY2 = 1 TempY3 = 2 } elseif (TempY2 == NumberOfSongs) { TempY2 = 0 TempY3 = 1 } elseif (TempY3 == NumberOfSongs) { TempY3 = 0 } #Use Above Info To Get Names NextSongName2 = SongInfo[1+(TempY1)*5,string] NextSongName3 = SongInfo[1+(TempY2)*5,string] NextSongName4 = SongInfo[1+(TempY3)*5,string] if(first() | duped()) { #Clear Screens! Controller:egpClear() Info:egpClear() function void screenController(){ #CONTROLLER SCREEN #Background Controller:egpBox(1,vec2(256,256),vec2(512,512)) Controller:egpColor(1,vec(108,201,248)) Controller:egpMaterial(1, "gui/center_gradient") #Top Bar Controller:egpRoundedBox(2,vec2(256,60),vec2(480,90)) Controller:egpColor(2,vec(255,255,255)) Controller:egpMaterial(2, "gui/center_gradient") #Top Bar Outline Controller:egpRoundedBoxOutline(3,vec2(256,60),vec2(480,90)) #Play Button Controller:egpBox(6,vec2(90,180),vec2(100,40)) #Play Button Outline Controller:egpBoxOutline(7,vec2(90,180),vec2(100,40)) Controller:egpColor(7,vec(0,0,0)) #Play Button Text Controller:egpText(8,"Play",vec2(90,170)) Controller:egpAlign(8,1) Controller:egpColor(8,vec(0,0,0)) #Stop Button Controller:egpBox(10,vec2(90,135),vec2(100,40)) #Stop Button Outline Controller:egpBoxOutline(11,vec2(90,135),vec2(100,40)) Controller:egpColor(11,vec(0,0,0)) #Stop Button Text Controller:egpText(12,"Stop",vec2(90,127)) Controller:egpAlign(12,1) Controller:egpColor(12,vec(0,0,0)) #Volume Up Button Controller:egpBox(13,vec2(170,180),vec2(35,40)) #Volume Up Button Outline Controller:egpBoxOutline(14,vec2(170,180),vec2(35,40)) Controller:egpColor(14,vec(0,0,0)) #Volume Up Button Text Controller:egpText(15,"+",vec2(169,164)) Controller:egpAlign(15,1) Controller:egpSize(15,30) Controller:egpColor(15,vec(0,0,0)) #Volume Down Button Controller:egpBox(17,vec2(342,180),vec2(35,40)) #Volume Down Button Outline Controller:egpBoxOutline(18,vec2(342,180),vec2(35,40)) Controller:egpColor(18,vec(0,0,0)) #Volume Down Button Text Controller:egpText(19,"-",vec2(343,164)) Controller:egpAlign(19,1) Controller:egpSize(19,30) Controller:egpColor(19,vec(0,0,0)) #Bottom Bar Controller:egpBox(22,vec2(256,355),vec2(480,280)) Controller:egpColor(22,vec(255,255,255)) Controller:egpMaterial(22, "vgui/gradient_down") #Bottom Bar Outline Controller:egpBoxOutline(23,vec2(256,355),vec2(480,280)) Controller:egpColor(23,vec(0,0,0)) #Previous Song Bar Controller:egpBoxOutline(24,vec2(46,355),vec2(60,280)) Controller:egpColor(24,vec(0,0,0)) #Previous Song Bar Text Controller:egpText(25,"<",vec2(46,333)) Controller:egpAlign(25,1) Controller:egpColor(25,vec(0,0,0)) Controller:egpSize(25,50) #Next Song Bar Controller:egpBoxOutline(26,vec2(466,355),vec2(60,280)) Controller:egpColor(26,vec(0,0,0)) #Next Song Bar Text Controller:egpText(27,">",vec2(466,333)) Controller:egpAlign(27,1) Controller:egpColor(27,vec(0,0,0)) Controller:egpSize(27,50) #Bottom Bar Title Text Controller:egpText(28,"Title",vec2(256,250)) Controller:egpAlign(28,1) Controller:egpColor(28,vec(0,0,0)) Controller:egpSize(28,35) #Bottom Bar Duration Text Controller:egpText(30,"Duration",vec2(256,380)) Controller:egpAlign(30,1) Controller:egpColor(30,vec(0,0,0)) Controller:egpSize(30,35) #Skip Song Button Controller:egpBox(34,vec2(422,180),vec2(100,40)) Controller:egpAlign(34,1) #Skip Song Button Outline Controller:egpBoxOutline(35,vec2(422,180),vec2(100,40)) Controller:egpColor(35,vec(0,0,0)) Controller:egpAlign(35,1) #Skip Song Text Controller:egpText(36,"Skip -->",vec2(422,170)) Controller:egpAlign(36,1) Controller:egpColor(36,vec(0,0,0)) } function void screenInfo() { #INFO SCREEN #Background Info:egpBox(1,vec2(256,256),vec2(512,512)) Info:egpColor(1,vec(255,128,0)) Info:egpMaterial(1, "gui/center_gradient") #Title Bar Info:egpBox(2,vec2(256,32),vec2(512,64)) Info:egpColor(2,vec(0,204,0)) Info:egpMaterial(2, "gui/center_gradient") #Title Bar Text Info:egpText(3,"Playlist",vec2(256,6)) Info:egpAlign(3,1) Info:egpColor(3,vec(0,0,153)) Info:egpSize(3,48) #Song Name Bars #1 Info:egpBox(10,vec2(256,104),vec2(496,64)) Info:egpColor(10,vec(255,255,255)) Info:egpAlign(10,1) Info:egpMaterial(10, "gui/center_gradient") #2 Info:egpBox(13,vec2(256,176),vec2(496,64)) Info:egpColor(13,vec(102,255,255)) Info:egpAlign(13,1) Info:egpMaterial(13, "gui/center_gradient") #3 Info:egpBox(16,vec2(256,248),vec2(496,64)) Info:egpColor(16,vec(255,255,255)) Info:egpAlign(16,1) Info:egpMaterial(16, "gui/center_gradient") #4 Info:egpBox(19,vec2(256,320),vec2(496,64)) Info:egpColor(19,vec(255,255,255)) Info:egpAlign(19,1) Info:egpMaterial(19, "gui/center_gradient") #5 Info:egpBox(22,vec2(256,392),vec2(496,64)) Info:egpColor(22,vec(255,255,255)) Info:egpAlign(22,1) Info:egpMaterial(22, "gui/center_gradient") #6 Info:egpBox(25,vec2(256,464),vec2(496,64)) Info:egpColor(25,vec(255,255,255)) Info:egpAlign(25,1) Info:egpMaterial(25, "gui/center_gradient") } function void infoSongs() { #Last Song Info:egpText(11,LastSongName,vec2(256,88)) Info:egpText(14,SongName,vec2(256,160)) if(PLAY == 0) { #Current Song Info:egpRemove(15) #Next Song Info:egpText(17,SongName1,vec2(256,232)) #Next x2 Song Info:egpText(20,SongName2,vec2(256,304)) #Next x3 Song Info:egpText(23,SongName3,vec2(256,376)) #Next x4 Song Info:egpText(26,SongName4,vec2(256,448)) } else { #Current Song Info:egpBoxOutline(15,vec2(256,176),vec2(496,64)) Info:egpColor(15,vec(255,0,0)) #Next Song Info:egpText(17,NextSongName1,vec2(256,232)) #Next x2 Song Info:egpText(20,NextSongName2,vec2(256,304)) #Next x3 Song Info:egpText(23,NextSongName3,vec2(256,376)) #Next x4 Song Info:egpText(26,NextSongName4,vec2(256,448)) } } function void volumeController() { #Volume Info Amount Controller:egpText(21,Volume * 100 + "%",vec2(256,164)) Controller:egpAlign(21,1) Controller:egpColor(21,vec(0,0,0)) Controller:egpSize(21,30) } function void songTimer() { #Song Timer Text Controller:egpText(32,PlayedTime + " / " + SongTimeDecimal,vec2(256,120)) Controller:egpAlign(32,1) Controller:egpColor(32,vec(0,0,0)) Controller:egpSize(32,30) } function void topBarTitle() { #Top Bar Title Controller:egpText(4,SongName,vec2(256,55)) Controller:egpAlign(4,1) Controller:egpColor(4,vec(0,0,0)) } function void bottomBar() { #Bottom Bar Song Title Controller:egpText(29,SongName,vec2(256,300)) #Bottom Bar Song Artist Controller:egpText(33,SongArtist,vec2(256,330)) #Bottom Bar Song Duration Controller:egpText(31,SongTime,vec2(256,430)) } function void bottomBarNext() { #Bottom Bar Song Title Controller:egpText(29,NextSongName1,vec2(256,300)) #Bottom Bar Song Artist Controller:egpText(33,NextSongArtist,vec2(256,330)) #Bottom Bar Song Duration Controller:egpText(31,NextSongTime,vec2(256,430)) } function void startSong() { PLAY = 1 PlayedTime = 0 StreamURL = SongLink timer("songtime",1000) if(CurrentSongNumber == NumberOfSongs) { NextSongNumber = 1 } else { NextSongNumber = CurrentSongNumber + 1 } #CONTROLLER EGP #Top Bar Title topBarTitle() #Color Stop & Start Button Controller:egpColor(6,vec(0,255,0)) Controller:egpColor(10,vec(255,255,255)) #Skip Button Controller:egpColor(34,vec(200,200,255)) } function void stopSong() { PLAY = 0 PlayedTime = 0 StreamURL = "" LastSongNumber = CurrentSongNumber CurrentSongNumber = NextSongNumber stoptimer("songtime") #CONTROLLER EGP #Color Stop & Start Button Controller:egpColor(6,vec(255,255,255)) Controller:egpColor(10,vec(255,0,0)) #Top Bar Title Controller:egpRemove(4) #Skip Button Controller:egpColor(34,vec(255,255,255)) songTimer() } #Draw Info screenController() screenInfo() infoSongs() volumeController() bottomBar() songTimer() #CONTROLLER EGP #Color Stop & Start Button Controller:egpColor(10,vec(255,0,0)) #Bottom Bar Song Title Controller:egpAlign(29,1) Controller:egpColor(29,vec(0,0,255)) Controller:egpSize(29,25) #Bottom Bar Song Duration Controller:egpAlign(31,1) Controller:egpColor(31,vec(255,0,0)) Controller:egpSize(31,20) #Bottom Bar Song Artist Controller:egpAlign(33,1) Controller:egpColor(33,vec(0,255,0)) Controller:egpSize(33,22) #INFO EGP #1 Last Song Info:egpAlign(11,1) Info:egpColor(11,vec(0,0,0)) Info:egpSize(11,32) #2 Current Song Info:egpAlign(14,1) Info:egpColor(14,vec(100,0,0)) Info:egpSize(14,32) #Remove Outline Info:egpRemove(15) #3 Next Song Info:egpAlign(17,1) Info:egpColor(17,vec(0,0,0)) Info:egpSize(17,32) #4 Next x2 Song Info:egpAlign(20,1) Info:egpColor(20,vec(0,0,0)) Info:egpSize(20,32) #5 Next x3 Song Info:egpAlign(23,1) Info:egpColor(23,vec(0,0,0)) Info:egpSize(23,32) #6 Next x4 Song Info:egpAlign(26,1) Info:egpColor(26,vec(0,0,0)) Info:egpSize(26,32) #CURSOR Controller:egpCircleOutline(4,vec2(0,0),vec2(5,5)) Controller:egpColor(4,vec(255,0,0)) Controller:egpParentToCursor(4) } #Interval between actions, in miliseconds interval(1000) #If it can find a player within the "RangeToPlayer"... if(findCanQuery()) { findIncludeClass("player") findInSphere(Controller:entity():pos(),RangeToPlayer) #Remove :owner() to allow all players access the Controller EGP Player = findClosest(Controller:entity():pos()):owner() Cursor = round(Controller:egpCursor(Player)) if(~User & User) { #Start Song if(inrange(Cursor,Controller:egpPos(6) - Controller:egpSize(6)/2,Controller:egpPos(6) + Controller:egpSize(6)/2) & PLAY == 0) { startSong() #INFO EGP #Song List infoSongs() } #Stop Song if(inrange(Cursor,Controller:egpPos(10) - Controller:egpSize(10)/2,Controller:egpPos(10) + Controller:egpSize(10)/2) & PLAY == 1) { stopSong() #INFO EGP #Song List infoSongs() } #Skip Song if(inrange(Cursor,Controller:egpPos(34) - Controller:egpSize(34)/2,Controller:egpPos(34) + Controller:egpSize(34)/2) & PLAY == 1) { } #Volume Up if(inrange(Cursor,Controller:egpPos(13) - Controller:egpSize(13)/2,Controller:egpPos(13) + Controller:egpSize(13)/2) & Volume <= 0.9) { Volume += 0.1 volumeController() } #Volume Down if(inrange(Cursor,Controller:egpPos(17) - Controller:egpSize(17)/2,Controller:egpPos(17) + Controller:egpSize(17)/2) & Volume >= 0.2) { Volume -= 0.1 volumeController() } if(PLAY == 0) { #Previous Song if(inrange(Cursor,Controller:egpPos(24) - Controller:egpSize(24)/2,Controller:egpPos(24) + Controller:egpSize(24)/2)) { if(CurrentSongNumber == 1) { CurrentSongNumber = NumberOfSongs } else { CurrentSongNumber -= 1 } } #Next Song if(inrange(Cursor,Controller:egpPos(26) - Controller:egpSize(26)/2,Controller:egpPos(26) + Controller:egpSize(26)/2)) { if(CurrentSongNumber == NumberOfSongs) { CurrentSongNumber = 1 } else { CurrentSongNumber +=1 } } } elseif(PLAY == 1) { #Previous Song if(inrange(Cursor,Controller:egpPos(24) - Controller:egpSize(24)/2,Controller:egpPos(24) + Controller:egpSize(24)/2)) { if(NextSongNumber == 1) { NextSongNumber = NumberOfSongs } else { NextSongNumber -= 1 } } #Next Song if(inrange(Cursor,Controller:egpPos(26) - Controller:egpSize(26)/2,Controller:egpPos(26) + Controller:egpSize(26)/2)) { if(NextSongNumber == NumberOfSongs) { NextSongNumber = 1 } else { NextSongNumber += 1 } } } } } interval(5000) if(PLAY != 1){ bottomBar() infoSongs() topBarTitle() } else { bottomBarNext() infoSongs() topBarTitle() } interval(1000) if(clk("songtime")) { if(PLAY == 1) { PlayedTime += 1 #Update Timer Text on Controller EGP songTimer() if(PlayedTime >= SongTimeDecimal) { PlayedTime = 0 PLAY = 1 StreamURL = NextSongLink LastSongNumber = CurrentSongNumber CurrentSongNumber = NextSongNumber if(CurrentSongNumber == NumberOfSongs) { NextSongNumber = 1 } else { NextSongNumber +=1 } } timer("songtime",1000) infoSongs() } }