Whenever you call a function on the sound engine's API, you actually push a command into a queue. Even AK::SoundEngine::RenderAudio() simply pushes a message "process previous commands" into the queue. These commands are consumed and processed by another thread, the audio thread, which is synchronized with the audio driver.
You don't need to enclose any call to the sound engine into critical sections, because the commands are pushed internally into a thread-safe queue. However, the callback notifications are called by the consumer (audio) thread. Therefore, all objects shared by your game that you access there need to be protected with critical sections.