Commit Graph

178 Commits

Author SHA1 Message Date
b1rdmania 5e81227907 security: block SSRF targets and make MIDI parse deterministic 2026-02-02 23:39:10 +00:00
b1rdmania 7a7a76a92b v2: Mute noise channel temporarily 2026-01-26 00:12:27 +00:00
b1rdmania f829e992c7 v2: Fix playback engine with progressive scheduling and gain tuning
- Add progressive note scheduling (2 seconds ahead) to prevent browser overwhelm
- Tune channel gains: pulse 0.12, wave 0.15, noise 0.02
- Reduce per-note noise gains for cleaner drums
- Re-enable arpeggiation for harmony tracks
- Limit to 8 channels max
- Add scheduler cleanup on stop
2026-01-26 00:10:48 +00:00
b1rdmania f095f9a2a7 Fix distortion with limiter and reduced gains
- Added DynamicsCompressorNode limiter at master output
- Reduced channel gains (pulse: 0.08, wave: 0.12, noise: 0.05)
- Disabled arranger by default (was adding overlapping notes)
- Total max gain now 0.66 with headroom for overlap
2026-01-20 20:05:32 +00:00
b1rdmania 5b294f2e5a Simplify audio chain - bypass all effects to fix distortion
- Bypass colorizer entirely (master -> destination directly)
- Remove wave channel lowpass filter
- Clean, direct audio path with no processing
- Should eliminate all distortion artifacts
2026-01-20 19:58:54 +00:00
b1rdmania 6dec8bf7cd Simplify v2 - remove GBC/GBA/Clean presets
- Removed sound mode buttons from UI
- Simplified colorizer to just one clean GB sound
- Less complexity, cleaner interface
2026-01-20 19:56:35 +00:00
b1rdmania dd4e1cfebd Fix clicky distortion - proper gain staging and reduced saturation
- Reduced channel gains: pulse 0.12, wave 0.18, noise 0.08
- Total max gain now ~1.0 instead of 2.7 (was clipping)
- More aggressive limiter: -12dB threshold, ratio 20
- Reduced saturation from 0.2-0.3 to 0.08-0.1 in all presets
- Should eliminate clicky distortion during playback
2026-01-20 19:55:03 +00:00
b1rdmania 9311e82538 Fix bass channel - warmer, less synthetic sound
- Use pure triangle wave for bass preset (warmest option)
- Reduce harmonics from 64 to 16 with gentle rolloff
- Add 2kHz low-pass filter to wave channel
- Route all wave sounds through filter for warmth
2026-01-20 19:50:55 +00:00
b1rdmania 42b65b2a30 Add STOP ALL button to v2-test.html with node tracking 2026-01-20 19:47:12 +00:00
b1rdmania 03738dd68c Disable phantom drum track and hi-hats in arranger 2026-01-20 19:45:37 +00:00
b1rdmania 7aa1d6f660 Fix stop button - track and stop all active audio nodes
- Track all oscillators/sources in APU activeNodes Set
- Add stopAll() method that immediately stops all tracked nodes
- Auto-remove nodes from tracking when they end naturally
- GameBoyPlayer.stop() now calls apu.stopAll()
2026-01-20 19:45:08 +00:00
b1rdmania e22431164f Add v2 pages to Vite build and Vercel routing 2026-01-20 19:38:59 +00:00
b1rdmania 5e127c3a3e Add v2 Game Boy sound engine (isolated from v1)
- Authentic DMG-CPU sound chip implementation:
  - 4 Pulse channels with duty cycle control (12.5%, 25%, 50%, 75%)
  - 2 Wave channels with 4-bit wavetables
  - 2 Noise channels with LFSR (7-bit and 15-bit modes)

- GameBoy Colorizer effect chain:
  - Low-pass filter (natural GB rolloff)
  - Bit-crushing (4-bit DAC simulation)
  - Sample rate reduction
  - Saturation and high-pass filter
  - Presets: DMG, GBC, GBA, Clean

