Commit Graph
18 Commits
Author SHA1 Message Date
Hermes Agent 1528c44edd 05_moonlit_mangrove_calypso: minor-key calypso, steel pan + skank + walking bass
40 bars, D minor, 104 BPM. Intro / A(16) / B(8) / A'(8) / outro,
loop bars 4-36. Hand-rolled calypso groove (kick 1&3 with the push,
rimshot 2&4, eighths on hat+shaker), offbeat guitar skank, walking
upright bass with chromatic approaches, GM 114 steel-pan lead.
2026-10-17 17:42:08 +00:00
Hermes Agent 810f127d01 Harden for agent users: spec validation, key-sig accidentals, N64 chord qualities
- make_tune: validate_spec() reports every spec problem in one run
  (missing keys, unknown style, bad qualities, bpm<=0, out-of-range
  loop/fills, melody longer than chart, unsafe name) — no raw KeyErrors
- make_tune: key_sig_for handles accidentals in minor and major keys,
  any case (Bb minor, F# minor, bb major); real spellings kept (C# major)
- make_tune: n64 pad uses QUALITIES table (dim/aug/sus now correct)
- make_tune: WARNING on stderr for fields a style can't use (counter
  for non-DOS, fills_at for n64) instead of silent drops
- make_tune: name sanitised ([A-Za-z0-9][A-Za-z0-9._-]*), no traversal
- make_tune: render errors actionable (timidity presence check, stderr
  surfaced, sys.executable instead of bare python3)
- songkit: parse_score lints the FINAL bar too (was unchecked); this
  caught a real 5-beat bar in 01_service_station_2am COUNTER_A (fixed)
- build_all.sh: dependency + soundfont checks, removes stale midi/wav
  outputs with no current source, fails if nothing was produced
- smoke_test: runs every spec, checks loop marker tick positions,
  feeds malformed bars to the linter, covers validation + key sigs
- AGENTS.md: documents 0-based bars and exclusive end_bar, validation
  behaviour; SKILL.md added so the repo loads as an agent skill
2026-10-17 15:59:46 +00:00
Hermes Agent f5bd7ae13c AGENTS.md: correct rendering docs — FluidR3 is MIT (size, not licence), add OPL3 route 2026-10-17 08:56:47 +00:00
Hermes Agent 60c485268b Round-off: README render routes, tune scripts create midi/ if missing
Fresh-clone test passes end-to-end: clone -> build_all.sh -> all four
tunes generate, verify, render and pass audio checks with no prior state.
2026-10-17 08:32:11 +00:00
Hermes Agent 72a337f50f OPL3 rendering path: authentic Sound Blaster FM, no soundfont
- tools/opl/render_opl.cpp: libADLMIDI harness - renders MIDI through
  OPL3 emulation with game-driver volume models (DMX/Doom, Apogee/Duke,
  AIL, HMI), normalised output, WAV header patched to actual length
- tools/opl/build.sh: one-shot fetch+build of libADLMIDI
- tools/render_opl.sh: batch render + check_wav for all tunes
- README: OPL3 section
2026-10-17 07:23:55 +00:00
Hermes Agent 9b1e61b2ce README: correct soundfont licensing (FluidR3 is MIT, apt-installable) + OPL3 alternative 2026-10-17 07:06:38 +00:00
Hermes Agent 633eb92352 Public-ready: JSON tune specs, first-class loop API, licence, AGENTS.md
- MidiFile.set_loop(): one call writes LOOP_START/END, RPR LOOP
  START/END (Reaper) and LoopBegin/End markers - every engine finds
  its dialect; reader now parses markers and the smoke test asserts
  the round-trip
- tools/make_tune.py: declarative JSON spec -> fully arranged MIDI
  with style presets (dos_adventure, n64_ambient, chiptune_racing);
  the agent-friendly front door, no Python required
- tunes/specs/: demo tune 04 'Tea Break at the Terminal' (Am/112,
  loop bars 4-20) generated entirely from JSON
- AGENTS.md: spec schema, score grammar, verification loop, looping
  conventions for game BGM
- MIT LICENSE; history audited clean of credentials
2026-10-17 06:59:04 +00:00
Hermes Agent c3cd91d04f gitignore: exclude __pycache__ and build artefacts 2026-10-17 00:00:25 +00:00
Hermes Agent 95480abdab Rebuild as a code-first MIDI composition toolkit
Replaces the April wreckage (fifteen 70-byte 'working' MIDIs, archived)
with a proper pipeline:

- lib/midikit.py: stdlib-only SMF format-1 writer + reader/verifier
- lib/songkit.py: composition helpers (bar-grid score DSL with a 4/4
  bar linter, OPL arps, driving bass, vibrato, drum patterns)
- tunes/: three original tunes - DOS adventure theme (Dm/132),
  N64 ambient (G/72), chiptune racing (Em/152) - all with LOOP_START/
  LOOP_END markers for game engines
- tools/build_all.sh + tools/check_wav.py: generate, verify, render
  via timidity+FluidR3, fail on clipping/dead air
- tests/smoke_test.py: round-trip verified against mido

All three tunes render clean: no clipping, no dead air, durations
match, chromaticism audited against the chord chart.
2026-10-17 00:00:20 +00:00
Hermes Agent 7ddabaff2a Add OneMinuteCastle.mid - 60 second D minor arpeggio, 120 BPM 2026-04-16 16:59:10 +00:00
Hermes Agent 6df9bcabbf Add Castles_QuickTime_Playable.mid - verified working duration 6 seconds 2026-04-16 15:00:57 +00:00
Hermes Agent 4786459259 Add properly formatted MIDI file - should play in QuickTime and browsers 2026-04-16 15:00:14 +00:00
Hermes Agent 941925d061 Add Castles_Final.mid - complete MIDI with full arpeggio 2026-04-16 14:58:55 +00:00
Hermes Agent 1baf734331 Add ValidCastles.mid - correctly formatted MIDI file 2026-04-16 14:58:28 +00:00
Hermes Agent fe2123c0a3 Add Castles_Valid.mid - proper MIDI with meta events 2026-04-16 14:46:16 +00:00
Hermes Agent ce930a571f Add README with technical details about MIDI format 2026-04-16 14:41:36 +00:00
Hermes Agent 5ee22a90d4 Organize MIDI files into midi/ subdirectory 2026-04-16 14:40:44 +00:00
Hermes Agent d423a62344 Add Castles_Proper.mid - valid MIDI file 2026-04-16 14:40:27 +00:00