IsakViste

Music Player v2.0

Jan 17th, 2015
2,504
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.10 KB | None | 0 0
  1. @name Music Player v1.0
  2. @inputs Controller:wirelink Info:wirelink Radio:wirelink User:entity
  3. @outputs StreamURL:string PLAY Volume SongTimeDecimal PlayedTime CurrentSongNumber
  4. @persist Player:entity RangeToPlayer:number PlayedTime:number CurrentSongNumber NextSongNumber LastSongNumber
  5. @trigger
  6.  
  7. #!!!PLAYER EDIT STARTS HERE!!!
  8.  
  9. #Playlist = array("Default"
  10. #)
  11.  
  12. #Format:
  13. #"Song Name", "Song Artist", "Song Time Minutes", "Song Time Seconds", "Song Link"
  14. #To get the link, find music on soundcloud, then use this converter to get the link in .mp3
  15. #https://www.appendipity.com/get-mp3-links-soundcloud/
  16.  
  17. SongInfo = array("Find Yourself", "John O Callaghan", "7", "26", "http://media.soundcloud.com/stream/59kSSbkraFIV.mp3",
  18. "Walk", "Foo Fighters", "4", "16", "http://media.soundcloud.com/stream/3sQXZtg2IkIh.mp3",
  19. "Take me to Church", "Jasmine", "4", "07", "http://media.soundcloud.com/stream/AGgjElPgqpOw.mp3",
  20. "Forgive me", "Group1Crew", "3", "46", "http://media.soundcloud.com/stream/CAdLM04pOECV.mp3",
  21. "My Friend", "Tristam", "4", "22", "http://media.soundcloud.com/stream/ILeojRVJSIzI.mp3",
  22. "Whole World Is Watching", "Within Temptation", "4", "13", "http://media.soundcloud.com/stream/oPkcnW03k3ij.mp3"
  23. )
  24.  
  25. #!!!PLAYER EDIT STOPS HERE!!!
  26.  
  27. if(first() | duped()) {
  28. hint("Music Player v1.0 - Made by Mentin", 15)
  29.  
  30. #Put in your own Steam ID
  31. if(!isSinglePlayer() & owner():steamID()!= "STEAM_0:1:28842512"){
  32. selfDestruct()
  33. }
  34.  
  35. #How far must you be from the Screen for it to activate
  36. RangeToPlayer = 200
  37. #The volume of the music player at start up
  38. Volume = 1.0
  39.  
  40. #DO NOT CHANGE WHAT'S UNDER!
  41. CurrentSongNumber = 1
  42. NextSongNumber = 2
  43. PLAY = 0
  44. }
  45.  
  46. #BASIC
  47. NumberOfSongs = SongInfo:count()/5
  48. #Last Song
  49. LastSongName = SongInfo[1+(LastSongNumber-1)*5,string]
  50. #Current Song
  51. SongName = SongInfo[1+(CurrentSongNumber-1)*5,string]
  52. SongArtist = SongInfo[2+(CurrentSongNumber-1)*5,string]
  53. SongTimeM = SongInfo[3+(CurrentSongNumber-1)*5,string]
  54. SongTimeS = SongInfo[4+(CurrentSongNumber-1)*5,string]
  55. SongLink = SongInfo[5+(CurrentSongNumber-1)*5,string]
  56. SongTime = SongTimeM + "." + SongTimeS
  57. SongTimeDecimal = SongTimeM:toNumber()*60 + SongTimeS:toNumber()
  58. #Next Song
  59. NextSongName1 = SongInfo[1+(NextSongNumber-1)*5,string]
  60. NextSongArtist = SongInfo[2+(NextSongNumber-1)*5,string]
  61. NextSongTimeM = SongInfo[3+(NextSongNumber-1)*5,string]
  62. NextSongTimeS = SongInfo[4+(NextSongNumber-1)*5,string]
  63. NextSongLink = SongInfo[5+(NextSongNumber-1)*5,string]
  64. NextSongTime = NextSongTimeM + "." + NextSongTimeS
  65.  
  66. #NEXT SONGS
  67. #Current
  68. TempX1 = CurrentSongNumber
  69. TempX2 = TempX1 + 1
  70. TempX3 = TempX2 + 1
  71. TempX4 = TempX3 + 1
  72. if(TempX1 == NumberOfSongs) {
  73. TempX1 = 0
  74. TempX2 = 1
  75. TempX3 = 2
  76. TempX4 = 3
  77. } elseif (TempX2 == NumberOfSongs) {
  78. TempX2 = 0
  79. TempX3 = 1
  80. TempX4 = 2
  81. } elseif (TempX3 == NumberOfSongs) {
  82. TempX3 = 0
  83. TempX4 = 1
  84. } elseif (TempX4 == NumberOfSongs) {
  85. TempX4 = 0
  86. }
  87. #Use Above Info To Get Names
  88. SongName1 = SongInfo[1+(TempX1)*5,string]
  89. SongName2 = SongInfo[1+(TempX2)*5,string]
  90. SongName3 = SongInfo[1+(TempX3)*5,string]
  91. SongName4 = SongInfo[1+(TempX4)*5,string]
  92. #Next
  93. TempY1 = NextSongNumber
  94. TempY2 = TempY1 + 1
  95. TempY3 = TempY2 + 1
  96. if(TempY1 == NumberOfSongs) {
  97. TempY1 = 0
  98. TempY2 = 1
  99. TempY3 = 2
  100. } elseif (TempY2 == NumberOfSongs) {
  101. TempY2 = 0
  102. TempY3 = 1
  103. } elseif (TempY3 == NumberOfSongs) {
  104. TempY3 = 0
  105. }
  106. #Use Above Info To Get Names
  107. NextSongName2 = SongInfo[1+(TempY1)*5,string]
  108. NextSongName3 = SongInfo[1+(TempY2)*5,string]
  109. NextSongName4 = SongInfo[1+(TempY3)*5,string]
  110.  
  111. if(first() | duped()) {
  112. #Clear Screens!
  113. Controller:egpClear()
  114. Info:egpClear()
  115.  
  116. function void screenController(){
  117. #CONTROLLER SCREEN
  118. #Background
  119. Controller:egpBox(1,vec2(256,256),vec2(512,512))
  120. Controller:egpColor(1,vec(108,201,248))
  121. Controller:egpMaterial(1, "gui/center_gradient")
  122. #Top Bar
  123. Controller:egpRoundedBox(2,vec2(256,60),vec2(480,90))
  124. Controller:egpColor(2,vec(255,255,255))
  125. Controller:egpMaterial(2, "gui/center_gradient")
  126. #Top Bar Outline
  127. Controller:egpRoundedBoxOutline(3,vec2(256,60),vec2(480,90))
  128. #Play Button
  129. Controller:egpBox(6,vec2(90,180),vec2(100,40))
  130. #Play Button Outline
  131. Controller:egpBoxOutline(7,vec2(90,180),vec2(100,40))
  132. Controller:egpColor(7,vec(0,0,0))
  133. #Play Button Text
  134. Controller:egpText(8,"Play",vec2(90,170))
  135. Controller:egpAlign(8,1)
  136. Controller:egpColor(8,vec(0,0,0))
  137. #Stop Button
  138. Controller:egpBox(10,vec2(90,135),vec2(100,40))
  139. #Stop Button Outline
  140. Controller:egpBoxOutline(11,vec2(90,135),vec2(100,40))
  141. Controller:egpColor(11,vec(0,0,0))
  142. #Stop Button Text
  143. Controller:egpText(12,"Stop",vec2(90,127))
  144. Controller:egpAlign(12,1)
  145. Controller:egpColor(12,vec(0,0,0))
  146. #Volume Up Button
  147. Controller:egpBox(13,vec2(170,180),vec2(35,40))
  148. #Volume Up Button Outline
  149. Controller:egpBoxOutline(14,vec2(170,180),vec2(35,40))
  150. Controller:egpColor(14,vec(0,0,0))
  151. #Volume Up Button Text
  152. Controller:egpText(15,"+",vec2(169,164))
  153. Controller:egpAlign(15,1)
  154. Controller:egpSize(15,30)
  155. Controller:egpColor(15,vec(0,0,0))
  156. #Volume Down Button
  157. Controller:egpBox(17,vec2(342,180),vec2(35,40))
  158. #Volume Down Button Outline
  159. Controller:egpBoxOutline(18,vec2(342,180),vec2(35,40))
  160. Controller:egpColor(18,vec(0,0,0))
  161. #Volume Down Button Text
  162. Controller:egpText(19,"-",vec2(343,164))
  163. Controller:egpAlign(19,1)
  164. Controller:egpSize(19,30)
  165. Controller:egpColor(19,vec(0,0,0))
  166. #Bottom Bar
  167. Controller:egpBox(22,vec2(256,355),vec2(480,280))
  168. Controller:egpColor(22,vec(255,255,255))
  169. Controller:egpMaterial(22, "vgui/gradient_down")
  170. #Bottom Bar Outline
  171. Controller:egpBoxOutline(23,vec2(256,355),vec2(480,280))
  172. Controller:egpColor(23,vec(0,0,0))
  173. #Previous Song Bar
  174. Controller:egpBoxOutline(24,vec2(46,355),vec2(60,280))
  175. Controller:egpColor(24,vec(0,0,0))
  176. #Previous Song Bar Text
  177. Controller:egpText(25,"<",vec2(46,333))
  178. Controller:egpAlign(25,1)
  179. Controller:egpColor(25,vec(0,0,0))
  180. Controller:egpSize(25,50)
  181. #Next Song Bar
  182. Controller:egpBoxOutline(26,vec2(466,355),vec2(60,280))
  183. Controller:egpColor(26,vec(0,0,0))
  184. #Next Song Bar Text
  185. Controller:egpText(27,">",vec2(466,333))
  186. Controller:egpAlign(27,1)
  187. Controller:egpColor(27,vec(0,0,0))
  188. Controller:egpSize(27,50)
  189. #Bottom Bar Title Text
  190. Controller:egpText(28,"Title",vec2(256,250))
  191. Controller:egpAlign(28,1)
  192. Controller:egpColor(28,vec(0,0,0))
  193. Controller:egpSize(28,35)
  194. #Bottom Bar Duration Text
  195. Controller:egpText(30,"Duration",vec2(256,380))
  196. Controller:egpAlign(30,1)
  197. Controller:egpColor(30,vec(0,0,0))
  198. Controller:egpSize(30,35)
  199. #Skip Song Button
  200. Controller:egpBox(34,vec2(422,180),vec2(100,40))
  201. Controller:egpAlign(34,1)
  202. #Skip Song Button Outline
  203. Controller:egpBoxOutline(35,vec2(422,180),vec2(100,40))
  204. Controller:egpColor(35,vec(0,0,0))
  205. Controller:egpAlign(35,1)
  206. #Skip Song Text
  207. Controller:egpText(36,"Skip -->",vec2(422,170))
  208. Controller:egpAlign(36,1)
  209. Controller:egpColor(36,vec(0,0,0))
  210. }
  211.  
  212. function void screenInfo() {
  213. #INFO SCREEN
  214. #Background
  215. Info:egpBox(1,vec2(256,256),vec2(512,512))
  216. Info:egpColor(1,vec(255,128,0))
  217. Info:egpMaterial(1, "gui/center_gradient")
  218. #Title Bar
  219. Info:egpBox(2,vec2(256,32),vec2(512,64))
  220. Info:egpColor(2,vec(0,204,0))
  221. Info:egpMaterial(2, "gui/center_gradient")
  222. #Title Bar Text
  223. Info:egpText(3,"Playlist",vec2(256,6))
  224. Info:egpAlign(3,1)
  225. Info:egpColor(3,vec(0,0,153))
  226. Info:egpSize(3,48)
  227. #Song Name Bars
  228. #1
  229. Info:egpBox(10,vec2(256,104),vec2(496,64))
  230. Info:egpColor(10,vec(255,255,255))
  231. Info:egpAlign(10,1)
  232. Info:egpMaterial(10, "gui/center_gradient")
  233. #2
  234. Info:egpBox(13,vec2(256,176),vec2(496,64))
  235. Info:egpColor(13,vec(102,255,255))
  236. Info:egpAlign(13,1)
  237. Info:egpMaterial(13, "gui/center_gradient")
  238. #3
  239. Info:egpBox(16,vec2(256,248),vec2(496,64))
  240. Info:egpColor(16,vec(255,255,255))
  241. Info:egpAlign(16,1)
  242. Info:egpMaterial(16, "gui/center_gradient")
  243. #4
  244. Info:egpBox(19,vec2(256,320),vec2(496,64))
  245. Info:egpColor(19,vec(255,255,255))
  246. Info:egpAlign(19,1)
  247. Info:egpMaterial(19, "gui/center_gradient")
  248. #5
  249. Info:egpBox(22,vec2(256,392),vec2(496,64))
  250. Info:egpColor(22,vec(255,255,255))
  251. Info:egpAlign(22,1)
  252. Info:egpMaterial(22, "gui/center_gradient")
  253. #6
  254. Info:egpBox(25,vec2(256,464),vec2(496,64))
  255. Info:egpColor(25,vec(255,255,255))
  256. Info:egpAlign(25,1)
  257. Info:egpMaterial(25, "gui/center_gradient")
  258. }
  259.  
  260. function void infoSongs() {
  261. #Last Song
  262. Info:egpText(11,LastSongName,vec2(256,88))
  263. Info:egpText(14,SongName,vec2(256,160))
  264. if(PLAY == 0) {
  265. #Current Song
  266. Info:egpRemove(15)
  267. #Next Song
  268. Info:egpText(17,SongName1,vec2(256,232))
  269. #Next x2 Song
  270. Info:egpText(20,SongName2,vec2(256,304))
  271. #Next x3 Song
  272. Info:egpText(23,SongName3,vec2(256,376))
  273. #Next x4 Song
  274. Info:egpText(26,SongName4,vec2(256,448))
  275. } else {
  276. #Current Song
  277. Info:egpBoxOutline(15,vec2(256,176),vec2(496,64))
  278. Info:egpColor(15,vec(255,0,0))
  279. #Next Song
  280. Info:egpText(17,NextSongName1,vec2(256,232))
  281. #Next x2 Song
  282. Info:egpText(20,NextSongName2,vec2(256,304))
  283. #Next x3 Song
  284. Info:egpText(23,NextSongName3,vec2(256,376))
  285. #Next x4 Song
  286. Info:egpText(26,NextSongName4,vec2(256,448))
  287. }
  288. }
  289.  
  290. function void volumeController() {
  291. #Volume Info Amount
  292. Controller:egpText(21,Volume * 100 + "%",vec2(256,164))
  293. Controller:egpAlign(21,1)
  294. Controller:egpColor(21,vec(0,0,0))
  295. Controller:egpSize(21,30)
  296. }
  297.  
  298. function void songTimer() {
  299. #Song Timer Text
  300. Controller:egpText(32,PlayedTime + " / " + SongTimeDecimal,vec2(256,120))
  301. Controller:egpAlign(32,1)
  302. Controller:egpColor(32,vec(0,0,0))
  303. Controller:egpSize(32,30)
  304. }
  305.  
  306. function void topBarTitle() {
  307. #Top Bar Title
  308. Controller:egpText(4,SongName,vec2(256,55))
  309. Controller:egpAlign(4,1)
  310. Controller:egpColor(4,vec(0,0,0))
  311. }
  312.  
  313. function void bottomBar() {
  314. #Bottom Bar Song Title
  315. Controller:egpText(29,SongName,vec2(256,300))
  316. #Bottom Bar Song Artist
  317. Controller:egpText(33,SongArtist,vec2(256,330))
  318. #Bottom Bar Song Duration
  319. Controller:egpText(31,SongTime,vec2(256,430))
  320. }
  321.  
  322. function void bottomBarNext() {
  323. #Bottom Bar Song Title
  324. Controller:egpText(29,NextSongName1,vec2(256,300))
  325. #Bottom Bar Song Artist
  326. Controller:egpText(33,NextSongArtist,vec2(256,330))
  327. #Bottom Bar Song Duration
  328. Controller:egpText(31,NextSongTime,vec2(256,430))
  329. }
  330.  
  331. function void startSong() {
  332. PLAY = 1
  333. PlayedTime = 0
  334. StreamURL = SongLink
  335. timer("songtime",1000)
  336.  
  337. if(CurrentSongNumber == NumberOfSongs) {
  338. NextSongNumber = 1
  339. } else {
  340. NextSongNumber = CurrentSongNumber + 1
  341. }
  342.  
  343. #CONTROLLER EGP
  344. #Top Bar Title
  345. topBarTitle()
  346. #Color Stop & Start Button
  347. Controller:egpColor(6,vec(0,255,0))
  348. Controller:egpColor(10,vec(255,255,255))
  349. #Skip Button
  350. Controller:egpColor(34,vec(200,200,255))
  351. }
  352.  
  353. function void stopSong() {
  354. PLAY = 0
  355. PlayedTime = 0
  356. StreamURL = ""
  357. LastSongNumber = CurrentSongNumber
  358. CurrentSongNumber = NextSongNumber
  359. stoptimer("songtime")
  360.  
  361. #CONTROLLER EGP
  362. #Color Stop & Start Button
  363. Controller:egpColor(6,vec(255,255,255))
  364. Controller:egpColor(10,vec(255,0,0))
  365. #Top Bar Title
  366. Controller:egpRemove(4)
  367. #Skip Button
  368. Controller:egpColor(34,vec(255,255,255))
  369. songTimer()
  370. }
  371.  
  372. #Draw Info
  373. screenController()
  374. screenInfo()
  375. infoSongs()
  376. volumeController()
  377. bottomBar()
  378. songTimer()
  379.  
  380. #CONTROLLER EGP
  381. #Color Stop & Start Button
  382. Controller:egpColor(10,vec(255,0,0))
  383. #Bottom Bar Song Title
  384. Controller:egpAlign(29,1)
  385. Controller:egpColor(29,vec(0,0,255))
  386. Controller:egpSize(29,25)
  387. #Bottom Bar Song Duration
  388. Controller:egpAlign(31,1)
  389. Controller:egpColor(31,vec(255,0,0))
  390. Controller:egpSize(31,20)
  391. #Bottom Bar Song Artist
  392. Controller:egpAlign(33,1)
  393. Controller:egpColor(33,vec(0,255,0))
  394. Controller:egpSize(33,22)
  395. #INFO EGP
  396. #1 Last Song
  397. Info:egpAlign(11,1)
  398. Info:egpColor(11,vec(0,0,0))
  399. Info:egpSize(11,32)
  400. #2 Current Song
  401. Info:egpAlign(14,1)
  402. Info:egpColor(14,vec(100,0,0))
  403. Info:egpSize(14,32)
  404. #Remove Outline
  405. Info:egpRemove(15)
  406. #3 Next Song
  407. Info:egpAlign(17,1)
  408. Info:egpColor(17,vec(0,0,0))
  409. Info:egpSize(17,32)
  410. #4 Next x2 Song
  411. Info:egpAlign(20,1)
  412. Info:egpColor(20,vec(0,0,0))
  413. Info:egpSize(20,32)
  414. #5 Next x3 Song
  415. Info:egpAlign(23,1)
  416. Info:egpColor(23,vec(0,0,0))
  417. Info:egpSize(23,32)
  418. #6 Next x4 Song
  419. Info:egpAlign(26,1)
  420. Info:egpColor(26,vec(0,0,0))
  421. Info:egpSize(26,32)
  422. #CURSOR
  423. Controller:egpCircleOutline(4,vec2(0,0),vec2(5,5))
  424. Controller:egpColor(4,vec(255,0,0))
  425. Controller:egpParentToCursor(4)
  426. }
  427.  
  428. #Interval between actions, in miliseconds
  429. interval(1000)
  430.  
  431. #If it can find a player within the "RangeToPlayer"...
  432. if(findCanQuery()) {
  433. findIncludeClass("player")
  434. findInSphere(Controller:entity():pos(),RangeToPlayer)
  435. #Remove :owner() to allow all players access the Controller EGP
  436. Player = findClosest(Controller:entity():pos()):owner()
  437.  
  438. Cursor = round(Controller:egpCursor(Player))
  439.  
  440. if(~User & User) {
  441. #Start Song
  442. if(inrange(Cursor,Controller:egpPos(6) - Controller:egpSize(6)/2,Controller:egpPos(6) + Controller:egpSize(6)/2) & PLAY == 0) {
  443. startSong()
  444. #INFO EGP
  445. #Song List
  446. infoSongs()
  447. }
  448.  
  449. #Stop Song
  450. if(inrange(Cursor,Controller:egpPos(10) - Controller:egpSize(10)/2,Controller:egpPos(10) + Controller:egpSize(10)/2) & PLAY == 1) {
  451. stopSong()
  452. #INFO EGP
  453. #Song List
  454. infoSongs()
  455. }
  456.  
  457. #Skip Song
  458. if(inrange(Cursor,Controller:egpPos(34) - Controller:egpSize(34)/2,Controller:egpPos(34) + Controller:egpSize(34)/2) & PLAY == 1) {
  459. }
  460.  
  461. #Volume Up
  462. if(inrange(Cursor,Controller:egpPos(13) - Controller:egpSize(13)/2,Controller:egpPos(13) + Controller:egpSize(13)/2) & Volume <= 0.9) {
  463. Volume += 0.1
  464. volumeController()
  465. }
  466.  
  467. #Volume Down
  468. if(inrange(Cursor,Controller:egpPos(17) - Controller:egpSize(17)/2,Controller:egpPos(17) + Controller:egpSize(17)/2) & Volume >= 0.2) {
  469. Volume -= 0.1
  470. volumeController()
  471. }
  472.  
  473. if(PLAY == 0) {
  474. #Previous Song
  475. if(inrange(Cursor,Controller:egpPos(24) - Controller:egpSize(24)/2,Controller:egpPos(24) + Controller:egpSize(24)/2)) {
  476. if(CurrentSongNumber == 1) {
  477. CurrentSongNumber = NumberOfSongs
  478. } else {
  479. CurrentSongNumber -= 1
  480. }
  481. }
  482. #Next Song
  483. if(inrange(Cursor,Controller:egpPos(26) - Controller:egpSize(26)/2,Controller:egpPos(26) + Controller:egpSize(26)/2)) {
  484. if(CurrentSongNumber == NumberOfSongs) {
  485. CurrentSongNumber = 1
  486. } else {
  487. CurrentSongNumber +=1
  488. }
  489. }
  490. } elseif(PLAY == 1) {
  491. #Previous Song
  492. if(inrange(Cursor,Controller:egpPos(24) - Controller:egpSize(24)/2,Controller:egpPos(24) + Controller:egpSize(24)/2)) {
  493. if(NextSongNumber == 1) {
  494. NextSongNumber = NumberOfSongs
  495. } else {
  496. NextSongNumber -= 1
  497. }
  498. }
  499. #Next Song
  500. if(inrange(Cursor,Controller:egpPos(26) - Controller:egpSize(26)/2,Controller:egpPos(26) + Controller:egpSize(26)/2)) {
  501. if(NextSongNumber == NumberOfSongs) {
  502. NextSongNumber = 1
  503. } else {
  504. NextSongNumber += 1
  505. }
  506. }
  507. }
  508. }
  509. }
  510.  
  511. interval(5000)
  512. if(PLAY != 1){
  513. bottomBar()
  514. infoSongs()
  515. topBarTitle()
  516.  
  517. } else {
  518. bottomBarNext()
  519. infoSongs()
  520. topBarTitle()
  521. }
  522.  
  523. interval(1000)
  524. if(clk("songtime")) {
  525. if(PLAY == 1) {
  526. PlayedTime += 1
  527. #Update Timer Text on Controller EGP
  528. songTimer()
  529.  
  530. if(PlayedTime >= SongTimeDecimal) {
  531. PlayedTime = 0
  532. PLAY = 1
  533. StreamURL = NextSongLink
  534.  
  535. LastSongNumber = CurrentSongNumber
  536. CurrentSongNumber = NextSongNumber
  537.  
  538. if(CurrentSongNumber == NumberOfSongs) {
  539. NextSongNumber = 1
  540. } else {
  541. NextSongNumber +=1
  542. }
  543. }
  544.  
  545. timer("songtime",1000)
  546.  
  547. infoSongs()
  548. }
  549. }
Add Comment
Please, Sign In to add comment