Repository navigation
chore(juce): bump to JUCE 9.0.5 - #21
Conversation
…12 minimum JUCE 9.0.5 hardens ZIP/XML/JSON/ValueTree/OSC parsing and the PNG, GIF, WAV and AIFF readers, and fixes Direct2D presentation and WinMM MIDI issues. - Projucer 9.0.5 resave: version stamp, HarfBuzz 15 sources (stale duplicates dropped), default macOS deployment target 10.13 -> 12.0 (Xcode 27 refuses lower; the plugins keep their explicit 10.13). - MessageBoxOptions::withButton() now takes a result code: every button keeps the code it had under the old (index + 1) % N rule, so no handler changes meaning, and Cancel buttons get MessageBoxButtonRole::cancel. ChannelIdentityGate uses the button index as the code and drops toIndex(). - WfsLookAndFeel overrides createAlertWindowForOptions (createAlertWindow is gone), keeping Screen Rendering on alerts. - The four deprecated AlertWindow::showOkCancelBox calls move to showAsync. Verified on the Windows dev box: Debug + Release, WFSPluginsAll, offline-render cpu/effects/gpu bit-exact vs win-dev-nvidia baselines (only the known */stereo MISSING), spatcore-tests, spatcore minimal-app, and 8 drivers + WFS_TEST_CHANNEL_LIST self-test (973 PASS) on Release. midi_snapshot_check cannot run here: since the 2026-10-28 Windows updates WinMM sees no MIDI inputs (Windows MIDI Services), and the 9.0.4 build fails it identically. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…gicalBounds) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…PR #34) Changelog: the Unreleased sections combined; one spatcore pin line naming PR #33 and PR #34 (main after PR #34 contains PR #33). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Can you elaborate? Is this a bug you've run across? Or is it that the Virtual Device transport is disabled on the box due to the known issue where it hangs the service when the endpoint is closed (will be fixed in retail later this month). Pete |
|
Thanks Pete, and sorry, that line was my misreading. I've corrected it in the PR. Windows MIDI Services doesn't hide virtual ports from WinMM. What happened on 2 November: midiInGetNumDevs() returned 0 with a teVirtualMIDI port open. The next day a USB Behringer X-Touch didn't appear either, until a reboot. After the reboot, teVirtualMIDI ports show up in WinMM 0.2 to 0.6 s after they're created, through Midi2KSAggregateTransport. Our MIDI snapshot test passes 4 times in a row. So MidiSrv had most likely stopped picking up new endpoints. I haven't been able to reproduce that full state since. We don't use the Virtual Device transport: our test uses teVirtualMIDI 1.3.0.43 (loopMIDI's driver). All four transport plugins are Enabled = 1. One thing that does reproduce: about 1 in 6 closes of a teVirtualMIDI port (3 of 18 in one run) leave a stale endpoint, whatever the delay before the next port opens. WinMM keeps listing the closed port's name. Environment: Windows 11 26H2, build 26300.9818 (KB5127936 and KB5132402 installed 28 October). MidiSrv is manual start. There's nothing about it in the System or Application event logs. I can share the repro scripts, or capture a trace if you tell me which provider. |
|
Thanks @pob31
Can you share your repro code for that? Or, if you prefer to capture a trace, grab the latest tools from https://aka.ms/midireleases (Preview 13) and use the MIDI Troubleshooting and Repair app to capture a full repro trace with all options selected.
So if you run Thanks. Pete |
|
Thanks Pete. Here's the repro (below). It needs only Python 3 64-bit and teVirtualMIDI64.dll (installed by loopMIDI). On the latest run here it left 6 stale endpoints out of 24 closes; earlier runs gave 1 in 18 and 3 in 18. Your understanding is right, with one caveat: I haven't installed the Preview 13 tools yet, so this comes from pnputil /enum-interfaces rather than midiksinfo. While an endpoint is stale: all six of teVirtualMIDI's KS interfaces are Disabled (ROOT#MEDIA#0001#{65e8773e…}, {65e8773d…} and {6994ad04…}, each \tevmidi0 and \tevmidi1); I'll install Preview 13 and capture a trace with the MIDI Troubleshooting and Repair app (all options), plus the midiksinfo output, and post them here. tevm_stale_repro.py"""Stale MidiSrv endpoint after closing a teVirtualMIDI port.Needs Python 3 (64-bit) and teVirtualMIDI64.dll, which loopMIDI installs. usage: python tevm_stale_repro.py [cycles] (default 18) tevm = ctypes.WinDLL("teVirtualMIDI64.dll") RX_CB = ctypes.WINFUNCTYPE(None, ctypes.c_void_p, ctypes.POINTER(ctypes.c_ubyte), wt.DWORD, ctypes.c_void_p) class MIDIINCAPSW(ctypes.Structure): def winmm_inputs(): def wait_for(pred, timeout): def dump_state(): cycles = int(sys.argv[1]) if len(sys.argv) > 1 else 18 |
|
Captured with Preview 13 (Tools 0.99.96-preview.13), MIDI Troubleshooting and Repair with all options: MIDI Capture_20261104-215352.zip (78 MB, too big to attach here). Tell me where you'd like it. What's in it. The repro script ran from 21:52:09 to 21:53:35 local (UTC+1). The trace ran 21:51:50–21:54:41; it's a 2 GB ring trace, so the kept part should be the end. StaleRepro-1 was held open about a minute while I ran midiksinfo and midi enumerate, then closed cleanly. It looks timing-dependent. In alternating cycles: closing the port as soon as WinMM lists it: stale in 4 of 12; Two smaller observations: Once, with a port open, midi enumerate legacy listed it twice in each direction (WinMM ports 1+2 in, 2+3 out) against a single KS filter. It didn't happen again in 12 tries. |
|
Thanks. Copilot was able to reproduce that here based on your python scripts. It was fixed in August under Until then, keep each port open for about a second after it appears before closing it. Pete |
|
Great, thanks for chasing it down so fast, Pete. Good to know it's already fixed and rolling out. Until then we'll keep virtual test ports open a moment before closing them. Thanks again for the help with this one. |
JUCE 9.0.4 → 9.0.5, aimed at beta65. Draft until the Mac and Ubuntu NUC checks pass.
What changes
JUCE_PROJUCER_VERSION0x90005, HarfBuzz 15 file lists, macOS deployment target 10.13 → 12.0 (the new Projucer default; Xcode 27 refuses anything lower). The DAW plugins stay at 10.13.withButtonnow has an explicit result code (the codes the buttons had before, so no handler changes meaning). Cancel buttons getMessageBoxButtonRole::cancel. The deprecatedshowOkCancelBoxcalls move toshowAsync.WfsLookAndFeeloverridescreateAlertWindowForOptions.Verified on the Windows dev box
Debug + Release + WFSPluginsAll build clean. offline-render cpu/effects/gpu: 0 mismatches. spatcore-tests pass. Control-replay drivers pass (session_roundtrip, osc_replay, mcp_replay, oscquery_echo, fade_ramp, remote_tablet_mock, tracking, network_threads). Channel-list self-test: 973 PASS.
midi_snapshot_checkfailed every note-recall check, and the 9.0.4 build failed it the same way: WinMM listed no MIDI inputs at all, even with the test's teVirtualMIDI port open.Corrected 2026-11-04: this line first said Windows MIDI Services hides virtual MIDI ports from WinMM. That was wrong. After a reboot, the same Windows build lists teVirtualMIDI ports in WinMM about 0.3 s after they are created, through the service's KS aggregate transport. The MIDI service had most likely stopped picking up new devices: a USB Behringer X-Touch didn't appear either until the reboot. So the failure came from the box's MIDI service, not from JUCE 9.0.5.
Still to check
🤖 Generated with Claude Code