This commit is contained in:
		
							
								
								
									
										7
									
								
								.woodpecker.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								.woodpecker.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | pipeline: | ||||||
|  |   deploy: | ||||||
|  |     image: alpine:3.13 | ||||||
|  |     volumes: | ||||||
|  |       - /var/web/live/:/deploy | ||||||
|  |     commands: | ||||||
|  |       - cp index.html /deploy | ||||||
							
								
								
									
										208
									
								
								index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										208
									
								
								index.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,208 @@ | |||||||
|  | <!DOCTYPE html> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |   <meta http-equiv="X-UA-Compatible" content="IE=edge"> | ||||||
|  |   <title>live.hackerbots.net</title> | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||||
|  |  | ||||||
|  |   <!-- <script type="text/javascript" src="../dist/butterchurn.js"></script> --> | ||||||
|  |   <script type="text/javascript" src="https://unpkg.com/lodash"></script> | ||||||
|  |   <script type="text/javascript" src="https://unpkg.com/butterchurn"></script> | ||||||
|  |   <script type="text/javascript" src="https://unpkg.com/butterchurn-presets"></script> | ||||||
|  |   <script type="text/javascript" src="https://unpkg.com/butterchurn-presets/lib/butterchurnPresetsExtra.min.js"></script> | ||||||
|  | <link rel="preconnect" href="https://fonts.googleapis.com"> | ||||||
|  | <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> | ||||||
|  | <link href="https://fonts.googleapis.com/css2?family=Bungee+Spice&display=swap" rel="stylesheet"> | ||||||
|  |   <script | ||||||
|  |     src="https://code.jquery.com/jquery-3.1.1.min.js" | ||||||
|  |     integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" | ||||||
|  |     crossorigin="anonymous"></script> | ||||||
|  |   <link rel="stylesheet" href="https://unpkg.com/normalize.css/normalize.css" /> | ||||||
|  |  | ||||||
|  |   <script> | ||||||
|  |     $(function() { | ||||||
|  |       var visualizer = null; | ||||||
|  |       var rendering = false; | ||||||
|  |       var sourceNode = null; | ||||||
|  |       var delayedAudible = null; | ||||||
|  |       var cycleInterval = null; | ||||||
|  |       var presets = {}; | ||||||
|  |       var presetKeys = []; | ||||||
|  |       var presetIndexHist = []; | ||||||
|  |       var presetIndex = 0; | ||||||
|  |       var presetCycle = true; | ||||||
|  |       var presetCycleLength = 15000; | ||||||
|  |       var presetRandom = true; | ||||||
|  |  | ||||||
|  | 	    function startRenderer() { | ||||||
|  | 		    if (!document.hidden && visualizer) { | ||||||
|  | 			    var fps = 60; | ||||||
|  | 			    setTimeout(() => { | ||||||
|  | 				requestAnimationFrame(startRenderer); | ||||||
|  | 			    }, 1000 / fps); | ||||||
|  | 			visualizer.render(); | ||||||
|  | 		    } | ||||||
|  | 	    } | ||||||
|  |  | ||||||
|  | 	function visToggle() { | ||||||
|  | 		if (!document.hidden) { | ||||||
|  | 			startRenderer(); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	    document.addEventListener('visibilitychange', visToggle); | ||||||
|  |  | ||||||
|  |       function initPlayer() { | ||||||
|  |         var audioContext = new AudioContext(); | ||||||
|  | 	var mediaElement = document.getElementById('audio-player'); | ||||||
|  | 	var mediaSrc = audioContext.createMediaElementSource(mediaElement); | ||||||
|  |  | ||||||
|  |         //var canvas = document.getElementById('canvas'); | ||||||
|  | 	      var canvas = document.createElement('canvas'); | ||||||
|  | 	      document.body.appendChild(canvas); | ||||||
|  | 	      canvas.width = window.innerWidth; | ||||||
|  | 	      canvas.height = window.innerHeight; | ||||||
|  |         visualizer = butterchurn.default.createVisualizer(audioContext, canvas , { | ||||||
|  |           width: canvas.width, | ||||||
|  |           height: canvas.height, | ||||||
|  |           pixelRatio: window.devicePixelRatio || 1, | ||||||
|  |           textureRatio: 1, | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  | 	mediaSrc.connect(audioContext.destination); | ||||||
|  | 	visualizer.connectAudio(mediaSrc); | ||||||
|  |  | ||||||
|  |         var presets = {}; | ||||||
|  |         if (window.butterchurnPresets) { | ||||||
|  |           Object.assign(presets, butterchurnPresets.getPresets()); | ||||||
|  |         } | ||||||
|  |         if (window.butterchurnPresetsExtra) { | ||||||
|  |           Object.assign(presets, butterchurnPresetsExtra.getPresets()); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  | 	visualizer.loadPreset(_.sample(presets)); | ||||||
|  |  | ||||||
|  |         cycleInterval = setInterval(() => { | ||||||
|  | 		visualizer.loadPreset(_.sample(presets), 5.7); | ||||||
|  | 	}, presetCycleLength); | ||||||
|  |  | ||||||
|  | 	$(canvas).click(() => { | ||||||
|  | 		visualizer.loadPreset(_.sample(presets), 1.0); | ||||||
|  | 	}); | ||||||
|  |       } | ||||||
|  |  | ||||||
|  | function updateMeta() { | ||||||
|  | 	$.getJSON('/status.json', (data) => { | ||||||
|  | 		var meta = data.icestats.source; | ||||||
|  | 		var title = meta.title; | ||||||
|  | 		var listeners = meta.listeners; | ||||||
|  | 		console.log(data.icestats.source); | ||||||
|  | 		$('#title').text(title); | ||||||
|  | 		$('#listeners').text(listeners + " listeners"); | ||||||
|  | 	}); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | 	updateMeta(); | ||||||
|  | 	setInterval(updateMeta, 3000); | ||||||
|  |  | ||||||
|  | 	    var isSetup = false; | ||||||
|  |  | ||||||
|  | 	$('#the-button').click(() => { | ||||||
|  | 		if (!isSetup) { | ||||||
|  | 	      initPlayer(); | ||||||
|  | 			isSetup = true; | ||||||
|  | 			$('#the-button').remove(); | ||||||
|  | 	      startRenderer(); | ||||||
|  | 		} | ||||||
|  | 	}); | ||||||
|  |     }); | ||||||
|  |   </script> | ||||||
|  | <style type="text/css"> | ||||||
|  | html, body, #canvas { | ||||||
|  | 	width: 100%; | ||||||
|  | 	height: 100%; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | body { | ||||||
|  | 	display: flex; | ||||||
|  | 	justify-content: center; | ||||||
|  | 	align-items: center; | ||||||
|  | 	animation: rainbow-bg 10s linear; | ||||||
|  | 	animation-iteration-count: infinite; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #the-button { | ||||||
|  | 	animation: throb 2.5s ease-in-out infinite alternate; | ||||||
|  | 	font-family: 'Bungee Spice', cursive; | ||||||
|  | 	font-size: 6em; | ||||||
|  | 	text-align: center; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #metadata { | ||||||
|  | 	position: absolute; | ||||||
|  | 	bottom: 0%; | ||||||
|  | 	background-color: rgba(0, 0, 0, 0.8); | ||||||
|  | 	z-index: 1000; | ||||||
|  | 	color: #fff; | ||||||
|  | 	font-family: 'Bungee Spice', sans-serif; | ||||||
|  | 	text-align: center; | ||||||
|  | 	padding: 3rem; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #title { | ||||||
|  | 	font-size: 2rem; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @keyframes rainbow-bg{ | ||||||
|  | 		100%,0%{ | ||||||
|  | 			background-color: rgb(255,0,0); | ||||||
|  | 		} | ||||||
|  | 		8%{ | ||||||
|  | 			background-color: rgb(255,127,0); | ||||||
|  | 		} | ||||||
|  | 		16%{ | ||||||
|  | 			background-color: rgb(255,255,0); | ||||||
|  | 		} | ||||||
|  | 		25%{ | ||||||
|  | 			background-color: rgb(127,255,0); | ||||||
|  | 		} | ||||||
|  | 		33%{ | ||||||
|  | 			background-color: rgb(0,255,0); | ||||||
|  | 		} | ||||||
|  | 		41%{ | ||||||
|  | 			background-color: rgb(0,255,127); | ||||||
|  | 		} | ||||||
|  | 		50%{ | ||||||
|  | 			background-color: rgb(0,255,255); | ||||||
|  | 		} | ||||||
|  | 		58%{ | ||||||
|  | 			background-color: rgb(0,127,255); | ||||||
|  | 		} | ||||||
|  | 		66%{ | ||||||
|  | 			background-color: rgb(0,0,255); | ||||||
|  | 		} | ||||||
|  | 		75%{ | ||||||
|  | 			background-color: rgb(127,0,255); | ||||||
|  | 		} | ||||||
|  | 		83%{ | ||||||
|  | 			background-color: rgb(255,0,255); | ||||||
|  | 		} | ||||||
|  | 		91%{ | ||||||
|  | 			background-color: rgb(255,0,127); | ||||||
|  | 		} | ||||||
|  | } | ||||||
|  | @keyframes throb{ | ||||||
|  | 		from{ | ||||||
|  | 			transform: scale(1.0); | ||||||
|  | 		} | ||||||
|  | 		to { | ||||||
|  | 			transform: scale(0.75); | ||||||
|  | 		} | ||||||
|  | } | ||||||
|  | </style> | ||||||
|  | </head> | ||||||
|  | <body> | ||||||
|  | 	<audio id='audio-player' autoplay src="https://live.hackerbots.net/listen.mp3">No audio</audio> | ||||||
|  | 	<div id="the-button">HIT IT, JACK ▶</div> | ||||||
|  | 	<div id="metadata"><span id="title"></span><p><span id="listeners"></span></div> | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
		Reference in New Issue
	
	Block a user