Physics is probably one of the best cases for an uncoupled update. You may want a fixed dt unlike other update steps, and most (if not all) operations will happen iteratively on physics-only data, which is a prime candidate for parallelism and cache thrash optimisations.
Also by coupling component types (rendering, audio, physics, script, etc) with their respective systems, we can clearly separate update steps for each.
I think physics component should response on collide event, then it can invoke audio component to play a effect/music.
I don’t agree with putting logic for triggering sounds in the physics component at all. Another component; a logic controller; script or otherwise, should subscribe to the physics component to perform a necessary response. Separation of concerns and all that jazz.