Play() held mu then called SwitchDevice() which also tried to acquire mu, causing a deadlock. Replace with direct call to openDeviceLocked() which does not lock. Add regression test that verifies Play() returns an error (not deadlock) when called on an uninitialized mixer.