feat: 9 diverse brawl variants — knockdowns, wall bounces, suplexes, haymakers, dizzy staggers

Add knockdown, wall-bounce, dizzy-stagger, suplex, ping-pong, ground-pound,
haymaker, body-check brawl variants with dizzy stars, angle physics, and
screen-edge impacts. Fix missing synthStyle on music tracks 10.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Dorian
2026-03-08 17:10:59 +00:00
co-authored by Claude Opus 4.6
parent ba1deab0f6
commit 63960b5faf
2 changed files with 1079 additions and 393 deletions
+588 -294
View File
@@ -1971,12 +1971,282 @@ function hihat(dest: AudioNode, t: number, open: boolean = false) {
src.start(t); src.stop(t + dur)
}
// === TRACK DATA ===
// Each track has: bass, lead, arp patterns (128 steps = 8 bars x 16 steps), chords (8 bars), drums (128 steps), bpm
// === GENRE-SPECIFIC SYNTH VARIANTS ===
// Pulse bass — sharp square wave, chiptune/heroic/bouncy
function pulseBass(freq: number, dur: number, dest: AudioNode, t: number) {
const c = getCtx()
const osc = c.createOscillator()
osc.type = 'square'
osc.frequency.value = freq
const g = c.createGain()
g.gain.setValueAtTime(0.18, t)
g.gain.exponentialRampToValueAtTime(0.001, t + dur)
osc.connect(g); g.connect(dest)
osc.start(t); osc.stop(t + dur)
}
// Slap bass — short punchy sine with fast decay, funky/speed
function slapBass(freq: number, dur: number, dest: AudioNode, t: number) {
const c = getCtx()
const osc = c.createOscillator()
osc.type = 'sine'
osc.frequency.setValueAtTime(freq * 1.5, t)
osc.frequency.exponentialRampToValueAtTime(freq, t + 0.02)
const g = c.createGain()
g.gain.setValueAtTime(0.3, t)
g.gain.exponentialRampToValueAtTime(0.001, t + Math.min(dur, 0.12))
osc.connect(g); g.connect(dest)
osc.start(t); osc.stop(t + dur)
}
// Sub bass — deep pure sine, atmospheric/emotional
function subBass(freq: number, dur: number, dest: AudioNode, t: number) {
const c = getCtx()
const osc = c.createOscillator()
osc.type = 'sine'
osc.frequency.value = freq
const g = c.createGain()
g.gain.setValueAtTime(0.25, t)
g.gain.setValueAtTime(0.25, t + dur * 0.8)
g.gain.exponentialRampToValueAtTime(0.001, t + dur)
osc.connect(g); g.connect(dest)
osc.start(t); osc.stop(t + dur)
}
// Distorted bass — sawtooth through waveshaper, metal/boss
function distortedBass(freq: number, dur: number, dest: AudioNode, t: number) {
const c = getCtx()
const osc = c.createOscillator()
osc.type = 'sawtooth'
osc.frequency.value = freq
const dist = c.createWaveShaper()
const curve = new Float32Array(256)
for (let i = 0; i < 256; i++) { const x = (i / 128) - 1; curve[i] = Math.tanh(x * 3) }
dist.curve = curve
const g = c.createGain()
g.gain.setValueAtTime(0.22, t)
g.gain.exponentialRampToValueAtTime(0.001, t + dur)
osc.connect(dist); dist.connect(g); g.connect(dest)
osc.start(t); osc.stop(t + dur)
const sub = c.createOscillator()
sub.type = 'sine'
sub.frequency.value = freq * 0.5
const sg = c.createGain()
sg.gain.setValueAtTime(0.12, t)
sg.gain.exponentialRampToValueAtTime(0.001, t + dur * 0.7)
sub.connect(sg); sg.connect(dest)
sub.start(t); sub.stop(t + dur)
}
// Organ bass — square + sine harmonics, gothic
function organBass(freq: number, dur: number, dest: AudioNode, t: number) {
const c = getCtx()
for (const [waveType, vol, mult] of [['square', 0.1, 1], ['sine', 0.12, 2], ['sine', 0.06, 3]] as [OscillatorType, number, number][]) {
const osc = c.createOscillator()
osc.type = waveType
osc.frequency.value = freq * mult
const g = c.createGain()
g.gain.setValueAtTime(vol, t)
g.gain.setValueAtTime(vol, t + dur * 0.85)
g.gain.exponentialRampToValueAtTime(0.001, t + dur)
osc.connect(g); g.connect(dest)
osc.start(t); osc.stop(t + dur)
}
}
// Sharp lead — detuned square waves, chiptune/ninja
function sharpLead(freq: number, dur: number, dest: AudioNode, t: number) {
const c = getCtx()
const osc = c.createOscillator()
osc.type = 'square'
osc.frequency.value = freq
const osc2 = c.createOscillator()
osc2.type = 'square'
osc2.frequency.value = freq
osc2.detune.value = 6
const g = c.createGain()
g.gain.setValueAtTime(0.1, t)
g.gain.exponentialRampToValueAtTime(0.001, t + dur)
osc.connect(g); osc2.connect(g); g.connect(dest)
if (delayNode) g.connect(delayNode)
osc.start(t); osc.stop(t + dur)
osc2.start(t); osc2.stop(t + dur)
}
// Smooth lead — gentle sine FM with vibrato, emotional/JRPG
function smoothLead(freq: number, dur: number, dest: AudioNode, t: number) {
const c = getCtx()
const car = c.createOscillator()
car.type = 'triangle'
car.frequency.value = freq
const mod = c.createOscillator()
mod.type = 'sine'
mod.frequency.value = freq * 1.5
const modG = c.createGain()
modG.gain.value = 40
mod.connect(modG); modG.connect(car.frequency)
const vib = c.createOscillator()
vib.type = 'sine'
vib.frequency.value = 5
const vibG = c.createGain()
vibG.gain.value = 4
vib.connect(vibG); vibG.connect(car.frequency)
const g = c.createGain()
g.gain.setValueAtTime(0.001, t)
g.gain.linearRampToValueAtTime(0.14, t + dur * 0.15)
g.gain.setValueAtTime(0.14, t + dur * 0.7)
g.gain.exponentialRampToValueAtTime(0.001, t + dur)
car.connect(g); g.connect(dest)
if (delayNode) g.connect(delayNode)
car.start(t); car.stop(t + dur)
mod.start(t); mod.stop(t + dur)
vib.start(t); vib.stop(t + dur)
}
// Aggressive lead — heavy FM sawtooth, metal/boss
function aggressiveLead(freq: number, dur: number, dest: AudioNode, t: number) {
const c = getCtx()
const car = c.createOscillator()
car.type = 'sawtooth'
car.frequency.value = freq
const mod = c.createOscillator()
mod.type = 'square'
mod.frequency.value = freq * 3
const modG = c.createGain()
modG.gain.value = 300
mod.connect(modG); modG.connect(car.frequency)
const car2 = c.createOscillator()
car2.type = 'sawtooth'
car2.frequency.value = freq
car2.detune.value = -15
const g = c.createGain()
g.gain.setValueAtTime(0.13, t)
g.gain.exponentialRampToValueAtTime(0.001, t + dur)
car.connect(g); car2.connect(g); g.connect(dest)
if (delayNode) g.connect(delayNode)
car.start(t); car.stop(t + dur)
car2.start(t); car2.stop(t + dur)
mod.start(t); mod.stop(t + dur)
}
// Wah lead — filtered sawtooth with bandpass sweep, funky/speed
function wahLead(freq: number, dur: number, dest: AudioNode, t: number) {
const c = getCtx()
const osc = c.createOscillator()
osc.type = 'sawtooth'
osc.frequency.value = freq
const filter = c.createBiquadFilter()
filter.type = 'bandpass'
filter.Q.value = 5
filter.frequency.setValueAtTime(freq * 2, t)
filter.frequency.exponentialRampToValueAtTime(freq * 8, t + dur * 0.3)
filter.frequency.exponentialRampToValueAtTime(freq * 2, t + dur)
const g = c.createGain()
g.gain.setValueAtTime(0.2, t)
g.gain.exponentialRampToValueAtTime(0.001, t + dur)
osc.connect(filter); filter.connect(g); g.connect(dest)
if (delayNode) g.connect(delayNode)
osc.start(t); osc.stop(t + dur)
}
// Gothic lead — vibrato sawtooth + triangle overtone, Castlevania
function gothicLead(freq: number, dur: number, dest: AudioNode, t: number) {
const c = getCtx()
const osc = c.createOscillator()
osc.type = 'sawtooth'
osc.frequency.value = freq
const vib = c.createOscillator()
vib.type = 'sine'
vib.frequency.value = 6.5
const vibG = c.createGain()
vibG.gain.value = 8
vib.connect(vibG); vibG.connect(osc.frequency)
const osc2 = c.createOscillator()
osc2.type = 'triangle'
osc2.frequency.value = freq * 2
const g = c.createGain()
g.gain.setValueAtTime(0.12, t)
g.gain.setValueAtTime(0.12, t + dur * 0.75)
g.gain.exponentialRampToValueAtTime(0.001, t + dur)
osc.connect(g); g.connect(dest)
const g2 = c.createGain()
g2.gain.setValueAtTime(0.04, t)
g2.gain.exponentialRampToValueAtTime(0.001, t + dur)
osc2.connect(g2); g2.connect(dest)
if (delayNode) g.connect(delayNode)
osc.start(t); osc.stop(t + dur)
osc2.start(t); osc2.stop(t + dur)
vib.start(t); vib.stop(t + dur)
}
// Dark pad — filtered sawtooth, gothic/atmospheric/boss
function darkPad(freqs: number[], dur: number, dest: AudioNode, t: number) {
const c = getCtx()
for (const freq of freqs) {
const osc = c.createOscillator()
osc.type = 'sawtooth'
osc.frequency.value = freq
const filter = c.createBiquadFilter()
filter.type = 'lowpass'
filter.frequency.value = freq * 3
filter.Q.value = 1
const g = c.createGain()
g.gain.setValueAtTime(0.03, t)
g.gain.setValueAtTime(0.03, t + dur * 0.8)
g.gain.exponentialRampToValueAtTime(0.001, t + dur)
osc.connect(filter); filter.connect(g); g.connect(dest)
osc.start(t); osc.stop(t + dur)
}
}
// Bright pad — square wave, heroic/bouncy
function brightPad(freqs: number[], dur: number, dest: AudioNode, t: number) {
const c = getCtx()
for (const freq of freqs) {
const osc = c.createOscillator()
osc.type = 'square'
osc.frequency.value = freq
const g = c.createGain()
g.gain.setValueAtTime(0.025, t)
g.gain.setValueAtTime(0.025, t + dur * 0.8)
g.gain.exponentialRampToValueAtTime(0.001, t + dur)
osc.connect(g); g.connect(dest)
osc.start(t); osc.stop(t + dur)
}
}
// Style dispatch tables
type SynthStyle = 'epic' | 'gothic' | 'funky' | 'heroic' | 'metal' | 'emotional' | 'ninja' | 'speed' | 'atmospheric' | 'military' | 'bouncy' | 'boss'
type BassFunc = (freq: number, dur: number, dest: AudioNode, t: number) => void
type PadFunc = (freqs: number[], dur: number, dest: AudioNode, t: number) => void
const STYLE_BASS: Record<SynthStyle, BassFunc> = {
epic: thickBass, gothic: organBass, funky: slapBass, heroic: pulseBass,
metal: distortedBass, emotional: subBass, ninja: pulseBass, speed: slapBass,
atmospheric: subBass, military: thickBass, bouncy: pulseBass, boss: distortedBass,
}
const STYLE_LEAD: Record<SynthStyle, BassFunc> = {
epic: fmLead, gothic: gothicLead, funky: wahLead, heroic: sharpLead,
metal: aggressiveLead, emotional: smoothLead, ninja: sharpLead, speed: wahLead,
atmospheric: smoothLead, military: fmLead, bouncy: sharpLead, boss: aggressiveLead,
}
const STYLE_ARP_TYPE: Record<SynthStyle, OscillatorType> = {
epic: 'triangle', gothic: 'sawtooth', funky: 'square', heroic: 'square',
metal: 'sawtooth', emotional: 'triangle', ninja: 'square', speed: 'triangle',
atmospheric: 'sine', military: 'triangle', bouncy: 'square', boss: 'sawtooth',
}
const STYLE_PAD: Record<SynthStyle, PadFunc> = {
epic: chordPad, gothic: darkPad, funky: chordPad, heroic: brightPad,
metal: darkPad, emotional: chordPad, ninja: darkPad, speed: brightPad,
atmospheric: darkPad, military: chordPad, bouncy: brightPad, boss: darkPad,
}
// === TRACK DATA ===
interface MusicTrack {
name: string
bpm: number
synthStyle: SynthStyle
bass: number[]
lead: number[]
arp: number[]
@@ -1984,399 +2254,423 @@ interface MusicTrack {
drums: number[]
}
// === COMPOSED TRACKS — Turrican-style emotionally charged fighting music ===
// Hand-composed melodies with sweeping arcs, driving bass, shimmering arps
// Track 1: "Genesis Block" — Am, 155 BPM — Epic sweeping main theme
// Track 1: "Desert Storm" — 200 BPM, A minor, Turrican-style epic sweep
const track1: MusicTrack = {
name: 'Genesis Block', bpm: 155,
name: 'Desert Storm', bpm: 200, synthStyle: 'epic',
bass: [
110,0,220,0, 110,0,165,0, 110,0,220,0, 110,165,220,165,
175,0,349,0, 175,0,262,0, 175,0,349,0, 175,262,349,262,
131,0,262,0, 131,0,196,0, 131,0,262,0, 131,196,262,196,
98,0,196,0, 98,0,147,0, 98,0,196,0, 98,147,196,0,
110,0,220,0, 110,0,165,0, 110,0,220,165, 110,165,220,165,
147,0,294,0, 147,0,220,0, 147,0,294,0, 147,220,294,220,
82,0,165,0, 82,0,123,0, 82,0,165,123, 82,123,165,123,
110,0,220,0, 110,0,165,0, 110,0,220,0, 110,0,0,0,
110,0,220,0, 110,0,220,110, 110,0,220,0, 165,0,220,0,
87,0,175,0, 87,0,175,87, 87,0,175,0, 131,0,175,0,
73,0,147,0, 73,0,147,73, 73,0,147,0, 110,0,147,0,
82,0,165,0, 82,0,165,82, 82,0,165,0, 123,0,165,0,
110,0,220,110, 110,165,220,110, 110,0,220,110, 110,165,220,165,
131,0,262,131, 131,196,262,131, 131,0,262,131, 131,196,262,196,
87,0,175,87, 87,131,175,87, 87,0,175,87, 87,131,175,131,
82,0,165,82, 82,123,165,82, 82,165,247,330, 165,82,0,0,
],
lead: [
659,0,587,523, 494,0,523,587, 659,0,784,880, 784,659,587,523,
698,0,659,587, 523,0,587,659, 698,0,880,1047, 880,698,659,587,
523,0,659,784, 880,0,784,659, 1047,0,988,880, 784,659,523,659,
784,0,880,988, 1175,0,988,880, 784,0,659,587, 523,494,440,0,
659,0,784,880, 988,0,880,784, 659,0,587,659, 784,880,784,659,
587,0,698,880, 1047,0,880,698, 1175,0,1047,880, 698,587,698,880,
659,0,831,988, 1319,0,1175,988, 831,988,1319,831, 988,1319,1661,1319,
880,0,784,659, 523,0,659,784, 880,0,1319,1047, 880,659,523,440,
440,0,523,659, 880,0,659,523, 440,0,523,659, 784,880,784,659,
349,0,440,523, 698,0,523,440, 349,0,440,523, 587,698,659,523,
294,0,349,440, 587,0,440,349, 587,698,880,1047, 880,698,587,440,
330,0,440,523, 659,0,784,880, 1047,0,880,784, 659,523,440,330,
880,1047,1319,1760, 1319,0,1047,880, 784,659,880,1047, 1319,1047,880,659,
1047,1319,1568,1319, 1047,784,659,784, 1047,1319,1568,2093, 1568,1319,1047,784,
698,880,1047,1397, 1760,0,1397,1047, 880,698,880,1047, 1397,1047,880,698,
659,784,880,1047, 880,784,659,523, 440,523,659,880, 659,0,0,0,
],
arp: [
440,523,659,523, 440,523,659,880, 659,880,659,523, 440,659,523,440,
349,440,523,440, 349,440,523,698, 523,698,523,440, 349,523,440,349,
262,330,392,330, 262,330,392,523, 392,523,392,330, 262,392,330,262,
196,247,294,247, 196,247,294,392, 294,392,294,247, 196,294,247,196,
440,523,659,880, 659,880,1047,880, 659,523,440,523, 659,880,659,523,
294,349,440,349, 294,349,440,587, 440,587,440,349, 294,440,349,294,
330,415,494,415, 330,415,494,659, 494,659,494,415, 330,494,415,330,
440,523,659,523, 440,659,523,440, 659,523,440,330, 440,523,659,0,
440,523,659,523, 440,523,659,880, 659,523,440,523, 659,880,659,523,
349,440,523,440, 349,440,523,698, 523,440,349,440, 523,698,523,440,
294,349,440,349, 294,349,440,587, 440,349,294,349, 440,587,440,349,
330,415,523,415, 330,415,523,659, 523,415,330,415, 523,659,523,415,
440,659,880,659, 440,523,659,880, 1047,880,659,523, 440,659,880,1047,
523,784,1047,784, 523,659,784,1047, 1319,1047,784,659, 523,784,1047,1319,
349,523,698,523, 349,440,523,698, 880,698,523,440, 349,523,698,880,
330,523,659,523, 330,415,523,659, 880,659,523,415, 440,523,659,0,
],
// I-V-vi-IV in C major (classic pop anthem)
chords: [[262,330,392],[196,247,294],[220,262,330],[175,220,262],[262,330,392],[196,247,294],[220,262,330],[175,220,262]],
chords: [[220,262,330],[175,220,262],[147,175,220],[165,208,247],[220,262,330],[131,165,196],[175,220,262],[165,208,247]],
drums: [
1,3,0,3, 2,0,3,0, 1,3,0,3, 2,0,3,0, 1,3,0,3, 2,0,3,0, 1,3,0,3, 2,0,4,0,
1,3,0,3, 2,0,3,3, 1,3,0,3, 2,0,3,0, 1,3,0,3, 2,3,3,0, 1,3,0,3, 2,3,4,3,
1,3,1,3, 2,0,3,0, 1,3,0,3, 2,0,3,0, 1,3,1,3, 2,0,3,0, 1,3,0,3, 2,0,4,0,
1,3,1,3, 2,3,3,0, 1,3,1,3, 2,3,3,3, 1,3,1,3, 2,3,1,3, 2,2,2,2, 1,0,0,0,
1,0,3,0, 2,0,3,0, 1,0,3,0, 2,0,3,0,
1,0,3,0, 2,0,3,0, 1,0,3,0, 2,0,3,4,
1,0,3,0, 2,0,3,0, 1,0,3,0, 2,0,3,0,
1,0,3,0, 2,0,3,4, 1,0,3,0, 2,3,4,3,
1,3,1,3, 2,0,3,0, 1,3,1,3, 2,0,3,0,
1,3,1,3, 2,0,3,0, 1,3,1,3, 2,3,4,3,
1,3,1,3, 2,3,1,3, 1,3,1,3, 2,3,1,3,
1,3,1,3, 2,3,4,3, 1,1,2,1, 2,2,2,2,
],
}
// Track 2: "Lightning Strike" — Em, 165 BPM — Fast driving energy
// Track 2: "Vampire's Requiem" — 190 BPM, D minor, Castlevania gothic
const track2: MusicTrack = {
name: 'Lightning Strike', bpm: 165,
name: "Vampire's Requiem", bpm: 190, synthStyle: 'gothic',
bass: [
82,0,165,0, 82,0,123,0, 82,0,165,0, 82,123,165,123,
131,0,262,0, 131,0,196,0, 131,0,262,0, 131,196,262,196,
98,0,196,0, 98,0,147,0, 98,0,196,0, 98,147,196,147,
147,0,294,0, 147,0,220,0, 147,0,294,0, 147,220,294,220,
82,0,165,0, 82,0,123,0, 82,0,165,123, 82,123,165,123,
110,0,220,0, 110,0,165,0, 110,0,220,0, 110,165,220,165,
123,0,247,0, 123,0,185,0, 123,0,247,185, 123,185,247,185,
82,0,165,0, 82,0,123,0, 82,0,165,0, 82,0,0,0,
147,0,294,147, 147,0,294,0, 147,0,294,147, 175,220,294,220,
117,0,233,117, 117,0,233,0, 117,0,233,117, 147,175,233,175,
98,0,196,98, 98,0,196,0, 98,0,196,98, 131,147,196,147,
110,0,220,110, 110,0,220,0, 110,0,220,110, 139,165,220,165,
147,294,147,294, 147,294,175,220, 147,294,147,294, 175,220,294,349,
117,233,117,233, 117,233,175,233, 175,349,175,349, 175,349,220,262,
98,196,98,196, 131,196,262,196, 98,196,98,196, 131,196,262,330,
110,220,110,220, 139,220,277,220, 110,0,220,0, 110,0,0,0,
],
lead: [
494,0,659,784, 988,0,784,659, 494,0,659,988, 784,659,494,392,
523,0,659,784, 1047,0,784,659, 523,0,659,784, 1047,784,659,523,
784,0,988,1175, 784,0,587,494, 784,0,988,1175, 1319,1175,988,784,
587,0,740,880, 1175,0,880,740, 587,0,740,880, 1175,880,740,587,
659,740,784,880, 988,0,880,784, 659,740,784,988, 1319,988,784,659,
880,0,1047,1319, 880,0,659,523, 880,0,1047,1319, 1175,1047,880,659,
988,0,1245,1480, 988,0,740,622, 988,1245,1480,1976, 1480,1245,988,740,
659,0,784,988, 1319,0,988,784, 659,784,988,1319, 1568,1319,988,659,
587,0,698,880, 1047,0,880,698, 587,0,440,349, 440,587,698,880,
466,0,587,698, 932,0,698,587, 466,0,349,233, 349,466,587,698,
392,0,494,587, 784,0,587,494, 392,0,330,262, 330,392,494,587,
440,0,554,698, 880,0,698,554, 440,330,220,330, 440,554,698,880,
1175,0,1047,880, 698,587,440,587, 698,880,1047,1175, 1397,1175,1047,880,
932,0,880,698, 587,466,349,466, 587,698,880,932, 1047,932,880,698,
784,0,698,587, 494,392,330,392, 494,587,698,784, 880,784,698,587,
880,698,554,440, 554,440,330,220, 294,349,440,587, 698,0,0,0,
],
arp: [
330,392,494,392, 330,392,494,659, 494,659,494,392, 330,494,392,330,
262,330,392,330, 262,330,392,523, 392,523,392,330, 262,392,330,262,
392,494,587,494, 392,494,587,784, 587,784,587,494, 392,587,494,392,
294,370,440,370, 294,370,440,587, 440,587,440,370, 294,440,370,294,
330,392,494,659, 494,659,784,659, 494,392,330,392, 494,659,494,392,
440,523,659,523, 440,523,659,880, 659,880,659,523, 440,659,523,440,
494,622,740,622, 494,622,740,988, 740,988,740,622, 494,740,622,494,
330,392,494,392, 330,494,392,330, 494,392,330,247, 330,392,494,0,
294,349,440,349, 294,349,440,587, 440,349,294,349, 440,587,440,349,
233,294,349,294, 233,294,349,466, 349,294,233,294, 349,466,349,294,
196,262,330,262, 196,262,330,392, 330,262,196,262, 330,392,330,262,
220,277,349,277, 220,277,349,440, 349,277,220,277, 349,440,349,277,
294,440,587,440, 294,349,440,587, 698,587,440,349, 294,440,587,698,
233,349,466,349, 233,294,349,466, 587,466,349,294, 233,349,466,587,
196,330,392,330, 196,262,330,392, 494,392,330,262, 196,330,392,494,
220,349,440,349, 220,277,349,440, 554,440,349,277, 220,349,440,0,
],
// i-VII-VI-v in E minor (Andalusian descent)
chords: [[165,196,247],[147,185,220],[131,165,196],[123,147,185],[165,196,247],[131,165,196],[147,185,220],[165,196,247]],
chords: [[147,175,220],[233,294,349],[196,233,294],[220,277,330],[147,175,220],[175,220,262],[233,294,349],[220,277,330]],
drums: [
1,0,3,0, 2,0,3,0, 1,0,3,0, 2,0,3,0, 1,0,3,0, 2,0,3,0, 1,0,3,0, 2,0,4,0,
1,0,3,0, 2,0,3,3, 1,0,3,0, 2,0,3,0, 1,0,3,0, 2,0,3,0, 1,3,3,3, 2,3,4,3,
1,0,3,0, 2,0,3,0, 1,3,3,0, 2,0,3,0, 1,0,3,0, 2,0,3,0, 1,0,3,3, 2,0,4,0,
1,3,3,0, 2,3,3,3, 1,3,1,3, 2,3,3,3, 1,3,1,3, 2,3,1,3, 2,2,2,2, 1,0,0,0,
1,0,0,3, 2,0,0,3, 1,0,0,3, 2,0,0,3,
1,0,0,3, 2,0,0,3, 1,0,0,3, 2,0,3,4,
1,0,3,3, 2,0,0,3, 1,0,3,3, 2,0,0,3,
1,0,3,3, 2,0,0,3, 1,0,3,3, 2,0,3,4,
1,3,0,3, 2,0,3,3, 1,3,0,3, 2,0,3,3,
1,3,0,3, 2,3,0,3, 1,3,0,3, 2,3,4,3,
1,3,1,3, 2,3,1,3, 1,3,1,3, 2,3,1,3,
1,1,2,1, 2,1,2,1, 2,2,2,2, 2,2,2,2,
],
}
// Track 3: "Cypherpunk" — Dm, 148 BPM — Dark mysterious atmosphere
// Track 3: "Street Heat" — 175 BPM, E minor, Streets of Rage funky
const track3: MusicTrack = {
name: 'Cypherpunk', bpm: 148,
name: 'Street Heat', bpm: 175, synthStyle: 'funky',
bass: [
147,0,294,0, 147,0,220,0, 147,0,294,0, 147,220,294,220,
117,0,233,0, 117,0,175,0, 117,0,233,0, 117,175,233,175,
175,0,349,0, 175,0,262,0, 175,0,349,0, 175,262,349,262,
131,0,262,0, 131,0,196,0, 131,0,262,0, 131,196,262,196,
147,0,294,0, 147,0,220,0, 147,0,294,220, 147,220,294,220,
98,0,196,0, 98,0,147,0, 98,0,196,0, 98,147,196,147,
110,0,220,0, 110,0,165,0, 110,0,220,165, 110,165,220,165,
147,0,294,0, 147,0,220,0, 147,0,294,0, 147,0,0,0,
82,0,0,165, 0,0,82,0, 165,0,0,196, 0,165,0,82,
110,0,0,220, 0,0,110,0, 220,0,0,262, 0,220,0,110,
131,0,0,262, 0,0,131,0, 262,0,0,330, 0,262,0,131,
123,0,0,247, 0,0,123,0, 247,0,0,294, 0,247,0,123,
82,165,0,82, 0,165,82,0, 165,82,0,196, 165,0,82,165,
110,220,0,110, 0,220,110,0, 220,110,0,262, 220,0,110,220,
131,262,0,131, 0,262,131,0, 262,131,0,330, 262,0,131,262,
123,247,0,123, 0,247,123,0, 247,0,0,0, 123,0,0,0,
],
lead: [
587,0,698,0, 880,0,698,587, 523,0,587,698, 880,698,587,523,
466,0,587,698, 932,0,698,587, 466,0,587,698, 932,880,698,587,
698,0,880,1047, 698,0,523,440, 698,0,880,1047, 1175,1047,880,698,
523,0,659,784, 1047,0,784,659, 523,0,659,784, 1047,932,784,659,
587,698,880,1175, 1397,0,1175,880, 698,0,587,440, 587,698,880,1175,
784,0,932,1175, 784,0,587,466, 784,932,1175,1568, 1175,932,784,587,
880,0,1109,1319, 880,0,659,554, 880,1109,1319,1760, 1319,1109,880,659,
587,0,698,880, 1175,0,880,698, 587,0,698,880, 1175,880,698,587,
659,0,0,784, 0,0,659,0, 0,880,0,784, 0,659,0,0,
880,0,0,1047, 0,0,880,0, 0,1175,0,1047, 0,880,0,0,
1047,0,0,1175, 0,0,1319,0, 0,1175,0,1047, 0,880,784,0,
988,0,0,880, 0,0,784,0, 0,659,0,784, 880,0,784,0,
659,784,0,880, 1047,0,880,0, 659,0,784,880, 1047,0,880,659,
880,1047,0,1175, 1319,0,1175,0, 880,0,1047,1175, 1319,0,1175,880,
1047,1319,0,1568, 1760,0,1568,0, 1319,0,1047,880, 784,0,659,0,
880,659,0,784, 659,0,523,0, 494,0,659,0, 784,0,0,0,
],
arp: [
294,349,440,349, 294,349,440,587, 440,587,440,349, 294,440,349,294,
233,294,349,294, 233,294,349,466, 349,466,349,294, 233,349,294,233,
349,440,523,440, 349,440,523,698, 523,698,523,440, 349,523,440,349,
262,330,392,330, 262,330,392,523, 392,523,392,330, 262,392,330,262,
294,349,440,587, 440,587,698,587, 440,349,294,349, 440,587,440,349,
196,233,294,233, 196,233,294,392, 294,392,294,233, 196,294,233,196,
220,277,330,277, 220,277,330,440, 330,440,330,277, 220,330,277,220,
294,349,440,349, 294,440,349,294, 440,349,294,220, 294,349,440,0,
330,0,392,0, 494,0,392,0, 330,0,494,0, 659,0,494,0,
440,0,523,0, 659,0,523,0, 440,0,659,0, 880,0,659,0,
523,0,659,0, 784,0,659,0, 523,0,784,0, 1047,0,784,0,
494,0,587,0, 740,0,587,0, 494,0,740,0, 988,0,740,0,
330,494,659,494, 330,392,494,659, 784,659,494,392, 330,494,659,784,
440,659,880,659, 440,523,659,880, 1047,880,659,523, 440,659,880,1047,
523,784,1047,784, 523,659,784,1047, 1319,1047,784,659, 523,784,1047,1319,
494,740,988,740, 494,587,740,988, 740,0,0,0, 494,0,0,0,
],
// i-III-VI-V in D minor (dark dramatic)
chords: [[147,175,220],[175,220,262],[233,294,349],[220,277,330],[147,175,220],[175,220,262],[233,294,349],[147,175,220]],
chords: [[165,196,247],[220,262,330],[262,330,392],[247,294,370],[165,196,247],[196,247,294],[220,262,330],[247,294,370]],
drums: [
1,0,0,3, 0,0,2,0, 1,0,0,3, 0,0,2,0, 1,0,0,3, 0,0,2,0, 1,0,3,3, 2,0,0,0,
1,0,0,3, 0,0,2,0, 1,0,3,3, 2,0,0,0, 1,0,0,3, 0,0,2,0, 1,0,0,3, 2,0,4,0,
1,0,3,3, 2,0,3,0, 1,0,3,0, 2,0,3,0, 1,0,3,0, 2,0,3,0, 1,0,3,3, 2,0,4,0,
1,0,3,0, 2,0,3,3, 1,3,3,0, 2,3,3,3, 1,3,1,3, 2,3,1,3, 2,2,4,2, 1,0,0,0,
1,0,0,0, 2,0,0,3, 0,0,1,0, 2,0,3,0,
1,0,0,0, 2,0,0,3, 0,0,1,0, 2,0,3,4,
1,0,3,0, 2,0,0,3, 0,3,1,0, 2,0,3,0,
1,0,3,0, 2,3,0,3, 0,3,1,0, 2,0,3,4,
1,0,3,0, 2,3,0,3, 1,3,1,0, 2,0,3,0,
1,3,3,0, 2,3,0,3, 1,3,1,0, 2,3,3,4,
1,3,3,3, 2,3,0,3, 1,3,3,3, 2,3,1,3,
1,1,2,1, 2,1,2,3, 1,1,2,2, 2,2,2,2,
],
}
// Track 4: "Hash Storm" — Cm, 170 BPM — Intense boss battle energy
// Track 4: "Steel Resolve" — 210 BPM, C major, Mega Man heroic
const track4: MusicTrack = {
name: 'Hash Storm', bpm: 170,
name: 'Steel Resolve', bpm: 210, synthStyle: 'heroic',
bass: [
131,0,262,0, 131,0,196,0, 131,0,262,0, 131,196,262,196,
104,0,208,0, 104,0,156,0, 104,0,208,0, 104,156,208,156,
156,0,311,0, 156,0,233,0, 156,0,311,0, 156,233,311,233,
117,0,233,0, 117,0,175,0, 117,0,233,0, 117,175,233,175,
131,0,262,0, 131,0,196,0, 131,0,262,196, 131,196,262,196,
175,0,349,0, 175,0,262,0, 175,0,349,0, 175,262,349,262,
98,0,196,0, 98,0,147,0, 98,0,196,147, 98,147,196,147,
131,0,262,0, 131,0,196,0, 131,0,262,0, 131,0,0,0,
131,0,262,131, 131,0,262,0, 131,0,196,0, 131,262,196,131,
196,0,392,196, 196,0,392,0, 196,0,262,0, 196,392,262,196,
220,0,440,220, 220,0,440,0, 220,0,330,0, 220,440,330,220,
175,0,349,175, 175,0,349,0, 175,0,262,0, 175,349,262,175,
131,262,131,262, 131,262,196,262, 196,392,196,392, 196,392,262,392,
220,440,220,440, 220,440,330,440, 175,349,175,349, 175,349,262,349,
131,196,262,330, 262,196,131,196, 196,262,330,392, 330,262,196,131,
175,262,349,440, 349,262,175,131, 131,262,0,0, 131,0,0,0,
],
lead: [
784,0,622,523, 392,0,523,622, 784,0,1047,1245, 1047,784,622,523,
831,0,622,523, 415,0,523,622, 831,0,1047,1245, 1047,831,622,523,
622,0,784,932, 1245,0,932,784, 622,0,784,932, 1245,932,784,622,
932,0,1175,1397, 932,0,698,587, 932,1175,1397,1865, 1397,1175,932,698,
523,622,784,1047, 1245,0,1047,784, 622,523,622,784, 1047,1245,1568,1245,
698,0,831,1047, 1397,0,1047,831, 698,0,831,1047, 1397,1047,831,698,
784,0,988,1175, 1568,0,1175,988, 784,988,1175,1568, 1976,1568,1175,988,
1047,0,784,622, 523,0,622,784, 1047,0,1245,1568, 1047,784,622,523,
523,659,784,1047, 784,659,523,659, 784,1047,1319,1047, 784,659,523,392,
784,1047,1175,1319, 1175,1047,784,659, 523,659,784,1047, 1175,1047,784,659,
880,1047,1175,1319, 1175,1047,880,784, 659,784,880,1047, 1175,1047,880,659,
698,880,1047,1175, 1047,880,698,523, 440,523,698,880, 1047,880,698,523,
1047,1319,1568,1319, 1047,784,659,784, 1047,1319,1568,2093, 1568,1319,1047,784,
1175,1319,1568,1760, 1568,1319,1175,880, 659,880,1175,1319, 1568,1319,1175,880,
880,1047,1175,1319, 1175,1047,880,784, 659,784,880,1047, 1175,1047,880,784,
698,880,1047,1175, 1047,880,698,523, 523,659,784,1047, 784,0,0,0,
],
arp: [
262,311,392,311, 262,311,392,523, 392,523,392,311, 262,392,311,262,
208,262,311,262, 208,262,311,415, 311,415,311,262, 208,311,262,208,
311,392,466,392, 311,392,466,622, 466,622,466,392, 311,466,392,311,
233,294,349,294, 233,294,349,466, 349,466,349,294, 233,349,294,233,
262,311,392,523, 392,523,622,523, 392,311,262,311, 392,523,392,311,
349,415,523,415, 349,415,523,698, 523,698,523,415, 349,523,415,349,
392,494,587,494, 392,494,587,784, 587,784,587,494, 392,587,494,392,
262,311,392,311, 262,392,311,262, 392,311,262,196, 262,311,392,0,
262,330,392,330, 262,330,392,523, 392,330,262,330, 392,523,392,330,
392,494,587,494, 392,494,587,784, 587,494,392,494, 587,784,587,494,
440,523,659,523, 440,523,659,880, 659,523,440,523, 659,880,659,523,
349,440,523,440, 349,440,523,698, 523,440,349,440, 523,698,523,440,
262,392,523,784, 523,392,262,392, 523,784,1047,784, 523,392,262,523,
392,587,784,1047, 784,587,392,587, 784,1047,1319,1047, 784,587,392,784,
440,659,880,659, 440,523,659,880, 1047,880,659,523, 440,659,880,1047,
349,523,698,523, 349,440,523,698, 880,698,523,0, 262,523,0,0,
],
// i-iv-VII-III in C minor (aggressive power)
chords: [[131,156,196],[175,208,262],[233,294,349],[156,196,233],[131,156,196],[175,208,262],[233,294,349],[131,156,196]],
chords: [[262,330,392],[196,247,294],[220,262,330],[175,220,262],[262,330,392],[165,196,247],[175,220,262],[196,247,294]],
drums: [
1,3,1,3, 2,0,3,0, 1,3,0,3, 2,0,3,0, 1,3,1,3, 2,0,3,0, 1,3,0,3, 2,0,4,0,
1,3,1,3, 2,0,3,3, 1,3,0,3, 2,3,3,0, 1,3,1,3, 2,3,3,0, 1,3,3,3, 2,3,4,3,
1,3,1,3, 2,3,3,0, 1,3,1,3, 2,0,3,0, 1,3,1,3, 2,0,3,3, 1,3,1,3, 2,3,4,0,
1,3,1,3, 2,3,1,3, 1,3,1,3, 2,3,1,3, 1,1,1,1, 2,2,2,2, 2,2,2,2, 1,0,0,0,
1,0,3,0, 2,0,3,0, 1,0,3,0, 2,0,3,0,
1,0,3,0, 2,0,3,0, 1,3,3,0, 2,0,3,4,
1,3,3,0, 2,0,3,0, 1,3,3,0, 2,0,3,0,
1,3,3,0, 2,3,3,0, 1,3,3,0, 2,3,3,4,
1,3,1,3, 2,0,3,0, 1,3,1,3, 2,0,3,4,
1,3,1,3, 2,3,1,3, 1,3,1,3, 2,3,4,3,
1,3,1,3, 2,3,1,3, 1,1,1,3, 2,1,1,3,
1,1,1,1, 2,1,2,1, 2,2,2,1, 2,2,2,2,
],
}
// Track 5: "Proof of Work" — Am, 145 BPM — Grinding determination
// Track 5: "Thunder Blade" — 230 BPM, B minor, Thunder Force metal shred
const track5: MusicTrack = {
name: 'Proof of Work', bpm: 145,
name: 'Thunder Blade', bpm: 230, synthStyle: 'metal',
bass: [
110,0,220,0, 110,0,165,0, 110,0,220,0, 110,165,220,0,
82,0,165,0, 82,0,123,0, 82,0,165,0, 82,123,165,0,
87,0,175,0, 87,0,131,0, 87,0,175,0, 87,131,175,0,
131,0,262,0, 131,0,196,0, 131,0,262,0, 131,196,262,0,
110,0,220,0, 110,0,165,0, 110,0,220,165, 110,165,220,0,
147,0,294,0, 147,0,220,0, 147,0,294,0, 147,220,294,0,
98,0,196,0, 98,0,147,0, 98,0,196,0, 98,147,196,0,
110,0,220,0, 110,0,165,0, 110,0,220,0, 110,0,0,0,
123,123,247,123, 123,123,247,123, 123,123,247,0, 185,247,185,123,
98,98,196,98, 98,98,196,98, 98,98,196,0, 147,196,147,98,
82,82,165,82, 82,82,165,82, 82,82,165,0, 131,165,131,82,
92,92,185,92, 92,92,185,92, 92,92,185,0, 139,185,139,92,
123,247,123,247, 123,247,185,247, 123,247,123,247, 185,247,294,370,
98,196,98,196, 98,196,147,196, 98,196,98,196, 147,196,247,294,
82,165,82,165, 82,165,131,165, 82,165,82,165, 131,165,196,247,
92,185,92,185, 92,185,139,185, 92,185,247,370, 247,185,0,0,
],
lead: [
440,0,523,659, 880,0,659,523, 440,0,659,880, 1047,880,659,523,
659,0,784,988, 659,0,494,392, 659,0,784,988, 1319,988,784,659,
698,0,880,1047, 698,0,523,440, 698,880,1047,1397, 1047,880,698,523,
659,0,784,1047, 659,0,523,392, 659,784,1047,1319, 1047,784,659,523,
880,0,1047,1319, 880,0,659,523, 880,1047,1319,1760, 1319,1047,880,659,
587,0,698,880, 1175,0,880,698, 587,698,880,1175, 1397,1175,880,698,
784,0,988,1175, 784,0,587,494, 784,988,1175,1568, 1175,988,784,587,
880,0,659,523, 440,0,523,659, 880,0,1047,1319, 880,659,523,440,
988,0,988,1175, 1480,0,1175,988, 740,0,740,988, 1175,0,988,740,
784,0,784,988, 1175,0,988,784, 587,0,587,784, 988,0,784,587,
659,0,659,784, 988,0,784,659, 494,0,494,659, 784,0,659,494,
740,0,740,880, 1109,0,880,740, 554,0,554,740, 880,0,740,554,
988,1175,1480,1976, 1480,1175,988,1175, 1480,1976,1480,1175, 988,740,988,1175,
784,988,1175,1568, 1175,988,784,988, 1175,1568,1175,988, 784,587,784,988,
659,784,988,1319, 988,784,659,784, 988,1319,988,784, 659,494,659,784,
1480,1175,988,740, 988,740,554,440, 554,740,988,1175, 1480,0,0,0,
],
arp: [
440,523,659,523, 440,523,659,880, 659,880,659,523, 440,659,523,440,
330,392,494,392, 330,392,494,659, 494,659,494,392, 330,494,392,330,
349,440,523,440, 349,440,523,698, 523,698,523,440, 349,523,440,349,
262,330,392,330, 262,330,392,523, 392,523,392,330, 262,392,330,262,
440,523,659,880, 659,880,1047,880, 659,523,440,523, 659,880,659,523,
294,349,440,349, 294,349,440,587, 440,587,440,349, 294,440,349,294,
392,494,587,494, 392,494,587,784, 587,784,587,494, 392,587,494,392,
440,523,659,523, 440,659,523,440, 659,523,440,330, 440,523,659,0,
247,370,494,370, 247,370,494,740, 494,370,247,370, 494,740,494,370,
196,294,392,294, 196,294,392,587, 392,294,196,294, 392,587,392,294,
165,247,330,247, 165,247,330,494, 330,247,165,247, 330,494,330,247,
185,277,370,277, 185,277,370,554, 370,277,185,277, 370,554,370,277,
247,494,740,494, 247,370,494,740, 988,740,494,370, 247,494,740,988,
196,392,587,392, 196,294,392,587, 784,587,392,294, 196,392,587,784,
165,330,494,330, 165,247,330,494, 659,494,330,247, 165,330,494,659,
185,370,554,370, 185,277,370,554, 740,554,370,0, 247,370,0,0,
],
// i-v-iv-VII in A minor (grinding stubborn)
chords: [[220,262,330],[165,196,247],[147,175,220],[196,247,294],[220,262,330],[165,196,247],[147,175,220],[220,262,330]],
chords: [[247,294,370],[196,247,294],[165,196,247],[185,220,277],[247,294,370],[220,262,330],[196,247,294],[185,220,277]],
drums: [
1,0,0,3, 2,0,0,3, 1,0,0,3, 2,0,0,3, 1,0,0,3, 2,0,0,3, 1,0,3,0, 2,0,0,0,
1,0,0,3, 2,0,3,0, 1,0,0,3, 2,0,0,3, 1,0,3,0, 2,0,3,0, 1,0,3,3, 2,0,4,0,
1,0,3,0, 2,0,3,0, 1,0,0,3, 2,0,3,0, 1,0,3,0, 2,0,3,0, 1,0,3,3, 2,0,4,0,
1,0,3,0, 2,0,3,3, 1,0,3,3, 2,3,3,3, 1,3,1,3, 2,3,1,3, 2,2,4,0, 1,0,0,0,
1,1,1,3, 2,1,1,3, 1,1,1,3, 2,1,4,1,
1,1,1,3, 2,1,1,3, 1,1,1,3, 2,1,4,1,
1,1,1,1, 2,1,1,1, 1,1,4,1, 2,1,1,1,
1,1,1,1, 2,1,4,1, 2,1,1,1, 2,2,4,1,
1,1,1,1, 2,1,1,1, 1,1,1,1, 2,1,4,1,
1,1,1,1, 2,1,1,1, 1,1,1,1, 2,1,4,1,
1,1,1,1, 2,1,4,1, 1,1,1,1, 2,1,4,1,
1,1,2,1, 2,1,2,1, 2,2,2,2, 2,2,2,2,
],
}
// Track 6: "Satoshi's Dream" — Gm, 140 BPM — Beautiful melancholic melody
// Track 6: "Crystal Elegy" — 150 BPM, F major, JRPG emotional
const track6: MusicTrack = {
name: "Satoshi's Dream", bpm: 140,
name: 'Crystal Elegy', bpm: 150, synthStyle: 'emotional',
bass: [
98,0,196,0, 98,0,147,0, 98,0,196,0, 98,147,196,0,
156,0,311,0, 156,0,233,0, 156,0,311,0, 156,233,311,0,
117,0,233,0, 117,0,175,0, 117,0,233,0, 117,175,233,0,
87,0,175,0, 87,0,131,0, 87,0,175,0, 87,131,175,0,
98,0,196,0, 98,0,147,0, 98,0,196,147, 98,147,196,0,
131,0,262,0, 131,0,196,0, 131,0,262,0, 131,196,262,0,
147,0,294,0, 147,0,220,0, 147,0,294,220, 147,220,294,0,
98,0,196,0, 98,0,147,0, 98,0,196,0, 98,0,0,0,
87,0,175,0, 87,0,175,0, 87,0,175,0, 131,0,175,0,
73,0,147,0, 73,0,147,0, 73,0,147,0, 110,0,147,0,
117,0,233,0, 117,0,233,0, 117,0,233,0, 175,0,233,0,
131,0,262,0, 131,0,262,0, 131,0,262,0, 196,0,262,0,
87,175,87,175, 87,131,175,262, 175,131,87,131, 175,262,175,131,
73,147,73,147, 73,110,147,220, 147,110,73,110, 147,220,147,110,
117,233,117,233, 117,175,233,349, 233,175,117,175, 233,349,233,175,
131,262,131,262, 131,196,262,330, 262,196,131,0, 131,0,0,0,
],
lead: [
587,0,784,932, 1175,0,932,784, 587,0,466,587, 784,932,1175,932,
622,0,784,932, 1245,0,932,784, 622,0,784,932, 1245,1175,932,784,
932,0,1175,1397, 932,0,698,587, 466,0,587,698, 932,1175,1397,1175,
698,0,880,1047, 698,0,523,440, 698,880,1047,1397, 1047,880,698,523,
784,932,1175,1568, 1175,0,932,784, 587,0,466,392, 587,784,932,1175,
523,0,622,784, 1047,0,784,622, 523,622,784,1047, 1245,1047,784,622,
587,0,740,880, 1175,0,880,740, 587,740,880,1175, 1480,1175,880,740,
784,0,587,466, 392,0,466,587, 784,0,932,1175, 784,587,466,392,
698,0,0,880, 1047,0,0,880, 698,0,0,523, 440,0,523,698,
587,0,0,698, 880,0,0,698, 587,0,0,440, 349,0,440,587,
466,0,0,587, 698,0,0,587, 466,0,0,349, 233,0,349,466,
523,0,0,659, 784,0,0,659, 523,0,0,440, 330,0,440,523,
1397,0,1175,1047, 880,0,698,523, 440,523,698,880, 1047,880,698,523,
1175,0,1047,880, 698,0,587,440, 349,440,587,698, 880,698,587,440,
932,0,880,698, 587,0,466,349, 233,349,466,587, 698,587,466,349,
1047,0,880,784, 659,523,440,349, 440,523,698,880, 1047,0,0,0,
],
arp: [
196,233,294,233, 196,233,294,392, 294,392,294,233, 196,294,233,196,
311,392,466,392, 311,392,466,622, 466,622,466,392, 311,466,392,311,
233,294,349,294, 233,294,349,466, 349,466,349,294, 233,349,294,233,
349,440,523,440, 349,440,523,698, 523,698,523,440, 349,523,440,349,
196,233,294,392, 294,392,466,392, 294,233,196,233, 294,392,294,233,
262,311,392,311, 262,311,392,523, 392,523,392,311, 262,392,311,262,
294,370,440,370, 294,370,440,587, 440,587,440,370, 294,440,370,294,
196,233,294,233, 196,294,233,196, 294,233,196,147, 196,233,294,0,
175,220,262,220, 175,220,262,349, 262,220,175,220, 262,349,262,220,
147,175,220,175, 147,175,220,294, 220,175,147,175, 220,294,220,175,
233,294,349,294, 233,294,349,466, 349,294,233,294, 349,466,349,294,
262,330,392,330, 262,330,392,523, 392,330,262,330, 392,523,392,330,
175,262,349,523, 349,262,175,262, 349,523,698,523, 349,262,175,349,
147,220,294,440, 294,220,147,220, 294,440,587,440, 294,220,147,294,
233,349,466,698, 466,349,233,349, 466,698,932,698, 466,349,233,466,
262,392,523,784, 523,392,262,392, 523,784,0,0, 262,0,0,0,
],
// i-VI-iv-V in G minor (melancholic beauty)
chords: [[196,233,294],[156,196,233],[131,156,196],[147,185,220],[196,233,294],[156,196,233],[147,185,220],[196,233,294]],
chords: [[175,220,262],[147,175,220],[233,294,349],[262,330,392],[175,220,262],[220,262,330],[233,294,349],[262,330,392]],
drums: [
1,0,0,0, 2,0,0,3, 1,0,0,0, 2,0,0,0, 1,0,0,3, 2,0,0,0, 1,0,0,3, 2,0,0,0,
1,0,0,3, 2,0,0,0, 1,0,3,0, 2,0,0,3, 1,0,0,3, 2,0,0,3, 1,0,3,0, 2,0,4,0,
1,0,3,0, 2,0,0,3, 1,0,0,3, 2,0,0,0, 1,0,3,0, 2,0,3,0, 1,0,3,0, 2,0,4,0,
1,0,3,0, 2,0,3,0, 1,0,3,3, 2,0,3,3, 1,0,3,3, 2,0,3,3, 2,0,4,0, 1,0,0,0,
1,0,0,0, 0,0,2,0, 0,0,0,0, 0,0,3,0,
1,0,0,0, 0,0,2,0, 0,0,0,0, 0,0,3,0,
1,0,0,3, 0,0,2,0, 0,3,0,0, 0,0,3,0,
1,0,0,3, 0,0,2,0, 0,3,0,0, 2,0,3,4,
1,0,3,0, 2,0,0,3, 1,0,3,0, 2,0,0,3,
1,0,3,0, 2,0,3,3, 1,0,3,0, 2,0,3,4,
1,0,3,0, 2,0,3,0, 1,0,3,3, 2,0,3,0,
1,0,3,0, 2,3,3,0, 1,0,0,0, 0,0,0,0,
],
}
// Track 7: "Block Height" — Em, 160 BPM — Rising momentum
// Track 7: "Shadow Assault" — 215 BPM, G minor, Ninja Gaiden action
const track7: MusicTrack = {
name: 'Block Height', bpm: 160,
name: 'Shadow Assault', bpm: 215, synthStyle: 'ninja',
bass: [
82,0,165,0, 82,0,123,0, 82,0,165,0, 82,123,165,0,
98,0,196,0, 98,0,147,0, 98,0,196,0, 98,147,196,0,
147,0,294,0, 147,0,220,0, 147,0,294,0, 147,220,294,0,
131,0,262,0, 131,0,196,0, 131,0,262,0, 131,196,262,0,
82,0,165,0, 82,0,123,0, 82,0,165,123, 82,123,165,0,
110,0,220,0, 110,0,165,0, 110,0,220,0, 110,165,220,0,
123,0,247,0, 123,0,185,0, 123,0,247,185, 123,185,247,0,
82,0,165,0, 82,0,123,0, 82,0,165,0, 82,0,0,0,
98,0,196,98, 98,0,196,0, 98,0,196,98, 131,156,196,156,
156,0,311,156, 156,0,311,0, 156,0,311,156, 196,233,311,233,
131,0,262,131, 131,0,262,0, 131,0,262,131, 175,196,262,196,
147,0,294,147, 147,0,294,0, 147,0,294,147, 185,220,294,220,
98,196,98,196, 156,196,131,196, 98,196,98,196, 156,196,262,330,
156,311,156,311, 196,311,233,311, 156,311,156,311, 196,311,392,466,
131,262,131,262, 175,262,196,262, 131,262,131,262, 175,262,330,392,
147,294,147,294, 185,294,220,294, 147,294,0,0, 147,0,0,0,
],
lead: [
659,0,784,988, 659,0,494,392, 659,784,988,1319, 988,784,659,494,
784,0,988,1175, 784,0,587,494, 784,988,1175,1568, 1175,988,784,587,
587,0,740,880, 1175,0,880,740, 587,740,880,1175, 1480,1175,880,740,
523,0,659,784, 1047,0,784,659, 523,659,784,1047, 1319,1047,784,659,
659,784,988,1319, 1568,0,1319,988, 784,0,659,784, 988,1319,1568,1319,
880,0,1047,1319, 880,0,659,523, 880,1047,1319,1760, 1319,1047,880,659,
988,0,1245,1480, 988,0,740,622, 988,1245,1480,1976, 1480,1245,988,740,
1319,0,988,784, 659,0,784,988, 1319,0,1568,1976, 1319,988,784,659,
784,0,932,784, 0,784,932,1175, 1568,0,1175,932, 784,0,659,784,
622,0,784,622, 0,622,784,988, 1175,0,988,784, 622,0,523,622,
523,0,659,523, 0,523,659,784, 1047,0,784,659, 523,0,440,523,
587,0,740,587, 0,587,740,880, 1175,0,880,740, 587,0,494,587,
784,932,1175,1568, 1175,932,784,932, 1175,1568,1175,932, 784,659,784,932,
622,784,988,1319, 988,784,622,784, 988,1319,988,784, 622,523,622,784,
1047,1175,1568,1865, 1568,1175,1047,1175, 1568,1865,1568,1175, 1047,784,659,523,
587,740,880,1175, 880,740,587,440, 587,0,784,0, 932,0,0,0,
],
arp: [
330,392,494,392, 330,392,494,659, 494,659,494,392, 330,494,392,330,
392,494,587,494, 392,494,587,784, 587,784,587,494, 392,587,494,392,
294,370,440,370, 294,370,440,587, 440,587,440,370, 294,440,370,294,
262,330,392,330, 262,330,392,523, 392,523,392,330, 262,392,330,262,
330,392,494,659, 494,659,784,659, 494,392,330,392, 494,659,494,392,
440,523,659,523, 440,523,659,880, 659,880,659,523, 440,659,523,440,
494,622,740,622, 494,622,740,988, 740,988,740,622, 494,740,622,494,
330,392,494,392, 330,494,392,330, 494,392,330,247, 330,392,494,0,
196,233,294,233, 196,233,294,392, 294,233,196,233, 294,392,294,233,
311,392,466,392, 311,392,466,622, 466,392,311,392, 466,622,466,392,
262,330,392,330, 262,330,392,523, 392,330,262,330, 392,523,392,330,
294,370,440,370, 294,370,440,587, 440,370,294,370, 440,587,440,370,
196,294,392,587, 392,294,196,294, 392,587,784,587, 392,294,196,392,
311,466,622,932, 622,466,311,466, 622,932,1175,932, 622,466,311,622,
262,392,523,784, 523,392,262,392, 523,784,1047,784, 523,392,262,523,
294,440,587,880, 587,440,294,440, 587,0,0,0, 294,0,0,0,
],
// I-IV-vi-V in G major (uplifting pop)
chords: [[196,247,294],[131,165,196],[165,196,247],[147,185,220],[196,247,294],[131,165,196],[165,196,247],[196,247,294]],
chords: [[196,233,294],[311,392,466],[262,311,392],[294,370,440],[196,233,294],[233,294,349],[311,392,466],[294,370,440]],
drums: [
1,0,3,0, 2,0,3,0, 1,0,3,0, 2,0,3,0, 1,0,3,0, 2,0,3,0, 1,0,3,0, 2,0,4,0,
1,0,3,0, 2,0,3,3, 1,0,3,0, 2,0,3,0, 1,0,3,0, 2,0,3,0, 1,3,3,3, 2,3,4,0,
1,0,3,0, 2,0,3,0, 1,3,0,3, 2,0,3,0, 1,0,3,0, 2,0,3,3, 1,0,3,0, 2,0,4,0,
1,3,3,0, 2,3,3,3, 1,3,1,3, 2,3,3,3, 1,3,1,3, 2,3,1,3, 2,2,4,0, 1,0,0,0,
1,0,3,0, 2,0,3,0, 1,0,3,0, 2,0,3,0,
1,0,3,0, 2,0,3,0, 1,0,3,0, 2,0,3,4,
1,3,0,3, 2,0,3,0, 1,3,0,3, 2,0,3,0,
1,3,0,3, 2,3,0,3, 1,3,0,3, 2,3,4,3,
1,3,1,3, 2,0,3,0, 1,3,1,3, 2,0,3,4,
1,3,1,3, 2,3,1,3, 1,3,1,3, 2,3,4,3,
1,1,1,3, 2,1,1,3, 1,1,1,3, 2,1,4,1,
1,1,1,1, 2,1,2,1, 2,2,2,1, 2,2,2,2,
],
}
// Track 8: "Zero Conf" — Fm, 175 BPM — Urgent racing energy
// Track 8: "Emerald Rush" — 195 BPM, G major, Sonic-style funky speed
const track8: MusicTrack = {
name: 'Zero Conf', bpm: 175,
name: 'Emerald Rush', bpm: 195, synthStyle: 'speed',
bass: [
87,0,175,0, 87,0,131,0, 87,0,175,0, 87,131,175,131,
139,0,277,0, 139,0,208,0, 139,0,277,0, 139,208,277,208,
104,0,208,0, 104,0,156,0, 104,0,208,0, 104,156,208,156,
156,0,311,0, 156,0,233,0, 156,0,311,0, 156,233,311,233,
87,0,175,0, 87,0,131,0, 87,0,175,131, 87,131,175,131,
117,0,233,0, 117,0,175,0, 117,0,233,0, 117,175,233,175,
131,0,262,0, 131,0,196,0, 131,0,262,196, 131,196,262,196,
87,0,175,0, 87,0,131,0, 87,0,175,0, 87,0,0,0,
98,0,0,196, 0,0,98,0, 196,0,0,98, 0,196,0,98,
82,0,0,165, 0,0,82,0, 165,0,0,82, 0,165,0,82,
131,0,0,262, 0,0,131,0, 262,0,0,131, 0,262,0,131,
73,0,0,147, 0,0,73,0, 147,0,0,73, 0,147,0,73,
98,196,0,98, 196,0,98,196, 0,196,98,0, 196,98,196,262,
82,165,0,82, 165,0,82,165, 0,165,82,0, 165,82,165,247,
131,262,0,131, 262,0,131,262, 0,262,131,0, 262,131,262,330,
147,294,0,147, 294,0,147,294, 147,0,0,0, 98,0,0,0,
],
lead: [
698,0,831,1047, 698,0,523,415, 698,831,1047,1397, 1047,831,698,523,
554,0,698,831, 1109,0,831,698, 554,698,831,1109, 1397,1109,831,698,
831,0,1047,1245, 831,0,622,523, 831,1047,1245,1661, 1245,1047,831,622,
622,0,784,932, 1245,0,932,784, 622,784,932,1245, 1568,1245,932,784,
1047,831,698,523, 698,831,1047,1397, 1661,0,1397,1047, 831,698,523,415,
932,0,1109,1397, 932,0,698,554, 932,1109,1397,1865, 1397,1109,932,698,
523,0,659,784, 1047,0,784,659, 523,659,784,1047, 1319,1047,784,659,
698,831,1047,1397, 1661,0,1397,1047, 831,0,698,831, 1047,698,415,349,
784,0,880,1047, 1175,0,1047,880, 784,0,659,523, 659,784,880,1047,
659,0,784,880, 1047,0,880,784, 659,0,523,440, 523,659,784,880,
1047,0,1175,1319, 1568,0,1319,1175, 1047,0,880,784, 880,1047,1175,1319,
587,0,659,784, 880,0,784,659, 587,0,523,440, 523,587,659,784,
1175,1319,1568,1760, 1568,1319,1175,1047, 880,784,880,1047, 1175,1047,880,784,
1047,1175,1319,1568, 1319,1175,1047,880, 784,659,784,880, 1047,880,784,659,
1568,1760,2093,1760, 1568,1319,1175,1047, 880,784,659,523, 659,784,880,1047,
880,784,659,587, 523,440,392,330, 392,440,523,659, 784,0,0,0,
],
arp: [
349,415,523,415, 349,415,523,698, 523,698,523,415, 349,523,415,349,
277,349,415,349, 277,349,415,554, 415,554,415,349, 277,415,349,277,
415,523,622,523, 415,523,622,831, 622,831,622,523, 415,622,523,415,
311,392,466,392, 311,392,466,622, 466,622,466,392, 311,466,392,311,
349,415,523,698, 523,698,831,698, 523,415,349,415, 523,698,523,415,
466,554,698,554, 466,554,698,932, 698,932,698,554, 466,698,554,466,
262,330,392,330, 262,330,392,523, 392,523,392,330, 262,392,330,262,
349,415,523,415, 349,523,415,349, 523,415,349,262, 349,415,523,0,
392,494,587,494, 392,494,587,784, 587,494,392,494, 587,784,587,494,
330,392,494,392, 330,392,494,659, 494,392,330,392, 494,659,494,392,
523,659,784,659, 523,659,784,1047, 784,659,523,659, 784,1047,784,659,
294,370,440,370, 294,370,440,587, 440,370,294,370, 440,587,440,370,
392,587,784,587, 392,494,587,784, 1047,784,587,494, 392,587,784,1047,
330,494,659,494, 330,392,494,659, 880,659,494,392, 330,494,659,880,
523,784,1047,784, 523,659,784,1047, 1319,1047,784,659, 523,784,1047,1319,
294,440,587,440, 294,370,440,587, 784,587,0,0, 392,0,0,0,
],
// i-VII-VI-VII in F minor (oscillating tension)
chords: [[175,208,262],[156,196,233],[139,175,208],[156,196,233],[175,208,262],[139,175,208],[156,196,233],[175,208,262]],
chords: [[196,247,294],[165,196,247],[262,330,392],[147,175,220],[196,247,294],[123,147,185],[262,330,392],[147,175,220]],
drums: [
1,3,1,3, 2,0,3,0, 1,3,0,3, 2,0,3,0, 1,3,1,3, 2,0,3,0, 1,3,0,3, 2,0,4,0,
1,3,1,3, 2,3,3,0, 1,3,0,3, 2,0,3,3, 1,3,1,3, 2,0,3,3, 1,3,3,3, 2,3,4,3,
1,3,1,3, 2,3,3,0, 1,3,1,3, 2,0,3,0, 1,3,1,3, 2,0,3,0, 1,3,1,3, 2,3,4,0,
1,3,1,3, 2,3,1,3, 1,3,1,3, 2,3,3,3, 1,1,1,1, 2,2,2,2, 2,2,4,2, 1,0,0,0,
1,0,0,3, 2,0,0,3, 0,0,1,0, 2,0,3,0,
1,0,0,3, 2,0,0,3, 0,3,1,0, 2,0,3,4,
1,0,3,0, 2,0,0,3, 1,0,3,0, 2,0,3,0,
1,0,3,0, 2,3,0,3, 1,0,3,0, 2,3,3,4,
1,3,3,0, 2,0,3,3, 1,3,3,0, 2,0,3,4,
1,3,3,0, 2,3,3,3, 1,3,3,0, 2,3,3,4,
1,3,1,3, 2,3,1,3, 1,3,1,3, 2,3,4,3,
1,1,1,3, 2,1,2,1, 2,1,2,1, 2,2,2,2,
],
}
// Track 9: "Mempool" — Dm, 152 BPM — Dark controlled chaos
// Track 9: "Alien Abyss" — 140 BPM, E minor, Metroid atmospheric tension
const track9: MusicTrack = {
name: 'Mempool', bpm: 152,
name: 'Alien Abyss', bpm: 140, synthStyle: 'atmospheric',
bass: [
147,0,294,0, 147,0,220,0, 147,0,294,0, 147,220,294,220,
98,0,196,0, 98,0,147,0, 98,0,196,0, 98,147,196,147,
117,0,233,0, 117,0,175,0, 117,0,233,0, 117,175,233,175,
110,0,220,0, 110,0,165,0, 110,0,220,0, 110,165,220,165,
147,0,294,0, 147,0,220,0, 147,0,294,220, 147,220,294,220,
87,0,175,0, 87,0,131,0, 87,0,175,0, 87,131,175,131,
131,0,262,0, 131,0,196,0, 131,0,262,196, 131,196,262,196,
147,0,294,0, 147,0,220,0, 147,0,294,0, 147,0,0,0,
82,0,0,0, 82,0,0,0, 165,0,0,0, 82,0,165,0,
131,0,0,0, 131,0,0,0, 262,0,0,0, 131,0,262,0,
110,0,0,0, 110,0,0,0, 220,0,0,0, 110,0,220,0,
123,0,0,0, 123,0,0,0, 247,0,0,0, 123,0,247,0,
82,0,165,0, 0,0,82,0, 165,0,0,0, 82,0,165,82,
131,0,262,0, 0,0,131,0, 262,0,0,0, 131,0,262,131,
110,0,220,0, 0,0,110,0, 220,0,0,0, 110,0,220,110,
123,0,247,0, 123,0,0,0, 123,0,0,0, 82,0,0,0,
],
lead: [
587,698,880,587, 698,880,1175,880, 698,587,440,587, 698,880,1175,1397,
784,0,932,1175, 784,0,587,466, 784,932,1175,1568, 1175,932,784,587,
932,0,1175,1397, 932,0,698,587, 466,587,698,932, 1175,1397,1865,1397,
880,0,1109,1319, 880,0,659,554, 880,1109,1319,1760, 1319,1109,880,659,
587,0,880,1175, 1397,0,1175,880, 698,587,698,880, 1175,1397,1760,1397,
698,0,880,1047, 698,0,523,440, 698,880,1047,1397, 1760,1397,1047,880,
523,659,784,1047, 1319,0,1047,784, 659,523,659,784, 1047,1319,1568,1319,
1175,0,880,698, 587,0,698,880, 1175,0,1397,1760, 1175,880,698,587,
494,0,0,659, 0,0,784,0, 0,0,659,0, 0,494,0,0,
523,0,0,622, 0,0,784,0, 0,0,622,0, 0,523,0,0,
440,0,0,523, 0,0,659,0, 0,0,523,0, 0,440,659,0,
494,0,0,587, 0,0,740,0, 0,988,0,0, 740,0,587,0,
659,0,784,0, 988,0,1319,0, 1568,0,1319,0, 988,784,659,494,
523,0,659,0, 784,0,1047,0, 1319,0,1047,0, 784,659,523,392,
440,0,523,0, 659,0,880,0, 1047,0,880,0, 659,523,440,330,
494,0,587,0, 740,0,988,0, 740,0,587,0, 494,0,0,0,
],
arp: [
294,349,440,349, 294,349,440,587, 440,587,440,349, 294,440,349,294,
196,233,294,233, 196,233,294,392, 294,392,294,233, 196,294,233,196,
233,294,349,294, 233,294,349,466, 349,466,349,294, 233,349,294,233,
220,277,330,277, 220,277,330,440, 330,440,330,277, 220,330,277,220,
294,349,440,587, 440,587,698,587, 440,349,294,349, 440,587,440,349,
349,440,523,440, 349,440,523,698, 523,698,523,440, 349,523,440,349,
262,330,392,330, 262,330,392,523, 392,523,392,330, 262,392,330,262,
294,349,440,349, 294,440,349,294, 440,349,294,220, 294,349,440,0,
330,392,494,0, 392,494,0,0, 330,392,494,0, 392,0,0,0,
262,330,392,0, 330,392,0,0, 262,330,392,0, 330,0,0,0,
220,262,330,0, 262,330,0,0, 220,262,330,0, 262,330,0,0,
247,294,370,0, 294,370,494,0, 247,294,370,494, 294,370,494,0,
330,494,659,494, 330,392,494,659, 784,659,494,392, 330,494,392,330,
262,392,523,392, 262,330,392,523, 659,523,392,330, 262,392,330,262,
220,330,440,330, 220,262,330,440, 523,440,330,262, 220,330,262,220,
247,370,494,370, 247,294,370,494, 587,494,370,0, 0,0,0,0,
],
// i-iv-V-i → i-VI-VII-i in D minor (tension/release)
chords: [[147,175,220],[196,233,294],[220,277,330],[147,175,220],[147,175,220],[233,294,349],[262,330,392],[147,175,220]],
chords: [[165,196,247],[262,330,392],[220,262,330],[247,294,370],[165,196,247],[196,247,294],[220,262,330],[247,294,370]],
drums: [
1,0,3,0, 2,0,3,3, 1,0,3,0, 2,0,3,0, 1,0,3,0, 2,0,3,0, 1,0,3,3, 2,0,3,0,
1,0,3,3, 2,0,3,0, 1,3,3,0, 2,0,3,3, 1,0,3,0, 2,3,3,0, 1,3,3,3, 2,3,4,3,
1,0,3,0, 2,0,3,3, 1,0,3,0, 2,0,3,0, 1,0,3,0, 2,0,3,0, 1,0,3,3, 2,0,4,0,
1,3,3,0, 2,3,3,3, 1,3,1,3, 2,3,1,3, 1,3,1,3, 2,3,1,3, 2,2,4,0, 1,0,0,0,
1,0,0,0, 0,0,0,0, 2,0,0,0, 0,0,0,0,
1,0,0,0, 0,0,0,0, 2,0,0,0, 0,0,3,0,
1,0,0,0, 0,0,3,0, 2,0,0,0, 0,0,3,0,
1,0,0,3, 0,0,3,0, 2,0,3,0, 0,0,3,4,
1,0,0,3, 2,0,3,0, 1,0,0,3, 2,0,3,0,
1,0,3,0, 2,0,3,0, 1,0,3,0, 2,0,3,4,
1,0,3,0, 2,0,3,3, 1,0,3,3, 2,0,3,4,
1,0,3,0, 2,0,3,0, 1,0,0,0, 0,0,0,0,
],
}
// Track 10: "Halving Day" — Cm, 162 BPM — Triumphant climax
const track10: MusicTrack = {
name: 'Halving Day', bpm: 162,
name: 'Halving Day', bpm: 162, synthStyle: 'heroic',
bass: [
131,0,262,0, 131,0,196,0, 131,0,262,0, 131,196,262,196,
156,0,311,0, 156,0,233,0, 156,0,311,0, 156,233,311,233,