Spaces:
Sleeping
Sleeping
Commit History
-
Real drum samples from LinnDrum CDN, tighter rhythm and fewer notes
Ewan +1: Claude Opus 4.6Replace synthesized drum samples with real LinnDrum (LM-2) recordings from smpldsnds CDN (OGG format, CORS-enabled). Removes 412KB base64 module, bundle drops from 919KB to 497KB. Piano rhythm: rewrite consolidate_rhythm to pick top bins by count (capped at 8 max) instead of threshold-based selection. Increase max_snap to 60ms. Reduce concurrent note limits (RH: 4->3, LH: 2->1 for normal; 5->4, 3->2 for complex). Raise merge_repeated_notes energy threshold from 1.2x to 1.5x median so more re-attacks merge into sustains. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>f8777bb -
Sample-based drum kit and tighter rhythm snapping
Ewan +1: Claude Opus 4.6Replace synthesized drums with DSP-generated WAV samples encoded as base64 in a JS module (no binary files). Kick/snare/hihat/crash/ride/toms use proper filtered synthesis (scipy bandpass, layered noise+sine) rendered offline for much better sound quality than real-time Tone.js synthesis. Loaded via Tone.Players from data URIs. Piano: tighten rhythm consolidation - dominant bin threshold raised to 25%/5%, add second consolidation pass (Step 9) after all note manipulation with 60ms snap range to catch notes shifted off-grid by CQT extension and playability filters. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>8fbe43c
-
Fix drum transcription and playback sounds
Ewan +1: Claude Opus 4.6Rewrite drum transcription: single-pass full-band onset detection with multi-label spectral classification (replaces overlapping sub-band approach that caused misclassification). Adds beat-grid quantization and velocity normalization. Replace MetalSynth cymbals with filtered NoiseSynth for more realistic hi-hat/crash/ride sounds. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>b7f2b6f -
Add 15s timeout fallback for sample loading
Ewan +1: Claude Opus 4.6Prevents the app from getting stuck forever on 'loading piano sounds' if the Salamander CDN is slow or unreachable. After 15 seconds, proceeds with whatever samples have loaded — Tone.js interpolates missing notes. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>0ff9816 -
Fix MetalSynth API (HH/ride/crash) and use mix audio for beat tracking
Ewan +1: Claude Opus 4.6- MetalSynth.triggerAttackRelease in Tone.js v14+ requires frequency as first param: (freq, duration, time, velocity). Old code used r13 sig (duration, time, velocity) which silently failed. Now passes explicit Hz values for hihat (400), crash (300), ride (500). - Use original mixed audio for beat tracking in optimize_other instead of the separated stem. The full mix has drums/bass which drive the beat, giving much more accurate tempo detection and beat grid. Onset detection still uses the clean separated stem. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>ecae4b3 -
Fix piano roll quality, drum sounds, add original audio playback, fix speed
Ewan +1: Claude Opus 4.6- Add playability limits to full-song optimizer (limit_concurrent_notes, limit_total_concurrent, remove_harmonic_ghosts) — reduces note count to physically playable levels - Fix drum hi-hat not audible: increase MetalSynth volume -12 -> -4dB, extend trigger duration 32n -> 16n, boost crash/ride volumes too - Add original audio playback: new /api/jobs/{id}/audio endpoint serves uploaded file back, HTML Audio element synced to Transport with toggle button + volume slider in Controls - Fix speed scaler: preserve playbackRate via tempoRef across scheduleNotes reschedules (transport.stop() was losing the rate) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>b5c16f8 -
Add drum transcription with madmom onset detection + spectral classification
Ewan +1: Claude Opus 4.6New feature: Drums tab in full song mode. Uses madmom RNNOnsetProcessor for high-quality onset detection on the Demucs drums stem, then classifies each hit (kick/snare/hi-hat/crash/ride/tom) by spectral content using librosa features (centroid, flatness, ZCR, frequency band energy). - transcriber/drums.py: drum transcription pipeline - DrumSheet.jsx: lane-based drum grid renderer (color-coded by instrument, diamonds for cymbals, X for hi-hat, circles for kick/snare/toms) - usePlayback.js: synthesized drum kit (MembraneSynth for kick/toms, NoiseSynth+MembraneSynth for snare, MetalSynth for hi-hat/crash/ride) - Dockerfile: install madmom from git (PyPI version incompatible with 3.12) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>eed42a3
-
Fix bass in piano roll, upgrade guitar samples, improve bass optimizer
Ewan +1: Claude Opus 4.6- Piano roll: use pianoRollNotes (bass filtered) for audio scheduling, not full notes array. Bass was bleeding through to piano playback. - Guitar samples: switch from Magenta SGM+ (sparse MP3 every 3 semitones) to tonejs-instruments (University of Iowa chromatic OGG recordings for acoustic, Karoryfer for electric). Much warmer, less tinny. - Bass optimizer: add pitch floor (E1=28), percussion bleed removal (short notes + spectral centroid check), octave error correction (contour-based), isolated note removal. Should produce cleaner bass lines with fewer wrong notes. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>1c51e5f
-
Improve transcription quality + upgrade to Magenta SGM+ samples
Ewan +1: Claude Opus 4.6Bass optimizer: - Lower pitch ceiling from MIDI 64 to 55 (G3, full 4-string bass range) - Add monophonic enforcement (keep lowest pitch at each onset) - Add spurious onset removal - Fix overlap trimming to trim against ANY next note (bass is monophonic) Vocals optimizer: - Add pitch ceiling at MIDI 84 (C6, soprano range) - Add pitch floor at MIDI 40 (E2, below = bass territory) - Add phantom high note removal - Add spurious onset removal Samples: Replace tonejs-instruments with Google Magenta SGM+ soundfont (acoustic_guitar_steel, electric_guitar_clean, electric_bass_finger). Higher quality source recordings, professional soundfont. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>83ff7ad -
Sample-based guitar/bass sounds, filter bass from piano roll, two guitar tabs
Ewan +1: Claude Opus 4.6Replace synthesized PluckSynth/MonoSynth with real recorded samples from tonejs-instruments (acoustic guitar, electric guitar, bass electric). Filter bass notes from piano roll in full song mode. Split guitar tab into Acoustic Guitar and Electric Guitar views. Update timing estimate. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>aeb0fce -
Full Song quality pass: light optimizer, better guitar sound, tab accuracy
Ewan +1: Claude Opus 4.6- New optimize_other.py: skips 7 piano-specific steps (CQT recovery, duration extension, harmonic ghost removal, playability limits) that corrupt mixed-instrument content from the Demucs "other" stem - Guitar synth: Karplus-Strong PluckSynth pool with chorus + reverb replaces synthetic FM triangle oscillator - Bass synth: MonoSynth with filter envelope (finger-pluck brightness decay) + compressor replaces basic triangle wave - Tab accuracy: polyphony cap (6 notes), fret span constraint (5 frets), duration cap (2s), EMA hand position, tighter pitch range (40-84) - Arrangement: sparser RH fill (1s gap threshold, 2 tones, vel 45) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>78ef95d -
Add instrument-specific audio: guitar synth for guitar tab, bass synth for bass tab
Ewan +1: Claude Opus 4.6Guitar tab view now plays through a plucked triangle synth, bass tab through a warm bass synth. Piano roll/sheet music route bass-instrument notes through the bass synth. Switching tabs reschedules playback with the correct instrument. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>eff87bd -
Fix audio not playing in Safari: fall back to MP3 samples
Ewan +1: Claude Opus 4.6Safari doesn't support OGG audio. Detect format support at startup and use .mp3 Salamander samples as fallback when OGG isn't available. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>f3e5cc5
-
Add sheet music tab with VexFlow notation and PNG download
Ewan +1: Claude Opus 4.6- New SheetMusic component renders grand staff (treble + bass clef) - MIDI-to-notation converter: quantizes durations, splits clefs, fills rests - Tab switching between Piano Roll and Sheet Music views - PNG download button (SVG → Canvas → PNG at 2x DPI) - Code-split: VexFlow chunk loads only when Sheet Music tab is active - Loop hint text: "Seek then press A, then B" for new users - Stop playback when switching songs or clicking New Song - Expose midiObject from useMidi hook for notation access Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>006ab73 -
Initial commit - Mr Octopus piano tutorial app
Ewanf0a176a