Tidy up README with images and correct links

- Add logo and Wario images
- Update to correct production URL
- Simplify and reorganize sections
- Add Game Boy sound chip explanation
- Add tech stack and credits

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
b1rdmania
2025-12-30 11:22:06 +00:00
parent e22ec74a14
commit a1ec61bf6e
+43 -67
View File
@@ -1,52 +1,34 @@
# WARIO SYNTH # WARIO SYNTH
Turn any song into retro game console music using the Wario Synthesis Engine. ![Wario Synth Logo](public/wariosynthlogo.png)
WARIO SYNTH is a small experiment in **music-as-code**: treat MIDI as structural data, not audio. It pulls MIDI patterns from the web, plays the original performance, then generates a retro Gameboy-style procedural version using the Wario Synthesis Engine and Web Audio. Turn any song into retro Game Boy music using the Wario Synthesis Engine.
## Live Demo
**[wariosynthengine.com](https://wariosynthengine.com)** (or [motif-self.vercel.app](https://motif-self.vercel.app))
## About ## About
- **What it does**: Search songs → pick a result → play the original MIDI → generate retro game console music with the Wario Synthesis Engine. WARIO SYNTH is a fun experiment in **music-as-code**: it treats MIDI as structural data, not audio. Search for any song, pick a MIDI source, and the Wario Synthesis Engine analyses the MIDI structure and resynthesises it using Web Audio oscillators tuned to mimic the Game Boy's 4-channel sound chip.
- **Why it's fun**: It's like "hear a MIDI version of anything", then transform it into classic chiptune-style audio.
- **Status**: Working locally end-to-end. Hosted frontend exists, backend hosting may be separate depending on deployment.
## Live demo - **Two pulse wave channels** for melody and harmony
- **One wave channel** for bass
- **One noise channel** for percussion
- **Frontend**: `https://motif-46uf00ypw-boom-test-c54cde04.vercel.app` All processing runs client-side in your browser - no server-side audio generation.
Note: if the backend isnt deployed/configured for the demo environment, search/fetch wont work from the hosted URL. Run locally for the full experience. ![Wario](public/wario-sprite.png)
## Use on your website (embed)
WARIO SYNTH includes an embeddable widget page at **`/embed`**. It generates audio in the user's browser (no audio files needed).
Example:
```html
<iframe
src="https://YOUR_DOMAIN/embed?song=Hotel%20California"
width="420"
height="260"
style="border:0;border-radius:12px;overflow:hidden"
allow="autoplay"
></iframe>
```
### Embed parameters (v1)
- **`song`**: the query to load (e.g. `Hotel%20California`)\n+- **`volume`**: preview volume `0..1` (optional)\n+- **`motifVolume`**: motif volume `0..1` (optional)
Notes:\n- Autoplay is best-effort; iOS/Safari requires a user gesture before sound.\n
## Features ## Features
- **MIDI search** (currently BitMidi; additional sources optional) - **MIDI search** from BitMidi and other sources
- **MIDI fetch + validation + caching** via an Express backend - **Browser playback** with soundfont piano preview
- **Browser playback** with multiple engines: - **Wario Synthesis Engine**: procedural Game Boy-style synthesis from parsed MIDI structure
- Tone.js sampled piano - **Share links** with dynamic social previews
- Soundfont piano - **Works on mobile** (iOS audio unlock included)
- Custom WebAudio synth preview
- **Wario Synthesis Engine**: role-based synthesis (bass / drone / ostinato / texture / accents) from parsed MIDI structure
## Quick start (local) ## Quick Start (Local)
```bash ```bash
# Install frontend deps # Install frontend deps
@@ -62,44 +44,38 @@ npm run dev:backend
npm run dev npm run dev
``` ```
## How it works (pipeline) ## How It Works
1. User searches for a song 1. User searches for a song
2. Backend searches MIDI sources and returns ranked candidates 2. Backend searches MIDI sources and returns ranked candidates
3. Backend fetches the selected `.mid`, validates it, and caches it 3. User picks a MIDI source
4. Frontend parses MIDI into normalized note events 4. Frontend parses MIDI into normalized note events
5. User can: 5. Wario Synthesis Engine maps tracks to Game Boy sound channels
- **Play original MIDI** (soundfont/sampler playback), or 6. Web Audio oscillators generate the retro sound
- **Generate with Wario Synthesis Engine** (procedural Web Audio synthesis derived from structure)
## Backend API ## Embed Widget
- `GET /api/midi/search?q=song` WARIO SYNTH includes an embeddable widget at **`/embed`**:
- `GET /api/midi/fetch?u=url` (URL must be encoded)
- `GET /api/midi/parse?u=url`
- `GET /health`
## Project structure ```html
<iframe
``` src="https://wariosynthengine.com/embed?song=Hotel%20California"
src/ width="420"
├── core/ # MotifEngine, RoleMapper height="260"
├── midi/ # Parsing + feature extraction style="border:0;border-radius:12px;overflow:hidden"
├── services/ # Backend API client allow="autoplay"
├── synthesis/ # Players + procedural synthesis engine ></iframe>
└── types/ # TypeScript interfaces
server/
├── src/
│ ├── adapters/ # MIDI search adapters (sources)
│ ├── services/ # Search/fetch/parse
│ └── utils/ # Scoring, validation, MIDI helpers
└── cache/ # Downloaded MIDI cache (local dev)
``` ```
## Roadmap ## Tech Stack
- **More sources**: add/replace flaky scrapers with more reliable sources - **Frontend**: TypeScript, Vite, Web Audio API
- **Better matching**: smarter ranking + metadata validation - **Backend**: Express, Node.js
- **Synthesis controls**: "more ominous", "more dancey", "more ambient", etc. - **Deployment**: Vercel
- **Deployment**: host backend and wire frontend to it via env config - **Built with**: Claude Code
## Credits
A non-commercial project by [@b1rdmania](https://x.com/b1rdmania) for lols. Please don't sue me.
![Wario Moment](public/wario.png)