Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @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()
- }
- }
Add Comment
Please, Sign In to add comment