Is there any way to remove this latency? I have a portal-style system, where sound can be sent from its source directly to a “sound portal” near the player’s driver seat in a vehicle. This is so that I can hear a sound out in the world, but when I open a window, the sound is sent directly through this portal and I hear it more clearly at the position of the window.
The problem is that I hear it now partly from its location in the world (let’s say it’s slighty in front of and to the left of your car), and partly through the open window on my right. The latency causes phasing issues, which is especially noticeable with broadband or noisy sounds, like car engines or windy ambiences. The same sound is heard from outside and from the my right, and it doesn’t sound good. I add processing such as a HPF to the outside sound, but this does not completely solve the problem.
We could avoid this by turning down the sound in its world position while turning up its transmitted sound. This isn’t really a solution for us, as you would lose any sense of spatialisation in the world and only hear a sound from the window’s position. It also would cause problems if there is more than one window.
This has also caused a problem in another project where an ambience is played as a 2d sound while out in the world, and is also thrown to location in the world via a transceiver so you can hear the outdoor ambience from the doorway while in a building. The two sounds blend in and out as you enter and exit the building, but the transmitted sound has latency, therefore causing horrible phasing issues. If it were possible to disable this latency, it seems it would completely remove this problem.
Firstly, the response in that forum post is not quite correct- the transceiver does not intentionally have a delay to prevent phasing issues (if anything this delay causes phasing issues, as you are experiencing here), the transceiver has a delay to overcome practical limitations of sending/receiving audio through a plugin.
There are two solutions I can think of to this problem:
The receiving transceivers will have no latency between each other, so using a second sound-portal to positioning the original sound, and having your original sound far away from the listener would eliminate this phasing. So currently it is this:
Perhaps try this:
Compensate for the receiver’s latency at the end of your transmitter’s signal chain. The default buffer size of 1024 samples will equate to ~21.3ms of latency, so an all-wet no-dry Delay effect with a delay time of 21.3ms will reduce this phasing as much as possible.
Option number 1 will have the best sound, but requires changes to your game. Option 2 is easier and more generally applicable, requiring no changes to your game, but will still have slight phasing due to small variations in mixer update time.
Thanks. The first option is actually what I ended up doing for the second project (with the ambience and doorways), and it didn’t prove too big a problem because it was just one ambience event that needed to be transmitted. In our current project, this is causing a problem with vehicles roaming the street and other things, so it’s much more complicated to deal with in this way.
The delay solution seems to work though. As we are forcing our DSP block buffer size to 128 in the FMOD preferences, I’ve set the delay to 2.67ms, from 128/48000 * 1000. Of course, if we change our sample rate or buffer size we’ll have to go through any instances of this delay and tweak them.
Thanks - the delay option seems to do the job for now.