I’m having a weird issue where Logic Pro X doesn’t update latency compensation for a plugin during playback. For example, if I enable linear-phase filters while listening to the track I’m working on, the audio gets delayed due to the latency not being compensated by the DAW. As soon as I pause the playback and hit play again, the latency gets properly compensated. I tried set the latency async, as described here, but that didn’t change the behaviour. I haven’t encoutered this issue in any other DAW yet, so I’d be very curious to know what Logic is doing differently.
To my best knowledge, this is a limitation of Logic Pro X. It needs to stop playback to adjust for latency changes. Which is understandable. Only few hosts can do it and often it comes at the code of noise when adjusting.
If you just need small adjustments you can just report the max latency to the host and then do minor changes yourself with a delay.
In my experience, Logic does not call “prepareToPlay” when you start Logic and play immediately. So it affect many other initializations. What I do is call these initializations on the first timerCallback.
This indeed appears to be the case. However, I also had an issue where latency didn’t get reported on startup. To fix this, I basically just had to do the reporting via the message thread. For some reason, Logic doesn’t use prepareToPlay as other DAWs do, as @baKno mentioned. I used an APVTS listener for the latency reporting, but doing it inside a timerCallback should work just as well.