- Intelligent MIDI processing:
  - Track analysis and role detection (bass, lead, drums, etc.)
  - Automatic channel mapping to GB channels
  - Chord arpeggiator for polyphony handling
  - GameBoy Arranger for fuller sound

- BitMidi search integration
- Completely isolated from v1 (no changes to src/)
2026-01-20 19:36:13 +00:00
b1rdmania 63bd71202a Add share buttons to play.html (share page)
- Copy Link and Share to X buttons on the shared player page
- Consistent Game Boy styling with main page

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-05 13:22:32 +00:00
b1rdmania 5528aef7f8 Add Download MP3 button, bump to v1.5
- Download MP3 alongside Copy Link and Share to X buttons
- Offline rendering for faster MP3 exports
- Version history updated with v1.4 and v1.5 changes

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-05 13:20:42 +00:00
b1rdmania 39e1e357ac Make README About section actually fun this time
WAH!

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-05 13:00:27 +00:00
b1rdmania 6708911ec7 Update README About section to be more fun and punchy
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-05 12:59:32 +00:00
b1rdmania dd880c358d Use lamejs CDN instead of npm package
ESM compatibility issues with lamejs npm package - load from CDN instead.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-01 12:25:07 +00:00
b1rdmania 6cc0938bbf Fix lamejs import for MP3 encoding
Use static import instead of dynamic import to fix MPEGMode undefined error.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-01 10:35:32 +00:00
b1rdmania 2492ab833a Add offline MP3 rendering, Game Boy styling for UX test, fix 16-bit → 8-bit
- Add renderOffline() to SynthesisEngine for faster-than-realtime audio rendering
- Add renderOffline() to MotifEngine wrapping the synthesis engine
- Update ux-test.html MP3 download to use offline rendering (no more real-time capture)
- Restyle ux-test.html with Game Boy LCD aesthetic to match main site
- Fix "16-Bit" to "8-Bit" across all titles and share cards (Game Boy is 8-bit!)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-01 10:32:27 +00:00
b1rdmania d43b3d5daf Add Wario sprite to play page footer
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-31 12:04:46 +00:00
b1rdmania 853dbaa345 Update Share to X tweet format
New format:
I made a Game Boy version of [song]
Using @b1rdmania's Wario Synthesis Midi Engine
Check it out here [link]

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-31 12:03:07 +00:00
b1rdmania 044182790e Update social share image to warioX.png (landscape)
New image optimized for Twitter cards (1472x704).
Updated all OG/Twitter meta tags across index, play, and server.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-31 11:58:51 +00:00
b1rdmania f5fdc546bc Update live demo link to www.wario.style
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 11:57:05 +00:00
b1rdmania 69094c9d86 Update branding: Wario Synthesis Engine 16-Bit Midi
Consistent title across README, page titles, and social previews.
Tagline: Turn any song into a Game Boy version.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 11:56:28 +00:00
b1rdmania f69a022afd Clean up repo for public release
Removed:
- Old planning docs (DEPLOYMENT.md, IMPLEMENTATION.md, etc.)
- Dev notes (thursday-aims-progress-problems.md)
- Old backup files (main-simple.ts, main-working.ts)
- Test file (test.html)
- Unused image (chiptune_blog_piece_1000x.webp)
- docs/ folder with old audit/plan docs

