This release brings two new features to Dissonance.
Acoustic Echo Cancellation
After many months of experimentation it's finally here! Acoustic Echo Cancellation (AEC) watches the audio coming out of the speakers and then removes that audio when it is recorded by the microphone a few milliseconds later. This prevents unbearable feedback loops, hearing your own voice sent back to you and even suppresses game sound effects from being transmitted.
At the moment AEC is experimental. Quality on desktop computers has generally been excellent but it can vary with a large number of factors such as microphone quality, speaker quality, size of the room and even the amount of soft furnishing nearby! On mobile phones AEC is significantly less well tested because we only have access to a limited number of devices to test with and so it's crucial that we get feedback - if you use AEC please contact us and tell us what does and does not work.
Flexible Encoding Settings
In previous version of Dissonance all clients in a session used the same audio encoding settings. With flexible encoding settings this is no longer required - each client transmits it's settings when it joins the session allowing you to choose the best settings for each platform.
There are two breaking changes in this version.
If you are implementing a completely custom network integration (using
ICommsNetwork) a new parameter has been added to two methods.
Initialize receives a
CodecSettings which indicates the codec settings being used locally. The
PlayerJoined event now emits a
CodecSettings which indicates the codec settings being used by the new remote player.
If you are bypassing Dissonance management of the voice playback
AudioSource by accessing
VoicePlayerState.Playback.AudioSource the return type of the
Playback property has changed from
VoicePlayback (which is tied specifically to Unity audio playback) to
IVoicePlayback which generalises playback. You can still access the Unity
- Experimental Acoustic Echo Cancellation (AEC). Automatically removes speaker sounds from the microphone input; preventing feedback loops, echoing voices and transmitting game sound effects.
- Each client may now use different encoding settings (quality, frame size, codec).
- Added timestamps to Dissonance log messages.
VoicePlayerState:Playbackproperty. Removing a hard dependency on the Unity playback system.
- Fixed clients (particularly HLAPI) getting stuck in connect/disconnect loops, causing them to never send or receive any voice packets.
- Fixed string hashing using
GetHashCodewhich is not stable between runtimes. Now using an FNV-1a hash for all string hashing.
GetSpeakingChannelsreturning all channels as if they were `Player` channels.
- Fixed buffered network packets potentially "leaking" from one session to the next when the comms network is shut down and restarted.
- Fixed a potential
NullReferenceExceptionin HLAPI integration if
- Fixed preprocessor thread waking up too frequently when there is no work to do. Significantly reducing CPU usage.
- Prevented the
Lost NN samples in the preprocessor (buffer full), injecting silence to compensatemessage appearing every frame when there are lost samples.