“ReplaceOutput 无法正常移除旧的输出设备”。在调用 AK::SoundEngine::ReplaceOutput() 时,若无法找到并移除与所提供 AkOutputDeviceID 匹配的设备(尽管最初调用成功),则将出现此问题。该问题的可能原因是,在将 AkOutputDeviceID 传给 AK::SoundEngine::ReplaceOutput() 以便移除设备时,同时针对该设备 ID 调用了 AK::SoundEngine::RemoveOutput()。这会导致新的输出丢失所有之前设置的听者,并且可能无法使用新的 Audio Device ShareSet 来更新主总线。
推荐的解决步骤:
使用 Debug 版本库,将调试程序连接至游戏,然后重现相同场景。
避免使用同一 AkOutputDeviceID 调用 AK::SoundEngine::RemoveOutput() 和 AK::SoundEngine::ReplaceOutput()。AK::SoundEngine::ReplaceOutput() 会从内部移除设备,因此没必要同时调用两个函数。
若有意同时调用两个函数,请更改 AK::SoundEngine::RemoveOutput() 或 AK::SoundEngine::ReplaceOutput() 使用的 AkOutputDeviceID,以免使用同一 AkOutputDeviceID 调用两个函数。比如,在可能的情况下,有时要设置单独的 Audio Device ShareSet,但并不希望两个或多个输出使用同一设备。