@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()
}
}
Comments
0 B
|👍
/👎