Updated:
- Renamed claude.md to CLAUDE.md
- Added .claude/ to gitignore

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 11:25:21 +00:00
b1rdmania a1ec61bf6e 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>
2025-12-30 11:22:06 +00:00
b1rdmania e22ec74a14 Match FAQ style to Version History (dark bg, light text)
More consistent and easier to read.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 11:14:30 +00:00
b1rdmania 996bd6b3f9 Replace Bluetooth with Focus mode in iOS audio tips
Focus mode is more likely to cause unexpected audio silencing.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 11:13:14 +00:00
b1rdmania 06063339c3 Expand iOS audio tips: silent, volume, Bluetooth
Covers the three most common reasons for no audio on iPhone.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 11:12:22 +00:00
b1rdmania ef6b5bde5f Update iOS audio banners to mention silent mode
Tells users to make sure iPhone is not on silent before enabling audio.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 11:11:21 +00:00
b1rdmania 0b952424c3 Add iOS audio unlock banner to play page
Shows "Tap to enable audio on iOS" banner on iOS devices.
Hides automatically once audio is unlocked via button or play.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 16:41:15 +00:00
b1rdmania dc1126bdc8 Add fallback for iOS share when copy fails
When clipboard copy fails, shows a text input with the share link
so users can manually select and copy it.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 16:37:06 +00:00
b1rdmania 7dcc233445 Add immediate visual feedback on search click
Status updates to "Starting search..." immediately when button clicked,
before async operations. This will help diagnose if JS handler is running.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 16:35:14 +00:00
b1rdmania cb9ea7bcc9 Add debugging logs and error handling for iOS issue
Wraps app initialization in try/catch to display errors.
Adds console.log at key points to trace what's happening.
Catches and displays errors from search handler.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 16:33:46 +00:00
b1rdmania 602b36fc7a Add feedback when search clicked with empty input
Previously clicking Search with no input silently did nothing.
Now shows "Enter a song name to search." and focuses the input.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 16:32:07 +00:00
b1rdmania 5b51527e86 Reorder Version History: How it Works at top
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 16:29:49 +00:00
b1rdmania 8406966928 Update status message to be clearer and more concise
Changed from "Ready. Enter a song to run it through our Wario 16-Bit Engine and make a new version." to "Ready. Search any song to make a Game Boy version."

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 16:27:17 +00:00
b1rdmania 4bf1a971a0 Update status message copy
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 16:24:24 +00:00
b1rdmania fc272f3b58 Remove share link text box - just show Copied/Failed feedback
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 16:22:10 +00:00
b1rdmania 6ea3fa49fc Improve iOS copy link with execCommand fallback
- Try modern Clipboard API first
- Fall back to execCommand('copy') with textarea trick
- Uses setSelectionRange for iOS compatibility
- Only show manual text box if both methods fail

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 16:20:20 +00:00
b1rdmania 7c2a67f15a Restore Ps. I love Claude Code section with wario.png
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 16:17:57 +00:00
b1rdmania 8938257d50 Remove unused formatDuration function (fixes build)
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 16:14:17 +00:00
b1rdmania 57fbf54a98 Update page title to Wario Synth - Game Boy Midi Synthesis Engine
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 15:32:09 +00:00
b1rdmania 0e0deb1642 Update social preview text
Title: Wario Synth 16-Bit Midi
Description: Turn any song into a Game Boy version

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 15:31:04 +00:00
b1rdmania 2d97d5eea6 Fix iOS audio on shared play page
- Call unlockAudio() synchronously at start of click handler
- In audioUnlock: fire resume() immediately without await
- Play silent buffer synchronously before any async work
- Then await resume() again to ensure it completes

iOS requires audio interaction in synchronous user gesture context

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 15:26:42 +00:00
b1rdmania 238dd7c0ea Simplify FAQ: combine sections, add About with disclaimer and links
- Merged "What is" and "Engine" into single "How it works"
- Added About section with non-commercial disclaimer
- Moved X and GitHub links to About section
- Removed links from FAQ header

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 15:22:57 +00:00
b1rdmania a6d0358469 Remove inaccurate Length column from results table
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 15:21:23 +00:00
b1rdmania 04efceee9b Consolidate info into status box, remove chooser helper
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 15:16:16 +00:00
b1rdmania 5aec6d9a1b Fix search controls overflow - add min-width:0 to input
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 15:13:33 +00:00