Placeholder-Software / Dissonance

Unity Voice Chat Asset
71 stars 5 forks source link

[Feature] Offline Recording Mode #182

Closed martindevans closed 2 years ago

martindevans commented 4 years ago

Some people have requested a way to use Dissonance even when offline, just as a local voice recorder (with better audio quality thanks to AEC/NS/AGC preprocessing).

Implementation note: Consider implementing this as a network session that pretends it's online but isn't actually. This should trick Dissonance into running the entire capture pipeline as normal.

Gustorvo commented 3 years ago

Could you please explain a little bit more in details here? How exactly do I "fool" the system and pretend it's online when it isn't by fact? Thank you!

martindevans commented 3 years ago

When Dissonance starts up it finds a behaviour implementing ICommsNetwork (Assets/Plugins/Dissonance/Core/Networking/ICommsNetwork.cs), this behaviour encapsulates all the interactions with the network and Dissonance runs in the way it demands - when the network is offline, Dissonance does nothing.

To get voice flowing you need a few things:

Once this is setup Dissonance will be recording audio and sending it to the network system (which can then throw the packets away). You can get access to this stream of raw audio with DissonanceComms.SubscribeToRecordedAudio.

martindevans commented 2 years ago

A long overdue update on this! See also issue #255

We're going to be releasing an "Offline Comms Network" which makes Dissonance thinks it's online, even though it's not connected. This makes the recording and playback pipelines to run and allows you to record audio from them.

We'll also be releasing a new base class for custom microphone subscribers, which handles capturing the data and buffering it. This will make implementing anything which processes the data (such as a recording system which writes to file) a lot simpler.

martindevans commented 2 years ago

Dissonance 8.2.0 is now live on the asset store with the new OfflineCommsNetwork included in the main package.