I’m still learning and may be totally off my mark, so I had a question here – isn’t “Play When Silent” versus removing the OneShot Interface just different, not wrong? It seems like they are doing two different things:
- Play When Silent states it prevents virtualization and will continue to use a voice until concurrency or channel limits/priority take over (in which case it will restart the sound the next time).
- The benefit here is when entering/exiting the attenuation range, the sound will usually pick up where it would be at had it been playing the whole time. This could be good for synchronization or longer ambient tracks.
- The OneShot interface seems to be almost like a marker that helps reinforce this is a sound that should be a one-shot and helps ensure it will eventually get cleaned up and not stuck/leaked. A non-OneShot sound, like when looping, needs to maintain some kind of reference so that it eventually can get stopped. I got that information from this post: Why does Metasound oneshot interface loop UE5.1? - #2 by Minus_Kelvin
- The benefit with the option of removing the optional OneShot interface is that you can keep the virtualization mode set to Restart, and the sound loop will just simply start playing from the beginning again when you re-enter attenuation range, which may be fine for some audio loops.
I’m not sure what kind of performance impact there is for maintaining multiple voices (Play When Silent). I’m assuming there is some impact, and so it becomes a balance of performance vs. any disruption should your sound loops be restarting versus continuous playback, which would be situational. Either way, I would think OneShot could be removed independent of Play When Silent vs Restart if this is some kind of ambient loop.
As one more resource for this, the MetaSounds Quick Start tutorial includes construction of a Wind sound and requests the OneShot Interface be removed as it isn’t necessary for ambience or music: MetaSounds Quick Start | Unreal Engine 5.5 Documentation | Epic Developer Community
I may be missing some nuance here! Please feel free to clarify anything I’ve misstated. Just trying to cobble together what I can find from posts and documentation in case anyone else stumbles upon this