wire 20 StepMania songs into song picker with real metadata

Unify Song type to include id, chartUrl, audioUrl alongside display
fields. Replace 8 placeholder songs with all 20 real StepMania songs
(artist, BPM, duration from SSC/audio files). Get Lucky is first.
songIndex.ts now re-exports from the canonical song-data source.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
main
name 2026-04-11 19:02:56 -07:00
parent a2695423e6
commit 1eb568c38b
3 changed files with 227 additions and 83 deletions

View File

@ -2,75 +2,243 @@ import type { Song } from './types'
export const SONGS: Song[] = [
{
title: 'Neon Runner',
artist: 'Pulse Reactor',
bpm: 175,
difficulty: 4,
duration: '3:10',
genre: 'Electro',
id: 'get-lucky',
title: 'Get Lucky',
artist: 'Daft Punk',
bpm: 116,
difficulty: 3,
duration: '2:28',
genre: 'Disco',
color: '#D4A017',
chartUrl: '/songs/get-lucky/chart.ssc',
audioUrl: '/songs/get-lucky/audio.ogg',
},
{
id: 'axion',
title: 'Axion',
artist: 'Reso',
bpm: 140,
difficulty: 3,
duration: '2:14',
genre: 'Drum & Bass',
color: '#D94A0A',
chartUrl: '/songs/axion/chart.ssc',
audioUrl: '/songs/axion/audio.ogg',
},
{
title: 'Burning Step',
artist: 'Luna Flux',
bpm: 168,
difficulty: 3,
duration: '2:54',
genre: 'Dance Pop',
id: 'blue',
title: 'Blue',
artist: 'Au5 & Fractal',
bpm: 175,
difficulty: 5,
duration: '2:28',
genre: 'Dubstep',
color: '#2A51C7',
chartUrl: '/songs/blue/chart.ssc',
audioUrl: '/songs/blue/audio.ogg',
},
{
title: 'Solar Break',
artist: 'System Vibe',
bpm: 182,
id: 'caelumize',
title: 'Caelumize',
artist: 'void',
bpm: 175,
difficulty: 5,
duration: '3:26',
genre: 'Hard Dance',
color: '#EF6C14',
duration: '1:57',
genre: 'Artcore',
color: '#9B59B6',
chartUrl: '/songs/caelumize/chart.ssc',
audioUrl: '/songs/caelumize/audio.ogg',
},
{
title: 'Arc Flash',
artist: 'NOVA//CTRL',
bpm: 160,
difficulty: 2,
duration: '2:41',
genre: 'Synthwave',
color: '#3C9B5E',
},
{
title: 'Heatline',
artist: 'Mira K',
bpm: 190,
id: 'drift',
title: 'Drift',
artist: 'Metrik',
bpm: 174,
difficulty: 5,
duration: '2:30',
genre: 'Techno',
color: '#C7313A',
duration: '2:20',
genre: 'Drum & Bass',
color: '#27AE60',
chartUrl: '/songs/drift/chart.ssc',
audioUrl: '/songs/drift/audio.ogg',
},
{
title: 'Volt Parade',
artist: 'Skyline Unit',
bpm: 148,
difficulty: 2,
duration: '3:03',
genre: 'Nu Disco',
color: '#0E9A9A',
},
{
title: 'Firecode',
artist: 'Cipher Girls',
bpm: 172,
id: 'fang-banger',
title: 'Fang Banger',
artist: 'Bro Safari & Space Laces',
bpm: 140,
difficulty: 4,
duration: '3:14',
genre: 'Club',
color: '#A641D2',
duration: '2:27',
genre: 'Bass',
color: '#C0392B',
chartUrl: '/songs/fang-banger/chart.ssc',
audioUrl: '/songs/fang-banger/audio.ogg',
},
{
title: 'Street Impact',
artist: 'Delta Move',
bpm: 156,
id: 'future-music',
title: 'Future MUSiC',
artist: 'Ym1024 feat. lamie*',
bpm: 132,
difficulty: 3,
duration: '2:58',
genre: 'Breakbeat',
color: '#A88516',
duration: '2:14',
genre: 'J-Core',
color: '#1ABC9C',
chartUrl: '/songs/future-music/chart.ssc',
audioUrl: '/songs/future-music/audio.ogg',
},
{
id: 'g-symphonicore',
title: 'G-SYMPHONiCORE',
artist: 'Jugem-T',
bpm: 212,
difficulty: 5,
duration: '2:21',
genre: 'Speedcore',
color: '#E67E22',
chartUrl: '/songs/g-symphonicore/chart.ssc',
audioUrl: '/songs/g-symphonicore/audio.ogg',
},
{
id: 'heartbeats',
title: 'HeartBeats',
artist: '獣音ロウ.Revo',
bpm: 128,
difficulty: 4,
duration: '2:49',
genre: 'Happy Hardcore',
color: '#E84393',
chartUrl: '/songs/heartbeats/chart.ssc',
audioUrl: '/songs/heartbeats/audio.ogg',
},
{
id: 'jump-ya-body',
title: 'Jump Ya Body',
artist: 'Kill The Noise feat. Mercedes',
bpm: 140,
difficulty: 3,
duration: '2:10',
genre: 'Bass',
color: '#8D6E63',
chartUrl: '/songs/jump-ya-body/chart.ssc',
audioUrl: '/songs/jump-ya-body/audio.ogg',
},
{
id: 'kokeshi-neko-medley',
title: 'Kokeshi Neko Medley',
artist: 'Ino',
bpm: 216,
difficulty: 5,
duration: '2:43',
genre: 'J-Core',
color: '#AD1457',
chartUrl: '/songs/kokeshi-neko-medley/chart.ssc',
audioUrl: '/songs/kokeshi-neko-medley/audio.ogg',
},
{
id: 'lightspeed-remix',
title: 'Lightspeed (Remix)',
artist: 'Kill The Noise & Datsik',
bpm: 108,
difficulty: 4,
duration: '2:23',
genre: 'Dubstep',
color: '#5C6BC0',
chartUrl: '/songs/lightspeed-remix/chart.ssc',
audioUrl: '/songs/lightspeed-remix/audio.ogg',
},
{
id: 'mess',
title: 'Mess',
artist: 'Anamanaguchi',
bpm: 112,
difficulty: 4,
duration: '2:14',
genre: 'Chiptune',
color: '#00B894',
chartUrl: '/songs/mess/chart.ssc',
audioUrl: '/songs/mess/audio.ogg',
},
{
id: 'monkey-business',
title: 'Monkey Business',
artist: 'kors k',
bpm: 160,
difficulty: 4,
duration: '1:58',
genre: 'Happy Hardcore',
color: '#F4A300',
chartUrl: '/songs/monkey-business/chart.ssc',
audioUrl: '/songs/monkey-business/audio.ogg',
},
{
id: 'neurobazaar',
title: 'Neurobazaar',
artist: 'zircon',
bpm: 130,
difficulty: 4,
duration: '2:16',
genre: 'Electronica',
color: '#0984E3',
chartUrl: '/songs/neurobazaar/chart.ssc',
audioUrl: '/songs/neurobazaar/audio.ogg',
},
{
id: 'peacock',
title: 'Peacock',
artist: '7 Minutes Dead',
bpm: 120,
difficulty: 4,
duration: '2:29',
genre: 'Electro',
color: '#00ACC1',
chartUrl: '/songs/peacock/chart.ssc',
audioUrl: '/songs/peacock/audio.ogg',
},
{
id: 'plasticity',
title: 'Plasticity',
artist: 'Minor Rain',
bpm: 168,
difficulty: 5,
duration: '2:25',
genre: 'Artcore',
color: '#7B1FA2',
chartUrl: '/songs/plasticity/chart.ssc',
audioUrl: '/songs/plasticity/audio.ogg',
},
{
id: 'souten',
title: 'Souten (Key-Kai mix)',
artist: 'Meine Meinung',
bpm: 182,
difficulty: 4,
duration: '2:05',
genre: 'Trance',
color: '#0277BD',
chartUrl: '/songs/souten-sta-s-key-kai-mix/chart.ssc',
audioUrl: '/songs/souten-sta-s-key-kai-mix/audio.ogg',
},
{
id: 'the-edge',
title: 'The Edge',
artist: 'KOAN Sound',
bpm: 140,
difficulty: 3,
duration: '2:28',
genre: 'Electro',
color: '#607D8B',
chartUrl: '/songs/the-edge/chart.ssc',
audioUrl: '/songs/the-edge/audio.ogg',
},
{
id: 'trap',
title: 'Trap',
artist: 'Bluescreens',
bpm: 174,
difficulty: 4,
duration: '2:01',
genre: 'Drum & Bass',
color: '#D32F2F',
chartUrl: '/songs/trap/chart.ssc',
audioUrl: '/songs/trap/audio.ogg',
},
]

