protonscr

LEGO Harry Potter Collection

protonopen appid 2950340Game compatibility - Unofficial
ValveSoftware/Proton#10259 · opened 2026-10-14 by ByCzech · updated 2026-10-14 · 0 comments · github · game page · search this game
BByCzech 2026-10-14 github

LEGO Harry Potter Collection (2950340) – Years 5–7 crashes in FAudioVoice_DisableEffect at sample rates above 48 kHz

System information

  • Game: LEGO Harry Potter Collection (Steam AppID 2950340)

  • Affected executable: harry2.exe (Years 5–7)

  • Proton: proton-11.0-2e-x86_64 (build 1791559474)

  • OS: Debian 13

  • Kernel: 7.2.6+deb13-amd64

  • Audio: PipeWire 1.6.9, PulseAudio compatibility layer

  • Default output: ALSA analog stereo (alsa_output.pci-0000_07_00.6.analog-stereo)

Symptoms

Years 1–4 works correctly, but Years 5–7 consistently crashes during startup, immediately after the Voldemort loading animation and before reaching the main menu.

The crash is directly dependent on the audio sample rate.

PipeWire sample rate | Result -- | -- 44,100 Hz | Works 48,000 Hz | Works 96,000 Hz | Crashes 192,000 Hz | Crashes

The issue was also observed on another Linux computer using a different Steam account, without existing game saves.

Connecting Bluetooth headphones (48 kHz) allows the game to start normally. The same result can be reproduced without changing audio devices, simply by forcing the PipeWire sample rate.

Steps to reproduce

  1. Select an audio output supporting 96/192 kHz.

  2. Set the PipeWire sample rate:

    pw-metadata -n settings 0 clock.force-rate 192000
  3. Verify the rate using pactl list short sinks.

  4. Launch Years 5–7 using:

    PROTON_LOG=1 WINEDEBUG=+xaudio2,+seh %command% HARRY2
  5. The game crashes before displaying its main menu.

  6. Change only the sample rate:

    pw-metadata -n settings 0 clock.force-rate 48000
  7. Relaunch the game. It now works normally.

The same failure occurs at 96 kHz. Both 44.1 and 48 kHz work.

Crash analysis

The exception occurs inside Proton's built-in XAudio2_8.dll, specifically in the FAudio implementation.

Unhandled exception: page fault on write access
to 0x0000000000000008

Backtrace:
=>0 xaudio2_8+0x9588
1 harry2+0x7b6f80
2 harry2+0x7aff6a
3 harry2+0x7b0d22
4 harry2+0x7b19c9
5 harry2+0x7aef99

Disassembling the exact DLL from Proton 11.0-2 identifies the function:

FAudioVoice_DisableEffect:
mov eax,edi
shl rax,0x4
add rax,QWORD PTR [rbx+0x50]
mov DWORD PTR [rax+0x8],0x0 ; CRASH

At the time of the exception:

RAX = 0
RDI = 0 (EffectIndex)

This corresponds to:

voice->effects.desc[EffectIndex].InitialState = 0;

The effect descriptor array is NULL when FAudioVoice_DisableEffect() attempts to modify effect index 0.

XAudio2 trace

The trace shows the following sequence at 192 kHz:

IXAudio2Impl_CreateSubmixVoice
Created submix voice: 00000001002AA420

CreateAudioReverb

XA2SUB_SetEffectChain 00000001002AA420
XAPOFX_LockForProcess

...

XA2SUB_DisableEffect 00000001002AA420, 0, 0x0

Both SetEffectChain() and DisableEffect() operate on the same submix voice.

Suspected root cause

The game creates a reverb effect and attaches it to a submix running at the device's sample rate.

The XAudio2 Reverb effect supports only 20–48 kHz, according to Microsoft's documentation:

https://learn.microsoft.com/en-us/windows/win32/api/xaudio2fx/nf-xaudio2fx-xaudio2createreverb

At 96/192 kHz, the reverb effect presumably rejects the format during LockForProcess(), causing SetEffectChain() to fail.

The game subsequently calls DisableEffect(0) on the same voice even though the effect chain was not installed.

FAudio then dereferences the NULL effect descriptor array.

The precise return value of SetEffectChain() has not yet been captured, so this explanation remains a strongly supported hypothesis rather than a fully verified call sequence.

Expected behavior

An unsupported effect format should not cause an access violation in FAudioVoice_DisableEffect().

Ideally, the game should initialize correctly regardless of the system output sample rate, using a supported processing rate for effects such as reverb.

At minimum, FAudio should handle calls to DisableEffect() without an installed effect chain safely.

Workaround

Force PipeWire to 48 kHz before launching the game:

pw-metadata -n settings 0 clock.force-rate 48000

Restore automatic rate selection afterward:

pw-metadata -n settings 0 clock.force-rate 0

No game files, save data, or Proton installation changes are necessary.

Related threads

Proton versions

Launch options

DLLs