<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Main</title>
<script src="Tone.js"></script>
<script src="main.js"></script>
<link href="https://fonts.googleapis.com/css2?family=Major+Mono+Display&display=swap" rel="stylesheet">
<style>
@font-face {
font-family: 'Fixedsys Excelsior';
src: url('fsex300.woff');
}
body {
background-color: #000;
}
.cell {
font-family: 'Fixedsys Excelsior', monospace;
font-size: 32px;
width: 24px;
height: 32px;
display: flex;
justify-content: center;
align-items: center;
background-color: transparent;
transition: 0.05s all;
transition-timing-function: ease-out;
color: #ccc;
}
.row {
display: flex;
flex-direction: row;
}
.selected {
color: #000;
background-color: #666;
}
.head {
color: #ACECA1;
}
.triggered {
box-shadow: 0 0 2rem 0.2rem #629460;
background-color: #243119;
}
.dim {
opacity: 0.2;
}
button {
font-family: 'Fixedsys Excelsior', monospace;
font-size: 32px;
background-color: #000;
border: 2px solid #fff;
margin: 1rem;
}
.row {
display: flex;
justify-content: center;
}
.title {
font-family: 'Fixedsys Excelsior', monospace;
font-size: 32px;
justify-content: space-between;
color: #ade25d;
}
.playground {
margin: 0 auto;
}
.state {
font-family: 'Fixedsys Excelsior', monospace;
font-size: 24px;
color: #fff;
}
.stack-element {
margin-right: 0.5rem;
}
.movement {
color: #ade25d;
}
</style>
</head>
<body>
<div id="app"></div>
<script>
let synth = new Tone.PolySynth(4, Tone.Synth, {
oscillator: {
type: 'sine'
},
envelope: {
attack: 0,
decay: 0.1,
sustain: 0.3,
release: 0.5
}
}).toMaster();
let sampler = new Tone.Sampler({
'C3': 'bd.wav',
'C#3': 'sd.wav',
'D3': 'hh.wav'
}, () => {
let app = Elm.Mucegai.init({
node: document.getElementById('app')
});
app.ports.triggerSample.subscribe(message => {
console.log(`triggering sample ${message}`);
sampler.triggerAttackRelease(Tone.Midi(48 + message));
});
app.ports.triggerNote.subscribe(message => {
console.log(`triggering note ${message}`);
synth.triggerAttackRelease(Tone.Midi(message), "8n");
});
}).toMaster();
</script>
</body>
</html>