View File

@ -1,4 +1,5 @@
export type Song = {
id: string
title: string
artist: string
bpm: number
@ -6,4 +7,6 @@ export type Song = {
duration: string
genre: string
color: string
chartUrl: string
audioUrl: string
}

View File

@ -1,29 +1,2 @@
export interface SongEntry {
id: string
title: string
chartUrl: string
audioUrl: string
}
export const SONGS: SongEntry[] = [
{ id: 'axion', title: 'Axion', chartUrl: '/songs/axion/chart.ssc', audioUrl: '/songs/axion/audio.ogg' },
{ id: 'blue', title: 'Blue', chartUrl: '/songs/blue/chart.ssc', audioUrl: '/songs/blue/audio.ogg' },
{ id: 'caelumize', title: 'Caelumize', chartUrl: '/songs/caelumize/chart.ssc', audioUrl: '/songs/caelumize/audio.ogg' },
{ id: 'drift', title: 'Drift', chartUrl: '/songs/drift/chart.ssc', audioUrl: '/songs/drift/audio.ogg' },
{ id: 'fang-banger', title: 'Fang Banger', chartUrl: '/songs/fang-banger/chart.ssc', audioUrl: '/songs/fang-banger/audio.ogg' },
{ id: 'future-music', title: 'Future MUSiC', chartUrl: '/songs/future-music/chart.ssc', audioUrl: '/songs/future-music/audio.ogg' },
{ id: 'get-lucky', title: 'Get Lucky', chartUrl: '/songs/get-lucky/chart.ssc', audioUrl: '/songs/get-lucky/audio.ogg' },
{ id: 'g-symphonicore', title: 'G-SYMPHONiCORE', chartUrl: '/songs/g-symphonicore/chart.ssc', audioUrl: '/songs/g-symphonicore/audio.ogg' },
{ id: 'heartbeats', title: 'HeartBeats', chartUrl: '/songs/heartbeats/chart.ssc', audioUrl: '/songs/heartbeats/audio.ogg' },
{ id: 'jump-ya-body', title: 'Jump Ya Body', chartUrl: '/songs/jump-ya-body/chart.ssc', audioUrl: '/songs/jump-ya-body/audio.ogg' },
{ id: 'kokeshi-neko-medley', title: 'Kokeshi Neko Medley', chartUrl: '/songs/kokeshi-neko-medley/chart.ssc', audioUrl: '/songs/kokeshi-neko-medley/audio.ogg' },
{ id: 'lightspeed-remix', title: 'Lightspeed (Remix)', chartUrl: '/songs/lightspeed-remix/chart.ssc', audioUrl: '/songs/lightspeed-remix/audio.ogg' },
{ id: 'mess', title: 'Mess', chartUrl: '/songs/mess/chart.ssc', audioUrl: '/songs/mess/audio.ogg' },
{ id: 'monkey-business', title: 'Monkey Business', chartUrl: '/songs/monkey-business/chart.ssc', audioUrl: '/songs/monkey-business/audio.ogg' },
{ id: 'neurobazaar', title: 'Neurobazaar', chartUrl: '/songs/neurobazaar/chart.ssc', audioUrl: '/songs/neurobazaar/audio.ogg' },
{ id: 'peacock', title: 'Peacock', chartUrl: '/songs/peacock/chart.ssc', audioUrl: '/songs/peacock/audio.ogg' },
{ id: 'plasticity', title: 'Plasticity', chartUrl: '/songs/plasticity/chart.ssc', audioUrl: '/songs/plasticity/audio.ogg' },
{ id: 'souten', title: 'Souten (Key-Kai mix)', chartUrl: '/songs/souten-sta-s-key-kai-mix/chart.ssc', audioUrl: '/songs/souten-sta-s-key-kai-mix/audio.ogg' },
{ id: 'the-edge', title: 'The Edge', chartUrl: '/songs/the-edge/chart.ssc', audioUrl: '/songs/the-edge/audio.ogg' },
{ id: 'trap', title: 'Trap', chartUrl: '/songs/trap/chart.ssc', audioUrl: '/songs/trap/audio.ogg' },
]
export { SONGS } from '../features/song-select/song-data'
export type { Song } from '../features/song-select/types'