Trumpets A
Audio file–
Detected Key–
Detected BPM–
Global timbre (still allows per-chair micro-variants below).
Active cadenceEven
Active paceAndante
Open @ seconds (Strings, Winds, Brass, Perc)
0, 8, 16, 24
A Selected0
B Selected0
Chair
Variant
Detune
Ready.
Independent A+B → Arrange & Export CSV (self-contained)
Status
Load two ~1-minute songs.
SeatingEven spacing • Front strings, winds middle, brass back, perc rear • 32 chairs
How the 1-minute AI Symphony Orchestra works (HTML + Web Audio)
- Load Audio and (optionally) click Analyze 60s to auto-detect notes & tempo.
- Export CSV (
t,m,b) then load CSV into A and/or B panels. - Choose A (10–16) and B (6–16). Total stays 32, no overlap. Locks respected.
- Set Conductor/Key/Tempo/Quantize/Swing/Humanize/Reverb/Spread, plus Cadence & Pace.
- Use Per-Chair Variants (bright/warm etc.).
- Press Play for a 60s render; lights blink on sounding chairs. Export WAV to save audio.
- Need to start over? Use Clear buttons (Audio / A / B) or Reset for a full reset.
Trumpets B
French Horns A
French Horns B
Percussion A
Percussion B
Trombones/Tuba A
Trombones/Tuba B
Flutes/Picc. A
Flutes/Picc. B
Oboes A
Oboes B
Clarinets A
Clarinets B
Bassoons A
Bassoons B
Piano A
Piano B
Double Basses A
Double Basses B
Drums A
Drums B
Harp/Keys A
Harp/Keys B
1st Violins A
1st Violins B
2nd Violins A
2nd Violins B
Violas A
Violas B
Cellos A
Cellos B
Conductor
Conductor / Musicalize: Cinematic — lush
How the 32-Chair Symphony Works — Methods & Math (v1)
- Pitch & Bass Detection: autocorrelation + zero-crossing estimate → MIDI map.
- Key Detection: Krumhansl-Schmuckler profile correlation → best major/minor root.
- Tempo: onset deltas → median IBI → BPM normalized to 60–180.
- Quantize & Swing: snap to grid
q = round(t/grid)*grid, odd positions get swing offset. - Routing: pitch range + family opening bias (Strings→Winds→Brass→Perc) to seats.
- Scheduling: look-ahead event buffer streams notes to WebAudio buses.
- Timbre: SoundFont playback per seat → panned buses → hall reverb + compressor.
Key: argmax_r ⟨profile_r , histogram⟩
BPM: bpm = clamp( round( 60 / median(Δonset) ) × 2^k , 60..180 )
Quant: q(t) = round(t / grid) · grid; swing: if odd grid → q += s·grid/2
Assign: section = f(pitch, isBass, familyOpen_t)
This is an early HTML-only AI symphony. As the codebase grows, it will fuse analyzer, arranger, orchestration, and rendering into a single unified pass.