Monorepo for Aesthetic.Computer aesthetic.computer

physmidi: fix brass lip-reed pitch (bore fundamental, not partial-locking) master

GM_WG_LIP brass (56 Trumpet, 57 Trombone, 58 Tuba, 59 Muted Tpt, 60 Fr Horn, 61 Brass Sec) locked onto random bore partials: most notes collapsed to pedal tones, some overshot +230c. Root cause: half-wave bore (bore_mult=2.0) + a quadratic lip valve whose squared term spawned harmonics the self-oscillating loop locked onto. Fix mirrors the bowed-string repair: drive the bore so its FUNDAMENTAL equals the requested pitch (bore_mult 2.0 -> 1.0, delay = SR/f0) and replace the quadratic valve with the rock-solid REED-branch topology -- a bounded pressure-controlled lip reflection that pumps energy in but cannot subdivide/multiply the loop period. Mouth pressure is scaled into the reed table's active region (the big brass breath_max was railing it to a DC value the DC-blocker ate). Lip-resonance biquad demoted to a low-gain brightness colour; a gentle cubic adds the flared-bell brass edge; per-instrument brightness rides wg_loop_damp + output LP/mute. Reuses idle GMVoice fields (wg_reed_offset/slope, wg_lip_gain) -- no header change. Pitch audit 56-61: all FAIL (+/-300c) -> all PASS (+1..+4c). Full sweep PASS 69 -> 75, the 7 remaining FAILs unchanged (organs/viola/synthbrass2/lead/bagpipe, not brass). 3.6M-sample sweep over 6 octaves: 0 non-finite, 0 over clamp, peak 1.15.


+72 -28
1 changed file