initial commit
This commit is contained in:
commit
2c7a9da158
6
.woodpecker.yml
Normal file
6
.woodpecker.yml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
pipeline:
|
||||||
|
deploy:
|
||||||
|
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>
|
Loading…
Reference in New Issue
Block a user