FMOD RecordStart takes a very long time

We have reproduced this issue outside of Unity, and have determined the slowest point is a >500ms blocking call into IAudioClient::Initialize, which we call into for the Winsonic and WASAPI output types.

As part of the Windows Audio API, I would expect Unity to be making the same calls as us- and I would expect any audio client on Windows to be doing the same thing for that matter.
I can see a few reports online about IAudioClient::Initialize blocking for a long time with some devices on Windows, but there’s not much in the way of answers. We are initializing in shared mode, which is known to incur higher latency than exclusive mode, so perhaps this is related.

As with any slow and unavoidable process, I think the best a workaround would be to start the slow process ahead of time. This may not be feasible for all users, but if you/they move the call to System.recordStart into a loading scene or during some idle time, you can then call System.playSound when the user needs it and begin playback instantly.
In the “record_enumeration” Core API example we show how you can separate your calls to System.recordStart and System.playSound, giving the impression of instant record/playback.

I have suggested to the Dev team that we move the input client’s IAudioClient::Initialize call ahead of time to account for this potentially slow process. Otherwise the only other option is to open a ticket with Meta to see if they have an explanation for their slow initialization time. Please let me know if you have any other questions.