Search Unity

[Released] Dissonance: Unity Voice Chat

Discussion in 'Assets and Asset Store' started by Nyarlathothep, Oct 27, 2016.

  1. Nyarlathothep

    Nyarlathothep

    Joined:
    Jun 13, 2013
    Posts:
    398
    Ouch, definitely painful to change Unity versions for that!

    That does make things a lot simpler. Since it's windows only you should look into WASAPI to directly access the microphone.

    Another alternative may be to look into if the VR SDK you're using provides mic data. I know the Oculus SDK has a mic API, but I'm not sure about others.
     
  2. Nyarlathothep

    Nyarlathothep

    Joined:
    Jun 13, 2013
    Posts:
    398
    Dissonance 6.1.0 has been released on the asset store!

    This release includes a number of small fixes and features accumulated since the release of 6.0.2 nearly two months ago. Check out the full release notes here.

    Flexible Installation Directory
    The biggest change in 6.1.0 is the installation directory of Dissonance - you can now install the package anywhere in your project and Dissonance will find it's own resources. Previously you had to change the BasePath constant to point to Dissonance, this is no longer required.

    Early Metadata Decoding
    Dissonance makes available realtime metadata about which channels a person is speaking to you through (GetSpeakingChannels). This data is now decoded as soon as possible so that you can access it in the OnStartedSpeaking and OnStoppedSpeaking events.

    OSX Universal Binaries
    With Unity 2017.3 support for 32 bit OSX was removed from Unity (see release notes), this also changed requirements for native plugins (and broke Dissonance on OSX in 2017.3). We've updated our OSX plugins to full universal bundles and moved them into a new location to resolve this.

    Network Protocol Stability
    In previous versions of Dissonance there has been no guarantee of network protocol compatibility between versions, this could make it very inconvenient to upgrade to a new Dissonance version as doing so would require that all clients/servers upgrade at the same time. From 6.1.0 onwards we will be making changes to the network protocol in a backwards compatible way - any incompatible changes will result in a change of the major version number.
     
    Last edited: Mar 27, 2018
    jashan likes this.
  3. ruistola

    ruistola

    Joined:
    Dec 25, 2014
    Posts:
    3
    Hi,

    We're doing a networking implementation which is not quite p2p nor a typical Unity client-server- model. We have a server but it's just a central hub for distributing messages between clients, it's not a Unity instance (nor are we using UNET for the messaging). We do have both TCP as well as UDP channels in our solution.

    In our previous implementation we used Dissonance for VoIP when we still had a Unity-based server and our networking code was built on top of HLAPI. Now we have a new architecture in the works and that raises two key issues.

    1) Does Dissonance easily allow for such a custom networking implementation where we have only Unity clients, but messages are still routed via a centralised server which takes care of broadcasting the message? Making it a p2p networking scheme would result in a lot of redundant messages, so I don't consider that a viable solution. The only way to go would be a custom client-server- implementation, but with the Dissonance server piece missing or with a non-Unity stub implementation behaving like one. We do have the capability to run generic C# on our server, but we have no intention of running a full Unity instance there. Any advice?

    2) Timing; We have a VR interface in our app and it is critical that we get a good reconstruction of both gestures and voice. If, due to networking conditions, the timing of the playback of gestures ( VR device transforms ) becomes out of sync from the playback of voice, we need to detect and compensate for that. Is there any API within Dissonance we could use to sync avatar gestures with the voice playback?
     
    Nyarlathothep likes this.
  4. Nyarlathothep

    Nyarlathothep

    Joined:
    Jun 13, 2013
    Posts:
    398
    This is an interesting problem which a few people have run into recently, we've even had a few people porting the server over to other languages! Since you can run C# on the server I think there are two ways you can approach this.

    The lazy way is to run one of the peers in Dissonance "Host" mode - i.e. as both a client and a server. Your central server just routes messages to the host, and back out to peers. This has a number of drawbacks, the extra hop introduces more latency and more network traffic, the single host peer has a lot of extra traffic used and of course if the host leaves the session you need to start a new one. This isn't great but it may be a good first step just to get voice working in your system ASAP - all you need is a custom network integration to relay messages via your server.

    The best approach is to run the Dissonance server logic on your server. This requires extracting all of the server code out to a separate project, removing Unity dependencies (there aren't many) and then writing a custom network implementation which has your custom server code in the server project and your custom client code in the unity project. Purely by coincidence I have actually just done this for an upcoming new network integration which has a C#/non-Unity server instance - if you email me (martin@placeholder-software.co.uk) your invoice number I can send you a copy of that to use as reference.

    Edit: If you contact me about this it's the "Dark Rift 2" server source code you need to ask for.

    The main source of delay in the Dissonance pipeline is the jitter buffer, it deliberately delays playback to compensate for network conditions. I think it should be sufficient to watch the StartSpeaking/StopSpeaking events and start playback of the appropriate gestures at those points - essentially just making sure your delay is the same as Dissonance. This won't compensate for clock drift during playback (i.e. audio playback running at a different speed to gesture playback) but that shouldn't be a problem given the fairly short duration of a single uninterrupted speech session.

    If you want something more (to compensate for clock drift) what kind of API would you imagine? I can think of a couple of ideas:

    If you want to delay gestures until the voice is ready I guess you'd want something like the ability to inject a "sync point" message into a voice stream transmission (when a gesture is recorded), and then get a notification on the playback side when that sync point audio is played (we don't have an API for that, but you can probably do it by abusing something else we do have).

    If you want to delay voice until gestures are ready you'd have to add a delay into the playback pipeline. The jitter buffer already exists to delay audio before playback (usually by a timespan chosen by Dissonance) but I could give you some pointers on hacking that to force your own delay.
     
    Last edited: Feb 6, 2020
  5. ruistola

    ruistola

    Joined:
    Dec 25, 2014
    Posts:
    3
    Thanks! I'll continue in e-mail regarding the "standalone server".

    Regarding timing, I think it makes sense to delay gestures to match the voice. The API I would imagine would just be something like querying for Dissonance.PlaybackTime("clientX") on some agreed upon Unity clock such as dspTime.

    This way, we could stay tightly synchronised with the voice even with the lag compensation techniques you use such as speeding up the playback etc. We would just on every Update() query for "what client A time is Dissonance now playing back here on client B" and lerp the gestures accordingly.

    I think this might be useful for other users too, not just us. Yes, we could modify the API but I'd rather not, since that would put the burden on us to merge those changes as Dissonance gets updated.
     
    Nyarlathothep likes this.
  6. Nyarlathothep

    Nyarlathothep

    Joined:
    Jun 13, 2013
    Posts:
    398
    You should be able to dig that out of the playback system with something like this:

    Code (CSharp):
    1. DissonanceComms comms; //Find dissonance comms
    2. var player = comms.FindPlayer("Player Name");
    3. var playback = ((MonoBehaviour)player.Playback).GetComponent<SamplePlaybackComponent>();
    4.  
    5. //This gets the exact amount of audio which has played in this session. Including changes due to time stretching and compression for audio sync.
    6. Console.WriteLine(playback.PlaybackPosition);
    It's a bit ugly, sorry about that! I might have a look at adding a slightly nicer way to access this for a future release - I can probably add a property on to the object returned by
    FindPlayer
    for that.

    All you need then is to start gesture playback when the associated speech session starts which can be done with the Start/Stop speaking events.
     
  7. ruistola

    ruistola

    Joined:
    Dec 25, 2014
    Posts:
    3
    That's perfect for now, thanks!
     
    Nyarlathothep likes this.
  8. Nyarlathothep

    Nyarlathothep

    Joined:
    Jun 13, 2013
    Posts:
    398
    Dissonance 6.2.0 has been released on the asset store!
    This release includes a number of fixes and features accumulated since the release of 6.1.0 as well as a new network integration.

    DarkRift 2 Networking Support
    We've added support using the Dark Rift 2 Networking system as a network backend for Dissonance. Dark Rift 2 is a highly optimised networking system which makes it ideal for transmitting low latency voice data.

    Improved Bad Network Voice Quality
    We've added support for using Opus Forward Error Correction which can almost perfectly conceal some network packet loss by using a small amount of extra bandwidth. This has a surprisingly large impact on the quality of conversation over a slightly bad connection (e.g. mobile data).

    We've also tweaked the dynamic playback adjustment system to handle larger errors in synchronisation caused by bad network conditions. It'll now act faster to prevent small amounts of de-synchronisation, and will work much harder than before to handle a large desync.
     
    Last edited: Apr 30, 2018
    JoeStrout and Jamster like this.
  9. JoeStrout

    JoeStrout

    Joined:
    Jan 14, 2011
    Posts:
    9,859
    I just bought Dissonance yesterday, and so far I'm pretty impressed. It was very easy to set up (we're using the UNET low-level running on a dedicated Unity app in a data center). For most players it worked fine out of the box, though the quality varied from crystal-clear to unintelligible over the course of a 10-minute test.

    However, for a couple of players, their mic was not picked up at all. Nothing they said produced any sound on the other end, nor did their VoicePlayerState.Amplitude vary locally (we use this to animate a "speaking" indicator on their avatar).

    Here's a log file from one of these players:

    Initialize engine version: 2018.1.0f2 (d4d99f31acba)
    GfxDevice: creating device client; threaded=1
    Direct3D:
    Version: Direct3D 11.0 [level 11.0]
    Renderer: NVIDIA Quadro K1100M (ID=0xff6)
    Vendor: (null)
    VRAM: 2020 MB
    Driver: 23.21.13.8816
    Begin MonoManager ReloadAssembly
    - Completed reload, in 23.615 seconds
    <RI> Initializing input.

    <RI> Input initialized.

    <RI> Initialized touch support.

    UnloadTime: 2.389651 ms
    Setting up 4 worker threads for Enlighten.
    Thread -> id: 3bdc -> priority: 1
    Thread -> id: 4df0 -> priority: 1
    Thread -> id: 3934 -> priority: 1
    Thread -> id: 18d4 -> priority: 1
    Connecting...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    Connecting to voice server at 85.10.242.58 as player Velocitist
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    Connected
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:Core] (13:21:30.150) DissonanceComms: Loading default playback prefab
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:Core] (13:21:30.789) DissonanceComms: Starting Dissonance Voice Comms
    - Network: [DissonanceSetup (Dissonance.Integrations.UNet_LLAPI.UNetCommsNetwork)]
    - Quality Settings: [Quality: Medium, FrameSize: Medium, FEC: True, DenoiseAmount: High, VoiceDuckLevel: 0.75]
    - Codec: [Codec: Opus, FrameSize: 1920, SampleRate: 48kHz]
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    No avatar found for Velocitist
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:Recording] (13:21:30.850) CapturePipelineManager: Detected a frame skip, forcing capture pipeline reset
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:Recording] (13:21:31.065) BasicMicrophoneCapture: Began mic capture (SampleRate:48000Hz, FrameSize:960, Buffer Limit:2^13, Latency:20ms, Device:'')
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:Core] (13:21:31.111) VoiceBroadcastTrigger: Recalculating token activation: 0 tokens, activated: True
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:Core] (13:21:31.111) VoiceReceiptTrigger: Recalculating token activation: 0 tokens, activated: True
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    Instantiated new avatar for id -1444627928
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:Network] (13:21:31.535) ConnectionNegotiator`1: Received handshake response from server, joined session '1978996212'
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:21:33.000) SpeechSession: Detected oversized buffer before playback started. Buffered:240ms Expected:99ms. Discarding 141ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:21:52.729) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:50ms. Discarding 70ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:21:54.429) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:52ms. Discarding 68ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:21:55.129) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:51ms. Discarding 69ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:21:55.661) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:51ms. Discarding 69ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    Setting focus to chatInputField
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:22:01.976) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:50ms. Discarding 70ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:22:04.395) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:50ms. Discarding 70ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:22:05.397) SpeechSession: Detected oversized buffer before playback started. Buffered:160ms Expected:50ms. Discarding 110ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:22:09.931) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:50ms. Discarding 70ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:22:13.696) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:50ms. Discarding 70ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:22:14.730) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:50ms. Discarding 70ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:22:15.963) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:50ms. Discarding 70ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:22:19.064) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:50ms. Discarding 70ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    Setting focus to chatInputField
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:22:19.996) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:50ms. Discarding 70ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:22:21.730) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:50ms. Discarding 70ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:22:23.297) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:50ms. Discarding 70ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:22:23.930) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:50ms. Discarding 70ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:22:37.773) SpeechSession: Detected oversized buffer before playback started. Buffered:400ms Expected:138ms. Discarding 262ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:Recording] (13:22:38.069) CapturePipelineManager: Detected a frame skip, forcing capture pipeline reset
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:Recording] (13:22:38.315) BasicMicrophoneCapture: Began mic capture (SampleRate:48000Hz, FrameSize:960, Buffer Limit:2^13, Latency:20ms, Device:'')
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:Recording] (13:22:38.894) BasicMicrophoneCapture: Began mic capture (SampleRate:48000Hz, FrameSize:960, Buffer Limit:2^13, Latency:20ms, Device:'')
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:22:51.533) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:50ms. Discarding 70ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:22:55.634) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:50ms. Discarding 70ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:23:02.316) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:50ms. Discarding 70ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    Setting focus to chatInputField
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:23:07.150) SpeechSession: Detected oversized buffer before playback started. Buffered:280ms Expected:115ms. Discarding 165ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:Recording] (13:23:23.343) CapturePipelineManager: Detected a frame skip, forcing capture pipeline reset
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:Recording] (13:23:23.482) BasicMicrophoneCapture: Began mic capture (SampleRate:48000Hz, FrameSize:960, Buffer Limit:2^13, Latency:20ms, Device:'')
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:23:23.638) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:50ms. Discarding 70ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:23:32.802) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:50ms. Discarding 70ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    Setting focus to chatInputField
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:23:34.667) SpeechSession: Detected oversized buffer before playback started. Buffered:160ms Expected:50ms. Discarding 110ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:23:35.868) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:51ms. Discarding 69ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:23:36.802) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:52ms. Discarding 68ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:23:45.184) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:50ms. Discarding 70ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:23:45.452) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:50ms. Discarding 70ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:23:50.103) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:53ms. Discarding 67ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:23:54.953) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:50ms. Discarding 70ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:23:57.353) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:50ms. Discarding 70ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:24:05.686) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:54ms. Discarding 66ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:24:17.970) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:50ms. Discarding 70ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:24:24.525) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:50ms. Discarding 70ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:24:26.122) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:50ms. Discarding 70ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:24:37.155) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:50ms. Discarding 70ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:24:38.923) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:50ms. Discarding 70ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:playback] (13:24:46.856) SpeechSession: Detected oversized buffer before playback started. Buffered:120ms Expected:50ms. Discarding 70ms of audio...
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    Setting focus to chatInputField
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    [Dissonance:Network] (13:24:53.779) UNetClient: Disconnected
    (Filename: C:\buildslave\unity\build\Runtime/Export/Debug.bindings.h Line: 43)

    Are there any clues here as to what might be going wrong for this user? (If it matters, he's on Windows.)

    Thanks,
    - Joe
     
    Nyarlathothep likes this.
  10. Nyarlathothep

    Nyarlathothep

    Joined:
    Jun 13, 2013
    Posts:
    398
    Hi Joe,

    It should always be crystal clear unless there are issues with networking/audio devices/performance etc!

    This log is showing two distinct issues:

    - Detected a frame skip, forcing capture pipeline reset

    This indicates that Dissonance detected a single frame which took a very long time (150ms+). This kind of time skip can cause synchronisation issues with audio capture and so when this happens Dissonance resets the audio capture system. This happening once or twice during setup is normal (loading large resources can cause a few frame hangs), but you have it quite a few times throughout the session.

    - Detected oversized buffer before playback started. Buffered:160ms Expected:50ms. Discarding 110ms of audio...

    This is a problem at the opposite end of the pipeline (playback, rather than capture) but possibly indicates the same problem. The buffer builds up audio received from remote players (deliberately delaying playback) and every frame it checks if the buffer is large enough and if it is it starts playback. So in this example you can see there must have been approximately a 110 millisecond skip in time from one frame to the next.

    So both of these things are related to bad performance. Do you have low framerates in your application which could explain this?

    Would it be possible for you to try compiling one of the Dissonance demo scenes into a standalone application and trying it with the same machines? This will rule out potential audio device incompatibility problems.
     
  11. JoeStrout

    JoeStrout

    Joined:
    Jan 14, 2011
    Posts:
    9,859
    I haven't yet managed to get ahold of the same tester that was having the no-audio issue, but I've done more testing, using the UNET low-level demo scene. And we're still getting very inconsistent results. It seems to depend on the order in which we connect, at least sometimes.

    Just now I did a test where I launched and connected to the server first (on my Mac). My tester then launched and connected from his Windows box. I could hear him, but he couldn't hear me. Then I quit, relaunched, and reconnected. Now he could hear me, but I couldn't hear him. Both of us saw both the local player and the other player ID in the demo client. When he spoke he saw "(Speaking)" next to local player on his end, but I never saw "(Speaking)" next to his ID on my end.

    This is all going through a server running on a Linux box as a headless Unity app, that opens as a dedicated server. (I couldn't get a clear idea what the difference is between "server" and "dedicated server" from the docs, so maybe this is the wrong thing to do.)

    Any idea how to debug this? (Feel free to PM me if you want to take this to private chat, and I can give you the IP address of the server in case you can tell anything by poking at it.)
     
    Nyarlathothep likes this.
  12. Nyarlathothep

    Nyarlathothep

    Joined:
    Jun 13, 2013
    Posts:
    398
    A server is a mixed server and client - so it hosts a Dissonance session as well as runs local audio capture and playback pipelines. A dedicated server doesn't have anything local, it purely acts as a network host for a Dissonance session. So it sounds like you've chosen the right option there.

    The speaking indicator his end is an indication from his capture/transmission pipeline that he is (at least trying to) send voice. The speaking indicator on the receiving end is an indication that voice is being played for this player. Since this happened both ways around it seems unlikely that the problem is with the capture/playback systems and rather something is going wrong on the server side causing it to not forward packets.

    Would it be possible for you to send me logs from one or both of the clients? Preferably with the Dissonance diagnostic settings (Window > Dissonance > Diagnostic Settings) elevated to Debug. Could I also get a log from the server? This time with the diagnostic settings elevated to Trace for networking and Debug for all other categories. If you don't have time to elevate the settings and run another test just send me whatever logs you've already got :)

    That would be pretty handy actually - I can connect two clients from my machine up to your server and see if I can reproduce the problem.
     
  13. SobiaR

    SobiaR

    Joined:
    Jul 3, 2017
    Posts:
    3
    We are currently working on Multiplayer card games Using "UNITY" as a Tool, "C#" as a language , "UNET" as a working library and "Master Server Kit" for server. Now, we want to add the feature of voice chat in our game and we have looked "Dissonance Voice Chat" package on asset store. I just wanted to ask, "Is "Dissonance Voice Chat" is compatible with "Master Server Kit" or not"? If it does than i need some guidance to implement it. Thanks in advance
     
    Nyarlathothep likes this.
  14. Nyarlathothep

    Nyarlathothep

    Joined:
    Jun 13, 2013
    Posts:
    398
    I haven't used Master Server Kit so I can't say for certain. Master Server Kit advertises "Compatible with games using UNET, including games that use the Network Manager component.", this is how the Dissonance HLAPI integration runs so it should work.

    Try establishing your session (using master server kit) and then loading Dissonance into your "in game" scene (i.e. after the network session has been established) with the HLAPI integration. When testing keep an eye on the "HLAPI Comms Network" component to see what the state is - if it shows "degraged" that means it cannot establish a connection and there must be some incompatibility at the network layer.
     
  15. SobiaR

    SobiaR

    Joined:
    Jul 3, 2017
    Posts:
    3
    So, what should i do for compatibility?
     
    Nyarlathothep likes this.
  16. Nyarlathothep

    Nyarlathothep

    Joined:
    Jun 13, 2013
    Posts:
    398
    Since Master Server Kit advertises "Compatible with games using UNET" Dissonance should just work. Try it out and if it doesn't work I'll see if I can help you out further and fix it :)
     
  17. SobiaR

    SobiaR

    Joined:
    Jul 3, 2017
    Posts:
    3
    ok, i will let you know if i need some help. and thanks ;)
     
    Nyarlathothep likes this.
  18. chucky-w146

    chucky-w146

    Joined:
    Apr 2, 2014
    Posts:
    2
    Hi, we've just released Dissonance v 6.1.0 in an update of our game, and we immediately started getting following exception from some Android devices:

     
    Nyarlathothep likes this.
  19. Nyarlathothep

    Nyarlathothep

    Joined:
    Jun 13, 2013
    Posts:
    398
    Which version of Dissonance did you upgrade from? The only thing I can think of that could affect you is that we dropped support for x86 Android devices in 6.1.0 (release notes) - this was due to a bug in Unity which prevents you from choosing the x86 platform (it always defaults back to ARM). You could try using the binaries from an earlier version if you can work out a way around that bug (e.g. upgrade to 2018.1 or stay below 2017.2).

    We've also had some problems in the past with Unity not properly importing the correct binary files when you upgrade the package. Could you check that the SHA256 hash of Assets\Plugins\Dissonance\Plugins\Android\libs\armeabi-v7a\libopus.so is E067D694E93DC09216514738005A9044D8167D01ED39BFB44B47105C1E164BE8 just to make sure that the installation has the correct files.
     
  20. chucky-w146

    chucky-w146

    Joined:
    Apr 2, 2014
    Posts:
    2
    Thank you for fast response. We did not upgrade from any version, we initially started using Dissonance 6.1.0 so the binaries should be correct (just checked the SHA256 hash). The dropped x86 platform could be the issue, we are still using Unity 5.6.3 so we did not encounter the problems you describe and we use x86 binaries where available. I would give it a try with older binaries, but is there any chance to get them? Afaik AssetStore only allows downloading current version...
    Thanks
     
    Nyarlathothep likes this.
  21. Nyarlathothep

    Nyarlathothep

    Joined:
    Jun 13, 2013
    Posts:
    398
    Email me (martin@placeholder-software.co.uk) your invoice number and I'll send you back an older version of the package :)
     
  22. ceitel

    ceitel

    Joined:
    Jan 3, 2017
    Posts:
    35
    @Nyarlathothep

    1) Is there a way to take pre-recorded audio from one player (let's just say an array of float values for ease) and pass it to all players via dissonance? I'm assuming I need to add a receipt trigger for a "global" room to all players and broadcast the audio over that channel as well, I'm just not sure how to pass the audio to dissonance since it seems to be looking for a microphone. Do I need a separate comms object aside from the local player's comms with it's own voice trigger for the global room? what object do I pass the array of audio data to?
    using UNet HLAPI

    2) On a similar note: I am currently capturing a players voice using a listener on the player's dissonance microphone during regular dissonance capture ie.
    Subscribe(IMicrophoneSubscriber subscriber)
    and saving it to a somewhat "raw" file. Is there a similar way to capture the audio after dissonance has worked its magic (cleaned up noise, applied volume normalization, etc).

    Thanks in advance!

    -Chad
     
    Nyarlathothep likes this.
  23. Nyarlathothep

    Nyarlathothep

    Joined:
    Jun 13, 2013
    Posts:
    398
    Dissonance actually includes the ability to swap out the microphone implementation being used (before startup). By default it's the BasicMicrophoneCapture system which just uses the Unity microphone system. I think the best way to inject your own audio would be to implement your own IMicrophoneCapture. Your custom one can wrap up BasicMicrophoneCapture and inject your recorded audio into the audio signal when necessary.

    It's not exposed in such an easily accessible API but the preprocessor implements the same subscribe/unsubscribe type API as the microphone capture object. If you dig into the _capture object on DissonanceComms you'll find the CapturePipelineManager which creates and destroys the audio capture pipeline as necessary. You should be able to modify that slightly to subscribe to the preprocessor and get the cleaned up audio.
     
    ceitel likes this.
  24. flyingaudio

    flyingaudio

    Joined:
    Dec 3, 2010
    Posts:
    98
    When including the VS 2015 Redist, does it require the user to do an additional install, or does it happen silently. This is for a Steam install?
     
  25. Nyarlathothep

    Nyarlathothep

    Joined:
    Jun 13, 2013
    Posts:
    398
  26. flyingaudio

    flyingaudio

    Joined:
    Dec 3, 2010
    Posts:
    98
    Thank you. They have a Visual C++ for 2015.
     
    Nyarlathothep likes this.
  27. JasonCG

    JasonCG

    Joined:
    Oct 6, 2012
    Posts:
    29
    I'm trying to implement something like a remote desktop application, and right now the focus is on Windows. Regardless it will only be for Unity standalone platforms (so perhaps Mac and Linux in the future, but not web/mobile).

    Is there a way to capture the desktop's audio and stream it with Dissonance? I'm just getting the microphone, but ideally I need to get either the microphone, the desktop itself (like capturing audio from a web browser, for example), or both simultaneously.

    Windows (at least on some hardware) has "Stereo Mix" or "What U Hear" but I haven't quite figured out how to get that working yet. Is that the (only?) way to capture the desktop's audio or is there a more direct method within Unity/Dissonance?

    Thanks!
     
  28. Nyarlathothep

    Nyarlathothep

    Joined:
    Jun 13, 2013
    Posts:
    398
    Dissonance supports replacing the input to the capture system with your own code (docs here). So you could easily write your own input system which grabs the desktop audio output and sends it as the input to Dissonance.

    Unfortunately I don't know of anything inside Unity which will help you with this. You'll probably have to do a per platform desktop audio capture system (working with whatever the native audio system is for that platform) and then have a little setup code which detects the platform and spawns the right one before Dissonance starts up.
     
    JasonCG likes this.
  29. Barkers-Crest

    Barkers-Crest

    Joined:
    Jun 19, 2013
    Posts:
    159
    Hi @Nyarlathothep I have 2 questions.

    1. For Unet HLAPI, do you know of a way to associate a game player's object to the VoicePlayerState? The goal is to show an icon when the player is chatting or has chat capability.

    2. On Oculus Rift, do you know how perform the install with the VS2015 redist?
     
    Nyarlathothep likes this.
  30. Nyarlathothep

    Nyarlathothep

    Joined:
    Jun 13, 2013
    Posts:
    398
    Hi Barkers-Crest,

    > associate a game player's object to the VoicePlayerState

    Check out Assets/Plugins/Dissonance/Demo/SpeakerIndicator.cs, it's the part of the demo scene which shows the pulsing blue blob over a player when they speak.

    The way this works is that we have setup position tracking on the players in the demo scenes, this creates an association between a gameobject in the scene and a dissonance player ID (i.e. that object represents that player). You can then get the IDissonancePlayer component from the gameobject, this has a PlayerId property which you can use in DissonanceComms.FindPlayer(id) to get the VoicePlayerState for the player.

    > how perform the install with the VS2015 redist

    Ideally you should only install the redist if it's not already installed, how exactly that works depends on what installer you're using.

    I'm afraid I don't know the details of the oculus store. I do know that on steam there's a section where you can choose common redists to include with your game and steam will handle installing them as necessary - maybe Oculus has something similar. Requiring a VS redist with a game isn't an unusual requirement so I expect if you ask on an Oculus developer forum someone will know the answer.
     
    Barkers-Crest likes this.
  31. Barkers-Crest

    Barkers-Crest

    Joined:
    Jun 19, 2013
    Posts:
    159
    The guidance on the first question was very helpful. Thanks, I have that working now.

    I'll follow up with the oculus forums for the second question. I do want to ask is the VS Redist 100% needed or is it only used with certain settings?

    Thanks again for your help and excellent plugin.
     
    Nyarlathothep likes this.
  32. Nyarlathothep

    Nyarlathothep

    Joined:
    Jun 13, 2013
    Posts:
    398
    It is 100% required, both the opus codec and the audio preprocessor need it.
     
    Barkers-Crest likes this.
  33. Barkers-Crest

    Barkers-Crest

    Joined:
    Jun 19, 2013
    Posts:
    159
    One last question(s) and I'll leave you alone. :)

    I was able to get the Unet HLAPI working relatively quickly. I haven't done the math yet, but I am assuming all voice data runs through the Unity relay servers and therefore will incur bandwidth charges.

    I experimented a bit with using the LLAPI extension hoping to have a solution that incurred minimal bandwidth and was not able to get a connection between host and client.

    So my questions are:

    1. Do you have any advice for those of us in HLAPI on how to best manage bandwidth?

    2. Are there better alternative approaches such as LLAPI worth pursuing instead in order to manage bandwidth?
     
  34. Nyarlathothep

    Nyarlathothep

    Joined:
    Jun 13, 2013
    Posts:
    398
    That's correct, unfortunately HLAPI doesn't support peer to peer so all voice has to be sent via the master peer. This means voice goes from
    me -> server -> you
    and presumably gets charged twice.

    You can see how much traffic Dissonance sends by opening up the HlapiCommsNetwork component and speaking, one of the traffic counter stats will tick up and will show a moving average of the data rate (exactly which counter depends on if you're the client or the server). I measure it at slightly under 3KiB/s using the default settings.

    This 3KiB/s is for a single speech stream (1 speaker & 1 listener). Dissonance sends the voice from client to server once and then sends that out from the server only to the people who are listening to that channel. Exactly how much bandwidth will be used depends on the usual number of listeners in your game, I'll use 4 listeners as an example. That means 5 streams (1 up, 4 down), so 15KiB/s.

    Using the advanced calculator on this page and tweaking the numbers until you get 15KiB/s shows a cost of $0.19/month for that 1 speaker and 4 listeners assuming they speak non-stop all month. Now of course people don't speak 100% of the time - so multiply that by whatever percentage of the time you expect someone to be speaking.

    That's odd, feel free to email me with more details on whatever problems you had if you want to try use LLAPI. The big problem with LLAPI is there's NAT punching so establishing a connection can be difficult and since there's no relay if it fails to connect you simply can't communicate.

    You can slightly reduce bandwidth by changing the audio quality settings (Window > Dissonance > Quality Settings):

    Frame Size: Large will sends packets less frequently - this reduces bandwidth used by packet overhead. However, this will increase latency as an entire packet of voice has to be filled before it is sent. (small/medium/large = 20/40/60ms).

    Audio Quality: Low reduces the target bitrate for Opus - obviously reducing the quality of voice. (Low/Medium/High = 10/17/24 kbit/s). Lowering this is probably the biggest save in bandwidth you can make. Check out the "Speech Samples" section on this page, select Opus 1.2 and then try out the different bitrates to see what they sound like.

    Forward Error Correction: Off FEC is a system for recovering from lost packets, having it on costs you very little when network conditions are good and costs about 10% more bandwidth when packets are being lost. It can almost completely conceal small amounts of packets loss. Of all the settings this is the one I would keep on if you can afford the bandwidth - the quality improvements when conditions are bad is incredible. Of course it depends on your game, if it's a high pace shooter then bad packet loss has already ruined the game by the time it adversely affects voice.

    The ideal situation is to directly send the voice data peer to peer without any relaying, that costs you nothing.

    LLAPI can do this if you can setup connections between all the peers but that can be a bit of a nightmare to setup due to NAT negotiation etc.

    The PUN network integration sends voice data P2P but it's still via PUN, so it only changes the cost from (1+Listeners) to (Listeners).

    The Steamworks integration sends data over steam networking which is free, so that's ideal if your game is on Steam.

    The ideal thing to do would probably be to pick a p2p networking system you're comfortable with (e.g. https://github.com/Phylliida/P2P.NET) and build a custom network integration for Dissonance. Start with the HLAPI integration and packets being routed via HLAPI, setup the P2P connections in the background and inform Dissonance when you establish a p2p connection. Dissonance will always try to send via p2p and will only fall back to HLAPI server relaying if no p2p connection is available. This way if you really can't establish a p2p connection with a player for some reason voice will continue working perfectly, and you'll only pay for the bandwidth to/from that player.
     
    Barkers-Crest likes this.
  35. JasonCG

    JasonCG

    Joined:
    Oct 6, 2012
    Posts:
    29
    tl;dr: What is a good way to record Dissonance voice activity for later playback in a completely new session?

    I'm adding a session recording mechanism to my application. When the recorder is active, I capture the current state and then all network activity (with timestamps) until the recording stops (so instantiated objects, movement, etc.). Then for playback I just play back this capture as a sort of virtual server instantiating objects, moving them during play, etc using the timestamps to determine which to "play" the recorded packet.

    Everything is working great except I'm not sure how to deal with Dissonance audio data.

    I have a custom network implementation built on top of LiteNetLib, so for Dissonance integration I overload BaseServer and BaseClient. Ultimately this just gives me an ArraySegment<byte> packet which I pass around between the server and clients (I use a single authoritative server arrangement). I wrap that ArraySegment so that I know what kind of data it is and route it accordingly within my application.

    The issue is on session playback I'm getting "Received a packet with incorrect session ID" and no audio, which I believe makes sense since Dissonance has its own session and connection management system. So when I'm trying to naively play back these raw packets from a previous session Dissonance doesn't know what to do with it.

    There may also be issues with loopback, as in I'm trying to record the local player as well as remote clients.

    (as a total hack I commented out the session ID comparison check in BaseServer.CheckSesionId just to see what would happen and got an exception "Insufficient space in packet reader to read byte[]" in ServerRelay.cs line 35).

    I'm not sure if this is really the best approach for recording Dissonance, so any suggestions would be appreciated. I'm thinking it might require either writing a lower-level network integration where I can more precisely control the full session state, or somehow grabbing the raw audio and playing it back separately.

    Thanks!
     
    Nyarlathothep likes this.
  36. Nyarlathothep

    Nyarlathothep

    Joined:
    Jun 13, 2013
    Posts:
    398
    The server generates a new session number, so if you send it a recorded stream of packets that will break in the way you describe. I guess you could try recording the session number and setting that before running the packet playback, that would probably work.

    However, for the playback of recorded packets do you really need to be running Dissonance server? The job of the server is mostly just to perform the handshake, sanity check the packet headers (session ID) and relay from peer to peer - none of that is needed during playback. If you simply play back the stream of recorded packets to the Dissonance client it should all work perfectly.
     
    JasonCG likes this.
  37. JasonCG

    JasonCG

    Joined:
    Oct 6, 2012
    Posts:
    29
    Thanks @Nyarlathothep that really got me moving in the right direction!

    Since I'm doing my playback testing in a client unconnected state I was forgetting to call BaseCommsNetwork.RunAsClient(). Another thing I was missing was I needed to capture all packets from the beginning of the session so that Dissonance initializes properly. For now I'm starting my recorder on a dummy client before that client connects to the server. This will work fine for now since this is really more of a proof of concept project, but eventually I think I may need to build my own ICommsNetwork implementation to have finer control over session management.

    It's working really well. I can playback the recording on a client directly, or I can playback the recorded packets on the server and forward them on to connected clients and they replay the audio correctly as well.

    Thanks again!
     
  38. Nyarlathothep

    Nyarlathothep

    Joined:
    Jun 13, 2013
    Posts:
    398
    I would very much recommend against that!
    BaseClient
    does a lot of work to make sure that voice streams are reassembled correctly, you'd have to reimplement that (or at least import all the internal bits of BaseClient and hook them up correctly). When building the network system we designed it so that everyone should be able to use BaseClient and ICommsNetwork was there just in case something really didn't fit our system at all - but so far no one who has contacted has had to use ICommsNetwork. we even managed to make a full VRMMO (Orbus) use the built in BaseClient :D

    I think sticking with a custom BaseClient implementation makes the most sense - all you need to do is make sure that you record the first couple of packets and it will do everything else for you :)
     
    JasonCG likes this.
  39. JasonCG

    JasonCG

    Joined:
    Oct 6, 2012
    Posts:
    29
    Ahh thanks for the heads up before I ended up deep in a place I don't want to be!

    It looks like it works! I was digging around trying to figure out how to determine which packets to record (looks like I'd need to identify MessageTypes.HandshakeResponse packets using PacketReader, but those are an internal enum and class), but found that when a connection is first made in BaseServer it sends a single MessageTypes.HandshakeResponse to the client which looks like it contains the session, client ID, rooms etc. So I'm now caching that first Dissonance packet received after connecting, then when the recorder is started I put that packet at the top before I start recording everything else. On playback this is the first Dissonance packet that gets played and it seems to reestablish the session (well, pseudo-reestablish since it's not really a real session at this point).

    I was worried about an edge case: what about clients that connect/disconnect after the current client (the one that will record) initially connects to the server and establishes a Dissonance session, but before recording starts? My testing so far indicates this isn't an issue.

    The last piece of the puzzle was recording outbound audio. The outbound voice packets are wrapped in a MessageTypes.ServerRelayUnreliable message, which can't be played back by clients. But I found overriding BaseClient.SendUnreliableP2P and recording the packet there was enough to get the outbound audio since that is called before its wrapped for relay.

    There are a couple of rough edges at the moment but in general everything is working.
     
    Nyarlathothep likes this.
  40. Nyarlathothep

    Nyarlathothep

    Joined:
    Jun 13, 2013
    Posts:
    398
    Ah I think I had misunderstood slightly. I assumed that the recording was always running so you would capture all packets you ever send and play them back later, in which case you would simply need to make sure you play back all packets in the correct order/timing and it will all work. If you want to delay the start of the recording it's a little more complex.

    The edge case you suggest will become a problem. I think if a sequence like this happens:
    1. Alice connects (at this point you record the handshake packet)
    2. Bob connects
    3. Alice starts recording (record all packets from here on)
    Then Bob won't be properly in the session when you play back the recording. This is because when Bob joins the server his full ClientState is sent out in a packet, which you haven't caught in the recording. I'm not sure precisely what this would do, I would guess it would throw away all audio from Bob until he joins the session (which in this case will never happen).

    I think what you want to do is save every reliable message from the server and play those back in order (as fast as you want) up until the first voice packet then you play them back in realtime along with the voice packets. This will ensure that you catch all of the critical session management messages (they're always sent with reliable+ordered).
     
  41. Nyarlathothep

    Nyarlathothep

    Joined:
    Jun 13, 2013
    Posts:
    398
    Dissonance 6.2.4 has been released on the asset store!
    I totally forgot to update this thread for the last few releases so I'll roll all the changes into this one post. 6.2.1, 6.2.2, 6.2.3 and 6.2.4 have all been focused on stability - we've fixed a lot of issues raised by users and have worked hard to get these releases out quickly.

    Expanded Session Size
    The biggest improvement we've made is to the network handshake system. Previously Dissonance was limited to about 20 people in a single session, beyond this the handshake protocol couldn't handle all the data and a session would never be established. The network system now breaks the handshake up into one packet per user, so an unlimited number of people can be in a session (likely limited by the underlying network integration of course).

    This change is completely backwards and forwards compatible! A mix of Dissonance servers and clients can all interact in one session perfectly. If the server is upgraded to Dissonance 6.2.3 or greater you will benefit from the upgraded handshake protocol (even if no clients are upgraded).

    Features
    • Added a live readout to the VoiceBroadcastTrigger (faders section) showing the current attenuation applied to this fader.
    • Improved network handshake protocol to support arbitrarily large sessions.
    • Added
      DissonanceComms:ResetMicrophoneCapture
      method. This should never be needed in normal usage, however it can resolve issues caused by third party systems which try to take control of the microphone.
    Bugfixes
    • Fixed an issue causing speech to cut out mid sentence when using voice activation and a VoiceBroadcastTrigger component.
    • Fixed a data race in the preprocessor which could cause data structures to be left in an inconsistent state. Potentially causing issues when the microphone is reset.
    • Respecting the local
      DissonanceComms:Mute
      setting when ducking remote voice volume. Ducking will never be applied while the local player is muted.
    • Fixed how Forge and Forge Networking Remastered network integrations perform loopback. The previous system could cause buffer re-use bugs leading to very strange packet corruption errors.
    • Fixed "Oversize playback buffer" error triggering far too frequently.
    • Fixed "Oversize playback buffer" error triggering for a session because the previous session overran it's expected run time.
    • Fixed
      DissonanceComms:RemoteVoiceVolume
      throwing an out-of-range-exception if set to any value other than zero.
    • Properly implemented host migration for Photon Unity Networking.
    • Fixed desync correction (dynamic playback) not correctly recording how many samples of drift it has compensated for.
    • Fixed native audio plugins when used with a spatializer plugin on the hololens.
    • Removed all large allocation which were sometimes performed during error handling.
     
    Last edited: Aug 11, 2018
    TenCCBuilder likes this.
  42. Nyarlathothep

    Nyarlathothep

    Joined:
    Jun 13, 2013
    Posts:
    398
    Dissonance 6.2.5 has been released on the asset store!

    WebRTC Network

    This release includes an interesting new network integration with the WebRTC Network Asset. With this Dissonance can run a completely peer to peer session with no voice data passing through your game servers. Check out the WebRTC Network FAQ for more details on the network, or check out our quickstart guide.

    Features
    • Added PureP2P network (WebRTC Network).
    • Setup everything required to add assembly definitions to Dissonance if required (see docs).
    • Added
      VoicePlayerState:PacketLoss
      property which fetches the voice packet loss for a given player.
     
  43. UXeyeway

    UXeyeway

    Joined:
    Jan 22, 2018
    Posts:
    10
    Hello,

    We are prototyping with Dissonance an AR\VR Remote Collaboration demo with custom avatars.
    I'm having issues with integrating Fmod with the microphone audio stream.
    In particular it was difficult to find sample code for efficiently grabbing the incoming audio stream and stream it to Fmod with low latency.

    Any pointers would be welcome!
    Thanks,
    Lou H.
     
    Nyarlathothep likes this.
  44. Nyarlathothep

    Nyarlathothep

    Joined:
    Jun 13, 2013
    Posts:
    398
    Just to be clear you're trying to use FMOD to play back the audio? That's not something we officially support but you may be able to make it work by replacing a couple of components with FMOD ones. We've considered adding some kind of API and writing a guide for how to replace the playback systems with something custom before but we haven't done it because it's not something that gets requested very often.

    The components involved with voice playback are:

    - VoicePlayback (Assets/Plugins/Dissonance/Core/Audio/Playback/VoicePlayback.cs)
    - SamplePlaybackComponent (Assets/Plugins/Dissonance/Core/Audio/Playback/SamplePlaybackComponent.cs)

    VoicePlayback is responsible for managing a Unity AudioSource component (starting playback, stopping playback, setting amplitude/spatial blend/pitch etc). You'd need to replace that with an equivalent which does the same for whatever FMOD uses as an AudioSource replacement.

    SamplePlaybackComponent is responsible for reading the audio data and injecting it into the audio source. There's some extra complexity in here for desync compensation (discarding samples if we're really far behind). You'd need to replace this with whatever mechanism FMOD has for injecting sample data into it's AudioSource replacement.

    Feel free to email me (martin@placeholder-software.co.uk) if you make any progress on this and I'll be happy you help out :)
     
    Last edited: Oct 16, 2018
  45. fmelogno

    fmelogno

    Joined:
    Oct 2, 2016
    Posts:
    24
    Hello, does the WebRTC network option work with ios? I'm asking because the WebRTC Network asset says that work in windows, mac, android but not mention IOS. On the other hand, he has and other asset, which name is WebRTC Video Chat that work with IOS.
    Thanks.
     
    Nyarlathothep likes this.
  46. Nyarlathothep

    Nyarlathothep

    Joined:
    Jun 13, 2013
    Posts:
    398
    The basic asset doesn't work with iOS as far as I know, although I haven't tested that. I don't know if he's just gating iOS support into the paid version or if it's a techincal limitation. I'd suggest contacting the webRTC network author and asking him for some more details on platform support :)
     
  47. Nyarlathothep

    Nyarlathothep

    Joined:
    Jun 13, 2013
    Posts:
    398
    Dissonance 6.2.6 has been released on the asset store!

    PUN2

    The big new feature with this release is support for the new Photon Unity Networking version 2. Check out the latest release notes for the download link.

    Features

    • PUN2 Networking.
    • Allowed Audio Quality and Audio Frame Size to be changed any time (although the change will only take effect when you connect).
    • Added additional monitoring to detect terrible network conditions and to log out a warning message.
    Bugfixes
    • Fixed a bug which could cause all voice from a particular speaker to be lost until they stopped and then started talking again.
    • Updated Photon BOLT integration to work with the latest version of BOLT.
     
  48. Glader

    Glader

    Joined:
    Aug 19, 2013
    Posts:
    456
    After reviewing many options, I'm considering purchasing this for a project that needs voice chat in Unity3D. However, I don't use any of the supported networking solutions/libraries and the current networking only supports TCP. In an earlier post you recommended both TCP and UDP (or atleast the ability to send unreliable unordered messages). That makes sense, voice over UDP, but will this at least function as a demo over TCP?

    I don't have a ton of time to create this demo and would need to create my own standalone voice server over this custom networking. I assume there are defined packets/payloads I need to send, and that the other implementations should be enough of a reference to implement this?

    Networking doesn't scare me and I can eventually support (R)UDP. But my main concern is the immediate, and that I need a demo working over custom TCP for now within a week.
     
    Last edited: Dec 6, 2018
    Nyarlathothep likes this.
  49. Nyarlathothep

    Nyarlathothep

    Joined:
    Jun 13, 2013
    Posts:
    398
    Dissonance will work over TCP but it won't handle bad network conditions as well as it normally would. When a single packet is lost TCP will hold up all the other packets until that single packet has been resent, however because Dissonance is doing realtime playback the resent packet will probably be too late and all of the held up packets will count as lost.

    Implementing custom networking is fairly simple (docs here). You basically just have to implement send/receive methods and raise events when certain things happen (e.g. someone leaves the session). All the source code for the supported networks is available so that can be a great reference when implementing your own networking.
     
    Glader likes this.
  50. TheDeepVR

    TheDeepVR

    Joined:
    May 8, 2018
    Posts:
    22
    We are using DIssonance with UNET HLAPI and found that after the client has been disconnected from the server due to timeout and reconnect again, Dissonance starts bloat log with tons of warnings. Should we do something special when reconnecting?

    Code (CSharp):
    1. Log: connection {1} has been disconnected by timeout; address {::ffff:192.168.1.199:37778} time {1725938}, last rec time {1721784} rtt {88} timeout {4000}
    2. Attempt to send to not connected connection {1}
    3. UnityEngine.Networking.NetworkTransport:SendWrapper(Int32, Int32, Int32, Byte[], Int32, Byte&)
    4. UnityEngine.Networking.NetworkTransport:Send(Int32, Int32, Int32, Byte[], Int32, Byte&) (at C:\buildslave\unity\build\artifacts\generated\bindings_old\common\UNET\UNETworkingBindings.gen.cs:814)
    5. UnityEngine.Networking.NetworkConnection:TransportSend(Byte[], Int32, Int32, Byte&) (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkConnection.cs:586)
    6. UnityEngine.Networking.ChannelPacket:SendToTransport(NetworkConnection, Int32) (at C:\buildslave\unity\build\Extensions\Networking\Runtime\ChannelPacket.cs:43)
    7. UnityEngine.Networking.ChannelBuffer:SendInternalBuffer() (at C:\buildslave\unity\build\Extensions\Networking\Runtime\ChannelBuffer.cs:405)
    8. UnityEngine.Networking.ChannelBuffer:CheckInternalBuffer() (at C:\buildslave\unity\build\Extensions\Networking\Runtime\ChannelBuffer.cs:169)
    9. UnityEngine.Networking.NetworkConnection:FlushChannels() (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkConnection.cs:315)
    10. UnityEngine.Networking.NetworkClient:Update() (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkClient.cs:796)
    11. UnityEngine.Networking.NetworkClient:UpdateClients() (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkClient.cs:965)
    12. UnityEngine.Networking.NetworkIdentity:UNetStaticUpdate() (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkIdentity.cs:1088)
    13.  
    14. [C:\buildslave\unity\build\Runtime/Networking/UNETVirtualUserHost.cpp line 376]
    15. (Filename: C:/buildslave/unity/build/artifacts/generated/bindings_old/common/UNET/UNETworkingBindings.gen.cs Line: 814)
    16.  
    17. Failed to send internal buffer channel:2 bytesToSend:23
    18. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    19. UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    20. UnityEngine.Logger:Log(LogType, Object)
    21. UnityEngine.Debug:LogError(Object)
    22. UnityEngine.Networking.ChannelPacket:SendToTransport(NetworkConnection, Int32) (at C:\buildslave\unity\build\Extensions\Networking\Runtime\ChannelPacket.cs:51)
    23. UnityEngine.Networking.ChannelBuffer:SendInternalBuffer() (at C:\buildslave\unity\build\Extensions\Networking\Runtime\ChannelBuffer.cs:405)
    24. UnityEngine.Networking.ChannelBuffer:CheckInternalBuffer() (at C:\buildslave\unity\build\Extensions\Networking\Runtime\ChannelBuffer.cs:169)
    25. UnityEngine.Networking.NetworkConnection:FlushChannels() (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkConnection.cs:315)
    26. UnityEngine.Networking.NetworkClient:Update() (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkClient.cs:796)
    27. UnityEngine.Networking.NetworkClient:UpdateClients() (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkClient.cs:965)
    28. UnityEngine.Networking.NetworkIdentity:UNetStaticUpdate() (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkIdentity.cs:1088)
    29. (Filename: C:/buildslave/unity/build/Extensions/Networking/Runtime/ChannelPacket.cs Line: 51)
    30.  
    31. Send Error: WrongConnection channel:2 bytesToSend:23
    32. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    33. UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    34. UnityEngine.Logger:Log(LogType, Object)
    35. UnityEngine.Debug:LogError(Object)
    36. UnityEngine.Networking.ChannelPacket:SendToTransport(NetworkConnection, Int32) (at C:\buildslave\unity\build\Extensions\Networking\Runtime\ChannelPacket.cs:69)
    37. UnityEngine.Networking.ChannelBuffer:SendInternalBuffer() (at C:\buildslave\unity\build\Extensions\Networking\Runtime\ChannelBuffer.cs:405)
    38. UnityEngine.Networking.ChannelBuffer:CheckInternalBuffer() (at C:\buildslave\unity\build\Extensions\Networking\Runtime\ChannelBuffer.cs:169)
    39. UnityEngine.Networking.NetworkConnection:FlushChannels() (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkConnection.cs:315)
    40. UnityEngine.Networking.NetworkClient:Update() (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkClient.cs:796)
    41. UnityEngine.Networking.NetworkClient:UpdateClients() (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkClient.cs:965)
    42. UnityEngine.Networking.NetworkIdentity:UNetStaticUpdate() (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkIdentity.cs:1088)
    43. (Filename: C:/buildslave/unity/build/Extensions/Networking/Runtime/ChannelPacket.cs Line: 69)
    44.  
    45. Unloading 178 Unused Serialized files (Serialized files now loaded: 0)
    46. ClientDisconnected due to error: Timeout
    47. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    48. UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    49. UnityEngine.Logger:Log(LogType, Object)
    50. UnityEngine.Debug:LogError(Object)
    51. UnityEngine.Networking.NetworkManager:OnClientDisconnect(NetworkConnection) (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkManager.cs:1133)
    52. com.exyte.ver_game1.Sources.Multiplayer.CustomNetworkManager:OnClientDisconnect(NetworkConnection) (at Assets\Multiplayer\Sources\CustomNetworkManager.cs:137)
    53. UnityEngine.Networking.NetworkManager:OnClientDisconnectInternal(NetworkMessage) (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkManager.cs:963)
    54. UnityEngine.Networking.NetworkConnection:InvokeHandler(Int16, NetworkReader, Int32) (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkConnection.cs:219)
    55. UnityEngine.Networking.NetworkConnection:InvokeHandlerNoData(Int16) (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkConnection.cs:201)
    56. UnityEngine.Networking.NetworkClient:Update() (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkClient.cs:771)
    57. UnityEngine.Networking.NetworkClient:UpdateClients() (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkClient.cs:965)
    58. UnityEngine.Networking.NetworkIdentity:UNetStaticUpdate() (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkIdentity.cs:1088)
    59. (Filename: Assets/Multiplayer/Sources/CustomNetworkManager.cs Line: 137)
    60.  
    61. NetworkDiscovery set broadcast data to:NetworkManager:::ffff:192.168.1.199:37778
    62. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    63. UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    64. UnityEngine.Logger:Log(LogType, Object)
    65. UnityEngine.Debug:Log(Object)
    66. UnityEngine.Networking.NetworkDiscovery:Initialize() (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkDiscovery.cs:190)
    67. com.exyte.ver_game1.Sources.Multiplayer.CustomNetworkManager:RunAsClient() (at Assets\Multiplayer\Sources\CustomNetworkManager.cs:150)
    68. com.exyte.ver_game1.Sources.Multiplayer.CustomNetworkManager:OnClientDisconnect(NetworkConnection) (at Assets\Multiplayer\Sources\CustomNetworkManager.cs:140)
    69. UnityEngine.Networking.NetworkManager:OnClientDisconnectInternal(NetworkMessage) (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkManager.cs:963)
    70. UnityEngine.Networking.NetworkConnection:InvokeHandler(Int16, NetworkReader, Int32) (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkConnection.cs:219)
    71. UnityEngine.Networking.NetworkConnection:InvokeHandlerNoData(Int16) (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkConnection.cs:201)
    72. UnityEngine.Networking.NetworkClient:Update() (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkClient.cs:771)
    73. UnityEngine.Networking.NetworkClient:UpdateClients() (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkClient.cs:965)
    74. UnityEngine.Networking.NetworkIdentity:UNetStaticUpdate() (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkIdentity.cs:1088)
    75. (Filename: Assets/Multiplayer/Sources/CustomNetworkManager.cs Line: 150)
    76.  
    77. [Dissonance:Network] (16:29:58.887) HlapiClient: Disconnected
    78. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    79. UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    80. UnityEngine.Logger:Log(LogType, Object)
    81. UnityEngine.Debug:Log(Object)
    82. Dissonance.LogMessage:Log() (at Assets\Plugins\Dissonance\Core\Log.cs:60)
    83. Dissonance.Logs:SendLogMessage(String, LogLevel) (at Assets\Plugins\Dissonance\Core\Log.cs:95)
    84. Dissonance.Log:WriteLog(LogLevel, String) (at Assets\Plugins\Dissonance\Core\Log.cs:178)
    85. Dissonance.Log:Info(String) (at Assets\Plugins\Dissonance\Core\Log.cs:346)
    86. Dissonance.Networking.BaseClient`3:Disconnect() (at Assets\Plugins\Dissonance\Core\Networking\BaseClient.cs:154)
    87. Dissonance.Integrations.UNet_HLAPI.HlapiClient:Disconnect() (at Assets\Plugins\Dissonance\Integrations\UNet_HLAPI\HlapiClient.cs:53)
    88. Dissonance.Networking.BaseCommsNetwork`5:StopClient() (at Assets\Plugins\Dissonance\Core\Networking\BaseCommsNetwork.cs:459)
    89. Dissonance.Networking.Session:Exit() (at Assets\Plugins\Dissonance\Core\Networking\BaseCommsNetwork.cs:192)
    90. Dissonance.Networking.BaseCommsNetwork`5:ChangeState(IState) (at Assets\Plugins\Dissonance\Core\Networking\BaseCommsNetwork.cs:380)
    91. Dissonance.Networking.BaseCommsNetwork`5:LoadState() (at Assets\Plugins\Dissonance\Core\Networking\BaseCommsNetwork.cs:334)
    92. Dissonance.Networking.BaseCommsNetwork`5:Update() (at Assets\Plugins\Dissonance\Core\Networking\BaseCommsNetwork.cs:323)
    93. Dissonance.Integrations.UNet_HLAPI.HlapiCommsNetwork:Update() (at Assets\Plugins\Dissonance\Integrations\UNet_HLAPI\HlapiCommsNetwork.cs:91)
    94. (Filename: Assets/Plugins/Dissonance/Core/Log.cs Line: 60)
    95.  
    96. UnloadTime: 6.188551 ms
    97. [Dissonance:Core] (16:29:59.360) DissonanceComms: Starting Dissonance Voice Comms
    98. - Network: [DissonanceSetup (Dissonance.Integrations.UNet_HLAPI.HlapiCommsNetwork)]
    99. - Quality Settings: [Quality: Medium, FrameSize: Medium, FEC: True, DenoiseAmount: High, VoiceDuckLevel: 0.75]
    100. - Codec: [Codec: Opus, FrameSize: 1920, SampleRate: 48kHz]
    101. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    102. UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    103. UnityEngine.Logger:Log(LogType, Object)
    104. UnityEngine.Debug:Log(Object)
    105. Dissonance.LogMessage:Log() (at Assets\Plugins\Dissonance\Core\Log.cs:60)
    106. Dissonance.Logs:SendLogMessage(String, LogLevel) (at Assets\Plugins\Dissonance\Core\Log.cs:95)
    107. Dissonance.Log:WriteLog(LogLevel, String) (at Assets\Plugins\Dissonance\Core\Log.cs:178)
    108. Dissonance.Log:WriteLogFormat(LogLevel, String, ICommsNetwork, VoiceSettings, CodecSettingsLoader) (at Assets\Plugins\Dissonance\Core\Log.cs:205)
    109. Dissonance.Log:Info(String, ICommsNetwork, VoiceSettings, CodecSettingsLoader) (at Assets\Plugins\Dissonance\Core\Log.cs:364)
    110. Dissonance.DissonanceComms:Start() (at Assets\Plugins\Dissonance\DissonanceComms.cs:379)
    111. (Filename: Assets/Plugins/Dissonance/Core/Log.cs Line: 60)
    112.  
    113. System memory in use before: 1.12 GB.
    114. System memory in use after: 1.12 GB.
    115.  
    116. Unloading 1688 unused Assets to reduce memory usage. Loaded Objects now: 24077.
    117. Total: 25.190687 ms (FindLiveObjects: 2.731420 ms CreateObjectMapping: 1.897344 ms MarkObjects: 19.242655 ms  DeleteObjects: 1.305674 ms)
    118.  
    119. [Dissonance:Recording] (16:30:12.861) BasePreprocessingPipeline: Error: Unhandled exception killed audio preprocessor thread: Dissonance.DissonanceException: Error: Cannot associate preprocessor with Playback filter - one already exists! This is probably a bug in Dissonance, we're sorry! Please report the bug on the issue tracker "https://github.com/Placeholder-Software/Dissonance/issues". You could also seek help on the community at "http://placeholder-software.co.uk/dissonance/community" to get help for a temporary workaround. Error ID: D5862DD2-B44E-4605-8D1C-29DD2C72A70C
    120.  at Dissonance.Audio.Capture.WebRtcPreprocessingPipeline+WebRtcPreprocessor.SetFilterPreprocessor (IntPtr preprocessor) [0x0006b] in D:\dev\ver-game1\Assets\Plugins\Dissonance\Core\Audio\Capture\WebRtcPreprocessingPipeline.cs:331
    121.  at Dissonance.Audio.Capture.WebRtcPreprocessingPipeline+WebRtcPreprocessor.Reset () [0x00065] in D:\dev\ver-game1\Assets\Plugins\Dissonance\Core\Audio\Capture\WebRtcPreprocessingPipeline.cs:283
    122.  at Dissonance.Audio.Capture.WebRtcPreprocessingPipeline.ApplyReset () [0x00007] in D:\dev\ver-game1\Assets\Plugins\Dissonance\Core\Audio\Capture\WebRtcPreprocessingPipeline.cs:43
    123.  at Dissonance.Audio.Capture.BasePreprocessingPipeline.ThreadEntry () [0x00003] in D:\dev\ver-game1\Assets\Plugins\Dissonance\Core\Audio\Capture\BasePreprocessingPipeline.cs:206 ! This is probably a bug in Dissonance, we're sorry! Please report the bug on the issue tracker "https://github.com/Placeholder-Software/Dissonance/issues". You could also seek help on the community at "http://placeholder-software.co.uk/dissonance/community" to get help for a temporary workaround. Error ID: 02EB75C0-1E12-4109-BFD2-64645C14BD5F
    124. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    125. UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    126. UnityEngine.Logger:Log(LogType, Object)
    127. UnityEngine.Debug:LogError(Object)
    128. Dissonance.LogMessage:Log() (at Assets\Plugins\Dissonance\Core\Log.cs:66)
    129. Dissonance.Logs:WriteMultithreadedLogs() (at Assets\Plugins\Dissonance\Core\Log.cs:84)
    130. Dissonance.Editor.Windows.Startup:Update() (at Assets\Plugins\Dissonance\Editor\Windows\Startup.cs:35)
    131. UnityEditor.EditorApplication:Internal_CallUpdateFunctions() (at C:\buildslave\unity\build\Editor\Mono\EditorApplication.cs:191)
    132. (Filename: Assets/Plugins/Dissonance/Core/Log.cs Line: 66)
    133.  
    134. [Dissonance:Network] (16:30:12.925) ConnectionNegotiator`1: Received handshake response from server, joined session '419023497'
    135. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    136. UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    137. UnityEngine.Logger:Log(LogType, Object)
    138. UnityEngine.Debug:Log(Object)
    139. Dissonance.LogMessage:Log() (at Assets\Plugins\Dissonance\Core\Log.cs:60)
    140. Dissonance.Logs:SendLogMessage(String, LogLevel) (at Assets\Plugins\Dissonance\Core\Log.cs:95)
    141. Dissonance.Log:WriteLog(LogLevel, String) (at Assets\Plugins\Dissonance\Core\Log.cs:178)
    142. Dissonance.Log:WriteLogFormat(LogLevel, String, UInt32) (at Assets\Plugins\Dissonance\Core\Log.cs:187)
    143. Dissonance.Log:Info(String, UInt32) (at Assets\Plugins\Dissonance\Core\Log.cs:352)
    144. Dissonance.Networking.Client.ConnectionNegotiator`1:ReceiveHandshakeResponseHeader(PacketReader&) (at Assets\Plugins\Dissonance\Core\Networking\Client\ConnectionNegotiator.cs:57)
    145. Dissonance.Networking.BaseClient`3:ProcessReceivedPacket(ArraySegment`1) (at Assets\Plugins\Dissonance\Core\Networking\BaseClient.cs:282)
    146. Dissonance.Networking.BaseClient`3:NetworkReceivedPacket(ArraySegment`1) (at Assets\Plugins\Dissonance\Core\Networking\BaseClient.cs:247)
    147. Dissonance.Integrations.UNet_HLAPI.HlapiClient:OnMessageReceivedHandler(NetworkMessage) (at Assets\Plugins\Dissonance\Integrations\UNet_HLAPI\HlapiClient.cs:64)
    148. UnityEngine.Networking.NetworkConnection:HandleReader(NetworkReader, Int32, Int32) (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkConnection.cs:468)
    149. UnityEngine.Networking.NetworkConnection:HandleBytes(Byte[], Int32, Int32) (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkConnection.cs:424)
    150. UnityEngine.Networking.NetworkConnection:TransportReceive(Byte[], Int32, Int32) (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkConnection.cs:575)
    151. UnityEngine.Networking.NetworkClient:Update() (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkClient.cs:753)
    152. UnityEngine.Networking.NetworkClient:UpdateClients() (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkClient.cs:965)
    153. UnityEngine.Networking.NetworkIdentity:UNetStaticUpdate() (at C:\buildslave\unity\build\Extensions\Networking\Runtime\NetworkIdentity.cs:1088)
    154. (Filename: Assets/Plugins/Dissonance/Core/Log.cs Line: 60)
    155.  
    156. [Dissonance:Recording] (16:30:13.133) BasicMicrophoneCapture: Insufficient buffer space, requested 474240, clamped to 16383 (dropping samples)
    157. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    158. UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    159. UnityEngine.Logger:Log(LogType, Object)
    160. UnityEngine.Debug:LogWarning(Object)
    161. Dissonance.LogMessage:Log() (at Assets\Plugins\Dissonance\Core\Log.cs:63)
    162. Dissonance.Logs:SendLogMessage(String, LogLevel) (at Assets\Plugins\Dissonance\Core\Log.cs:95)
    163. Dissonance.Log:WriteLog(LogLevel, String) (at Assets\Plugins\Dissonance\Core\Log.cs:178)
    164. Dissonance.Log:WriteLogFormat(LogLevel, String, UInt32, UInt32) (at Assets\Plugins\Dissonance\Core\Log.cs:196)
    165. Dissonance.Log:Warn(String, UInt32, UInt32) (at Assets\Plugins\Dissonance\Core\Log.cs:396)
    166. Dissonance.Audio.Capture.BasicMicrophoneCapture:DrainMicSamples() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:231)
    167. Dissonance.Audio.Capture.BasicMicrophoneCapture:UpdateSubscribers() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:195)
    168. Dissonance.Audio.Capture.CapturePipelineManager:Update(Boolean, Single) (at Assets\Plugins\Dissonance\Core\Audio\Capture\CapturePipelineManager.cs:162)
    169. Dissonance.DissonanceComms:Update() (at Assets\Plugins\Dissonance\DissonanceComms.cs:589)
    170. (Filename: Assets/Plugins/Dissonance/Core/Log.cs Line: 63)
    171.  
    172. [Dissonance:Recording] (16:30:13.135) BasePreprocessingPipeline: Lost 480 samples in the preprocessor (buffer full), injecting silence to compensate
    173. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    174. UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    175. UnityEngine.Logger:Log(LogType, Object)
    176. UnityEngine.Debug:LogWarning(Object)
    177. Dissonance.LogMessage:Log() (at Assets\Plugins\Dissonance\Core\Log.cs:63)
    178. Dissonance.Logs:SendLogMessage(String, LogLevel) (at Assets\Plugins\Dissonance\Core\Log.cs:95)
    179. Dissonance.Log:WriteLog(LogLevel, String) (at Assets\Plugins\Dissonance\Core\Log.cs:178)
    180. Dissonance.Log:WriteLogFormat(LogLevel, String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:187)
    181. Dissonance.Log:Warn(String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:390)
    182. Dissonance.Audio.Capture.BasePreprocessingPipeline:Dissonance.Audio.Capture.IMicrophoneSubscriber.ReceiveMicrophoneData(ArraySegment`1, WaveFormat) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasePreprocessingPipeline.cs:185)
    183. Dissonance.Audio.Capture.BasicMicrophoneCapture:SendFrame() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:330)
    184. Dissonance.Audio.Capture.BasicMicrophoneCapture:ConsumeSamples(ArraySegment`1) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:288)
    185. Dissonance.Audio.Capture.BasicMicrophoneCapture:DrainMicSamples() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:260)
    186. Dissonance.Audio.Capture.BasicMicrophoneCapture:UpdateSubscribers() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:195)
    187. Dissonance.Audio.Capture.CapturePipelineManager:Update(Boolean, Single) (at Assets\Plugins\Dissonance\Core\Audio\Capture\CapturePipelineManager.cs:162)
    188. Dissonance.DissonanceComms:Update() (at Assets\Plugins\Dissonance\DissonanceComms.cs:589)
    189. (Filename: Assets/Plugins/Dissonance/Core/Log.cs Line: 63)
    190.  
    191. [Dissonance:Recording] (16:30:13.137) BasePreprocessingPipeline: Lost 960 samples in the preprocessor (buffer full), injecting silence to compensate
    192. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    193. UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    194. UnityEngine.Logger:Log(LogType, Object)
    195. UnityEngine.Debug:LogWarning(Object)
    196. Dissonance.LogMessage:Log() (at Assets\Plugins\Dissonance\Core\Log.cs:63)
    197. Dissonance.Logs:SendLogMessage(String, LogLevel) (at Assets\Plugins\Dissonance\Core\Log.cs:95)
    198. Dissonance.Log:WriteLog(LogLevel, String) (at Assets\Plugins\Dissonance\Core\Log.cs:178)
    199. Dissonance.Log:WriteLogFormat(LogLevel, String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:187)
    200. Dissonance.Log:Warn(String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:390)
    201. Dissonance.Audio.Capture.BasePreprocessingPipeline:Dissonance.Audio.Capture.IMicrophoneSubscriber.ReceiveMicrophoneData(ArraySegment`1, WaveFormat) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasePreprocessingPipeline.cs:185)
    202. Dissonance.Audio.Capture.BasicMicrophoneCapture:SendFrame() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:330)
    203. Dissonance.Audio.Capture.BasicMicrophoneCapture:ConsumeSamples(ArraySegment`1) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:288)
    204. Dissonance.Audio.Capture.BasicMicrophoneCapture:DrainMicSamples() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:260)
    205. Dissonance.Audio.Capture.BasicMicrophoneCapture:UpdateSubscribers() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:195)
    206. Dissonance.Audio.Capture.CapturePipelineManager:Update(Boolean, Single) (at Assets\Plugins\Dissonance\Core\Audio\Capture\CapturePipelineManager.cs:162)
    207. Dissonance.DissonanceComms:Update() (at Assets\Plugins\Dissonance\DissonanceComms.cs:589)
    208. (Filename: Assets/Plugins/Dissonance/Core/Log.cs Line: 63)
    209.  
    210. [Dissonance:Recording] (16:30:13.140) BasicMicrophoneCapture: Insufficient buffer space, requested 474240, clamped to 16383 (dropping samples)
    211. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    212. UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    213. UnityEngine.Logger:Log(LogType, Object)
    214. UnityEngine.Debug:LogWarning(Object)
    215. Dissonance.LogMessage:Log() (at Assets\Plugins\Dissonance\Core\Log.cs:63)
    216. Dissonance.Logs:SendLogMessage(String, LogLevel) (at Assets\Plugins\Dissonance\Core\Log.cs:95)
    217. Dissonance.Log:WriteLog(LogLevel, String) (at Assets\Plugins\Dissonance\Core\Log.cs:178)
    218. Dissonance.Log:WriteLogFormat(LogLevel, String, UInt32, UInt32) (at Assets\Plugins\Dissonance\Core\Log.cs:196)
    219. Dissonance.Log:Warn(String, UInt32, UInt32) (at Assets\Plugins\Dissonance\Core\Log.cs:396)
    220. Dissonance.Audio.Capture.BasicMicrophoneCapture:DrainMicSamples() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:231)
    221. Dissonance.Audio.Capture.BasicMicrophoneCapture:UpdateSubscribers() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:195)
    222. Dissonance.Audio.Capture.CapturePipelineManager:Update(Boolean, Single) (at Assets\Plugins\Dissonance\Core\Audio\Capture\CapturePipelineManager.cs:162)
    223. Dissonance.DissonanceComms:Update() (at Assets\Plugins\Dissonance\DissonanceComms.cs:589)
    224. (Filename: Assets/Plugins/Dissonance/Core/Log.cs Line: 63)
    225.  
    226. [Dissonance:Recording] (16:30:13.141) BasePreprocessingPipeline: Lost 960 samples in the preprocessor (buffer full), injecting silence to compensate
    227. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    228. UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    229. UnityEngine.Logger:Log(LogType, Object)
    230. UnityEngine.Debug:LogWarning(Object)
    231. Dissonance.LogMessage:Log() (at Assets\Plugins\Dissonance\Core\Log.cs:63)
    232. Dissonance.Logs:SendLogMessage(String, LogLevel) (at Assets\Plugins\Dissonance\Core\Log.cs:95)
    233. Dissonance.Log:WriteLog(LogLevel, String) (at Assets\Plugins\Dissonance\Core\Log.cs:178)
    234. Dissonance.Log:WriteLogFormat(LogLevel, String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:187)
    235. Dissonance.Log:Warn(String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:390)
    236. Dissonance.Audio.Capture.BasePreprocessingPipeline:Dissonance.Audio.Capture.IMicrophoneSubscriber.ReceiveMicrophoneData(ArraySegment`1, WaveFormat) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasePreprocessingPipeline.cs:185)
    237. Dissonance.Audio.Capture.BasicMicrophoneCapture:SendFrame() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:330)
    238. Dissonance.Audio.Capture.BasicMicrophoneCapture:ConsumeSamples(ArraySegment`1) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:288)
    239. Dissonance.Audio.Capture.BasicMicrophoneCapture:DrainMicSamples() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:260)
    240. Dissonance.Audio.Capture.BasicMicrophoneCapture:UpdateSubscribers() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:195)
    241. Dissonance.Audio.Capture.CapturePipelineManager:Update(Boolean, Single) (at Assets\Plugins\Dissonance\Core\Audio\Capture\CapturePipelineManager.cs:162)
    242. Dissonance.DissonanceComms:Update() (at Assets\Plugins\Dissonance\DissonanceComms.cs:589)
    243. (Filename: Assets/Plugins/Dissonance/Core/Log.cs Line: 63)
    244.  
    245. [Dissonance:Recording] (16:30:13.144) BasePreprocessingPipeline: Lost 960 samples in the preprocessor (buffer full), injecting silence to compensate
    246. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    247. UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    248. UnityEngine.Logger:Log(LogType, Object)
    249. UnityEngine.Debug:LogWarning(Object)
    250. Dissonance.LogMessage:Log() (at Assets\Plugins\Dissonance\Core\Log.cs:63)
    251. Dissonance.Logs:SendLogMessage(String, LogLevel) (at Assets\Plugins\Dissonance\Core\Log.cs:95)
    252. Dissonance.Log:WriteLog(LogLevel, String) (at Assets\Plugins\Dissonance\Core\Log.cs:178)
    253. Dissonance.Log:WriteLogFormat(LogLevel, String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:187)
    254. Dissonance.Log:Warn(String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:390)
    255. Dissonance.Audio.Capture.BasePreprocessingPipeline:Dissonance.Audio.Capture.IMicrophoneSubscriber.ReceiveMicrophoneData(ArraySegment`1, WaveFormat) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasePreprocessingPipeline.cs:185)
    256. Dissonance.Audio.Capture.BasicMicrophoneCapture:SendFrame() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:330)
    257. Dissonance.Audio.Capture.BasicMicrophoneCapture:ConsumeSamples(ArraySegment`1) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:288)
    258. Dissonance.Audio.Capture.BasicMicrophoneCapture:DrainMicSamples() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:260)
    259. Dissonance.Audio.Capture.BasicMicrophoneCapture:UpdateSubscribers() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:195)
    260. Dissonance.Audio.Capture.CapturePipelineManager:Update(Boolean, Single) (at Assets\Plugins\Dissonance\Core\Audio\Capture\CapturePipelineManager.cs:162)
    261. Dissonance.DissonanceComms:Update() (at Assets\Plugins\Dissonance\DissonanceComms.cs:589)
    262. (Filename: Assets/Plugins/Dissonance/Core/Log.cs Line: 63)
    263.  
    264. [Dissonance:Recording] (16:30:13.145) BasePreprocessingPipeline: Lost 960 samples in the preprocessor (buffer full), injecting silence to compensate
    265. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    266. UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    267. UnityEngine.Logger:Log(LogType, Object)
    268. UnityEngine.Debug:LogWarning(Object)
    269. Dissonance.LogMessage:Log() (at Assets\Plugins\Dissonance\Core\Log.cs:63)
    270. Dissonance.Logs:SendLogMessage(String, LogLevel) (at Assets\Plugins\Dissonance\Core\Log.cs:95)
    271. Dissonance.Log:WriteLog(LogLevel, String) (at Assets\Plugins\Dissonance\Core\Log.cs:178)
    272. Dissonance.Log:WriteLogFormat(LogLevel, String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:187)
    273. Dissonance.Log:Warn(String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:390)
    274. Dissonance.Audio.Capture.BasePreprocessingPipeline:Dissonance.Audio.Capture.IMicrophoneSubscriber.ReceiveMicrophoneData(ArraySegment`1, WaveFormat) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasePreprocessingPipeline.cs:185)
    275. Dissonance.Audio.Capture.BasicMicrophoneCapture:SendFrame() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:330)
    276. Dissonance.Audio.Capture.BasicMicrophoneCapture:ConsumeSamples(ArraySegment`1) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:288)
    277. Dissonance.Audio.Capture.BasicMicrophoneCapture:DrainMicSamples() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:260)
    278. Dissonance.Audio.Capture.BasicMicrophoneCapture:UpdateSubscribers() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:195)
    279. Dissonance.Audio.Capture.CapturePipelineManager:Update(Boolean, Single) (at Assets\Plugins\Dissonance\Core\Audio\Capture\CapturePipelineManager.cs:162)
    280. Dissonance.DissonanceComms:Update() (at Assets\Plugins\Dissonance\DissonanceComms.cs:589)
    281. (Filename: Assets/Plugins/Dissonance/Core/Log.cs Line: 63)
    282.  
    283. [Dissonance:Recording] (16:30:13.147) BasePreprocessingPipeline: Lost 960 samples in the preprocessor (buffer full), injecting silence to compensate
    284. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    285. UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    286. UnityEngine.Logger:Log(LogType, Object)
    287. UnityEngine.Debug:LogWarning(Object)
    288. Dissonance.LogMessage:Log() (at Assets\Plugins\Dissonance\Core\Log.cs:63)
    289. Dissonance.Logs:SendLogMessage(String, LogLevel) (at Assets\Plugins\Dissonance\Core\Log.cs:95)
    290. Dissonance.Log:WriteLog(LogLevel, String) (at Assets\Plugins\Dissonance\Core\Log.cs:178)
    291. Dissonance.Log:WriteLogFormat(LogLevel, String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:187)
    292. Dissonance.Log:Warn(String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:390)
    293. Dissonance.Audio.Capture.BasePreprocessingPipeline:Dissonance.Audio.Capture.IMicrophoneSubscriber.ReceiveMicrophoneData(ArraySegment`1, WaveFormat) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasePreprocessingPipeline.cs:185)
    294. Dissonance.Audio.Capture.BasicMicrophoneCapture:SendFrame() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:330)
    295. Dissonance.Audio.Capture.BasicMicrophoneCapture:ConsumeSamples(ArraySegment`1) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:288)
    296. Dissonance.Audio.Capture.BasicMicrophoneCapture:DrainMicSamples() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:260)
    297. Dissonance.Audio.Capture.BasicMicrophoneCapture:UpdateSubscribers() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:195)
    298. Dissonance.Audio.Capture.CapturePipelineManager:Update(Boolean, Single) (at Assets\Plugins\Dissonance\Core\Audio\Capture\CapturePipelineManager.cs:162)
    299. Dissonance.DissonanceComms:Update() (at Assets\Plugins\Dissonance\DissonanceComms.cs:589)
    300. (Filename: Assets/Plugins/Dissonance/Core/Log.cs Line: 63)
    301.  
    302. [Dissonance:Recording] (16:30:13.149) BasePreprocessingPipeline: Lost 960 samples in the preprocessor (buffer full), injecting silence to compensate
    303. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    304. UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    305. UnityEngine.Logger:Log(LogType, Object)
    306. UnityEngine.Debug:LogWarning(Object)
    307. Dissonance.LogMessage:Log() (at Assets\Plugins\Dissonance\Core\Log.cs:63)
    308. Dissonance.Logs:SendLogMessage(String, LogLevel) (at Assets\Plugins\Dissonance\Core\Log.cs:95)
    309. Dissonance.Log:WriteLog(LogLevel, String) (at Assets\Plugins\Dissonance\Core\Log.cs:178)
    310. Dissonance.Log:WriteLogFormat(LogLevel, String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:187)
    311. Dissonance.Log:Warn(String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:390)
    312. Dissonance.Audio.Capture.BasePreprocessingPipeline:Dissonance.Audio.Capture.IMicrophoneSubscriber.ReceiveMicrophoneData(ArraySegment`1, WaveFormat) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasePreprocessingPipeline.cs:185)
    313. Dissonance.Audio.Capture.BasicMicrophoneCapture:SendFrame() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:330)
    314. Dissonance.Audio.Capture.BasicMicrophoneCapture:ConsumeSamples(ArraySegment`1) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:288)
    315. Dissonance.Audio.Capture.BasicMicrophoneCapture:DrainMicSamples() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:260)
    316. Dissonance.Audio.Capture.BasicMicrophoneCapture:UpdateSubscribers() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:195)
    317. Dissonance.Audio.Capture.CapturePipelineManager:Update(Boolean, Single) (at Assets\Plugins\Dissonance\Core\Audio\Capture\CapturePipelineManager.cs:162)
    318. Dissonance.DissonanceComms:Update() (at Assets\Plugins\Dissonance\DissonanceComms.cs:589)
    319. (Filename: Assets/Plugins/Dissonance/Core/Log.cs Line: 63)
    320.  
    321. [Dissonance:Recording] (16:30:13.150) BasePreprocessingPipeline: Lost 960 samples in the preprocessor (buffer full), injecting silence to compensate
    322. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    323. UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    324. UnityEngine.Logger:Log(LogType, Object)
    325. UnityEngine.Debug:LogWarning(Object)
    326. Dissonance.LogMessage:Log() (at Assets\Plugins\Dissonance\Core\Log.cs:63)
    327. Dissonance.Logs:SendLogMessage(String, LogLevel) (at Assets\Plugins\Dissonance\Core\Log.cs:95)
    328. Dissonance.Log:WriteLog(LogLevel, String) (at Assets\Plugins\Dissonance\Core\Log.cs:178)
    329. Dissonance.Log:WriteLogFormat(LogLevel, String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:187)
    330. Dissonance.Log:Warn(String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:390)
    331. Dissonance.Audio.Capture.BasePreprocessingPipeline:Dissonance.Audio.Capture.IMicrophoneSubscriber.ReceiveMicrophoneData(ArraySegment`1, WaveFormat) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasePreprocessingPipeline.cs:185)
    332. Dissonance.Audio.Capture.BasicMicrophoneCapture:SendFrame() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:330)
    333. Dissonance.Audio.Capture.BasicMicrophoneCapture:ConsumeSamples(ArraySegment`1) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:288)
    334. Dissonance.Audio.Capture.BasicMicrophoneCapture:DrainMicSamples() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:260)
    335. Dissonance.Audio.Capture.BasicMicrophoneCapture:UpdateSubscribers() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:195)
    336. Dissonance.Audio.Capture.CapturePipelineManager:Update(Boolean, Single) (at Assets\Plugins\Dissonance\Core\Audio\Capture\CapturePipelineManager.cs:162)
    337. Dissonance.DissonanceComms:Update() (at Assets\Plugins\Dissonance\DissonanceComms.cs:589)
    338. (Filename: Assets/Plugins/Dissonance/Core/Log.cs Line: 63)
    339.  
    340. [Dissonance:Recording] (16:30:13.152) BasePreprocessingPipeline: Lost 960 samples in the preprocessor (buffer full), injecting silence to compensate
    341. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    342. UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    343. UnityEngine.Logger:Log(LogType, Object)
    344. UnityEngine.Debug:LogWarning(Object)
    345. Dissonance.LogMessage:Log() (at Assets\Plugins\Dissonance\Core\Log.cs:63)
    346. Dissonance.Logs:SendLogMessage(String, LogLevel) (at Assets\Plugins\Dissonance\Core\Log.cs:95)
    347. Dissonance.Log:WriteLog(LogLevel, String) (at Assets\Plugins\Dissonance\Core\Log.cs:178)
    348. Dissonance.Log:WriteLogFormat(LogLevel, String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:187)
    349. Dissonance.Log:Warn(String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:390)
    350. Dissonance.Audio.Capture.BasePreprocessingPipeline:Dissonance.Audio.Capture.IMicrophoneSubscriber.ReceiveMicrophoneData(ArraySegment`1, WaveFormat) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasePreprocessingPipeline.cs:185)
    351. Dissonance.Audio.Capture.BasicMicrophoneCapture:SendFrame() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:330)
    352. Dissonance.Audio.Capture.BasicMicrophoneCapture:ConsumeSamples(ArraySegment`1) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:288)
    353. Dissonance.Audio.Capture.BasicMicrophoneCapture:DrainMicSamples() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:260)
    354. Dissonance.Audio.Capture.BasicMicrophoneCapture:UpdateSubscribers() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:195)
    355. Dissonance.Audio.Capture.CapturePipelineManager:Update(Boolean, Single) (at Assets\Plugins\Dissonance\Core\Audio\Capture\CapturePipelineManager.cs:162)
    356. Dissonance.DissonanceComms:Update() (at Assets\Plugins\Dissonance\DissonanceComms.cs:589)
    357. (Filename: Assets/Plugins/Dissonance/Core/Log.cs Line: 63)
    358.  
    359. [Dissonance:Recording] (16:30:13.153) BasePreprocessingPipeline: Lost 960 samples in the preprocessor (buffer full), injecting silence to compensate
    360. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    361. UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    362. UnityEngine.Logger:Log(LogType, Object)
    363. UnityEngine.Debug:LogWarning(Object)
    364. Dissonance.LogMessage:Log() (at Assets\Plugins\Dissonance\Core\Log.cs:63)
    365. Dissonance.Logs:SendLogMessage(String, LogLevel) (at Assets\Plugins\Dissonance\Core\Log.cs:95)
    366. Dissonance.Log:WriteLog(LogLevel, String) (at Assets\Plugins\Dissonance\Core\Log.cs:178)
    367. Dissonance.Log:WriteLogFormat(LogLevel, String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:187)
    368. Dissonance.Log:Warn(String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:390)
    369. Dissonance.Audio.Capture.BasePreprocessingPipeline:Dissonance.Audio.Capture.IMicrophoneSubscriber.ReceiveMicrophoneData(ArraySegment`1, WaveFormat) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasePreprocessingPipeline.cs:185)
    370. Dissonance.Audio.Capture.BasicMicrophoneCapture:SendFrame() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:330)
    371. Dissonance.Audio.Capture.BasicMicrophoneCapture:ConsumeSamples(ArraySegment`1) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:288)
    372. Dissonance.Audio.Capture.BasicMicrophoneCapture:DrainMicSamples() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:260)
    373. Dissonance.Audio.Capture.BasicMicrophoneCapture:UpdateSubscribers() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:195)
    374. Dissonance.Audio.Capture.CapturePipelineManager:Update(Boolean, Single) (at Assets\Plugins\Dissonance\Core\Audio\Capture\CapturePipelineManager.cs:162)
    375. Dissonance.DissonanceComms:Update() (at Assets\Plugins\Dissonance\DissonanceComms.cs:589)
    376. (Filename: Assets/Plugins/Dissonance/Core/Log.cs Line: 63)
    377.  
    378. [Dissonance:Recording] (16:30:13.155) BasePreprocessingPipeline: Lost 960 samples in the preprocessor (buffer full), injecting silence to compensate
    379. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    380. UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    381. UnityEngine.Logger:Log(LogType, Object)
    382. UnityEngine.Debug:LogWarning(Object)
    383. Dissonance.LogMessage:Log() (at Assets\Plugins\Dissonance\Core\Log.cs:63)
    384. Dissonance.Logs:SendLogMessage(String, LogLevel) (at Assets\Plugins\Dissonance\Core\Log.cs:95)
    385. Dissonance.Log:WriteLog(LogLevel, String) (at Assets\Plugins\Dissonance\Core\Log.cs:178)
    386. Dissonance.Log:WriteLogFormat(LogLevel, String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:187)
    387. Dissonance.Log:Warn(String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:390)
    388. Dissonance.Audio.Capture.BasePreprocessingPipeline:Dissonance.Audio.Capture.IMicrophoneSubscriber.ReceiveMicrophoneData(ArraySegment`1, WaveFormat) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasePreprocessingPipeline.cs:185)
    389. Dissonance.Audio.Capture.BasicMicrophoneCapture:SendFrame() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:330)
    390. Dissonance.Audio.Capture.BasicMicrophoneCapture:ConsumeSamples(ArraySegment`1) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:288)
    391. Dissonance.Audio.Capture.BasicMicrophoneCapture:DrainMicSamples() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:260)
    392. Dissonance.Audio.Capture.BasicMicrophoneCapture:UpdateSubscribers() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:195)
    393. Dissonance.Audio.Capture.CapturePipelineManager:Update(Boolean, Single) (at Assets\Plugins\Dissonance\Core\Audio\Capture\CapturePipelineManager.cs:162)
    394. Dissonance.DissonanceComms:Update() (at Assets\Plugins\Dissonance\DissonanceComms.cs:589)
    395. (Filename: Assets/Plugins/Dissonance/Core/Log.cs Line: 63)
    396.  
    397. [Dissonance:Recording] (16:30:13.156) BasePreprocessingPipeline: Lost 960 samples in the preprocessor (buffer full), injecting silence to compensate
    398. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    399. UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    400. UnityEngine.Logger:Log(LogType, Object)
    401. UnityEngine.Debug:LogWarning(Object)
    402. Dissonance.LogMessage:Log() (at Assets\Plugins\Dissonance\Core\Log.cs:63)
    403. Dissonance.Logs:SendLogMessage(String, LogLevel) (at Assets\Plugins\Dissonance\Core\Log.cs:95)
    404. Dissonance.Log:WriteLog(LogLevel, String) (at Assets\Plugins\Dissonance\Core\Log.cs:178)
    405. Dissonance.Log:WriteLogFormat(LogLevel, String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:187)
    406. Dissonance.Log:Warn(String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:390)
    407. Dissonance.Audio.Capture.BasePreprocessingPipeline:Dissonance.Audio.Capture.IMicrophoneSubscriber.ReceiveMicrophoneData(ArraySegment`1, WaveFormat) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasePreprocessingPipeline.cs:185)
    408. Dissonance.Audio.Capture.BasicMicrophoneCapture:SendFrame() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:330)
    409. Dissonance.Audio.Capture.BasicMicrophoneCapture:ConsumeSamples(ArraySegment`1) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:288)
    410. Dissonance.Audio.Capture.BasicMicrophoneCapture:DrainMicSamples() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:260)
    411. Dissonance.Audio.Capture.BasicMicrophoneCapture:UpdateSubscribers() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:195)
    412. Dissonance.Audio.Capture.CapturePipelineManager:Update(Boolean, Single) (at Assets\Plugins\Dissonance\Core\Audio\Capture\CapturePipelineManager.cs:162)
    413. Dissonance.DissonanceComms:Update() (at Assets\Plugins\Dissonance\DissonanceComms.cs:589)
    414. (Filename: Assets/Plugins/Dissonance/Core/Log.cs Line: 63)
    415.  
    416. [Dissonance:Recording] (16:30:13.157) BasePreprocessingPipeline: Lost 960 samples in the preprocessor (buffer full), injecting silence to compensate
    417. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    418. UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    419. UnityEngine.Logger:Log(LogType, Object)
    420. UnityEngine.Debug:LogWarning(Object)
    421. Dissonance.LogMessage:Log() (at Assets\Plugins\Dissonance\Core\Log.cs:63)
    422. Dissonance.Logs:SendLogMessage(String, LogLevel) (at Assets\Plugins\Dissonance\Core\Log.cs:95)
    423. Dissonance.Log:WriteLog(LogLevel, String) (at Assets\Plugins\Dissonance\Core\Log.cs:178)
    424. Dissonance.Log:WriteLogFormat(LogLevel, String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:187)
    425. Dissonance.Log:Warn(String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:390)
    426. Dissonance.Audio.Capture.BasePreprocessingPipeline:Dissonance.Audio.Capture.IMicrophoneSubscriber.ReceiveMicrophoneData(ArraySegment`1, WaveFormat) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasePreprocessingPipeline.cs:185)
    427. Dissonance.Audio.Capture.BasicMicrophoneCapture:SendFrame() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:330)
    428. Dissonance.Audio.Capture.BasicMicrophoneCapture:ConsumeSamples(ArraySegment`1) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:288)
    429. Dissonance.Audio.Capture.BasicMicrophoneCapture:DrainMicSamples() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:260)
    430. Dissonance.Audio.Capture.BasicMicrophoneCapture:UpdateSubscribers() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:195)
    431. Dissonance.Audio.Capture.CapturePipelineManager:Update(Boolean, Single) (at Assets\Plugins\Dissonance\Core\Audio\Capture\CapturePipelineManager.cs:162)
    432. Dissonance.DissonanceComms:Update() (at Assets\Plugins\Dissonance\DissonanceComms.cs:589)
    433. (Filename: Assets/Plugins/Dissonance/Core/Log.cs Line: 63)
    434.  
    435. [Dissonance:Recording] (16:30:13.159) BasePreprocessingPipeline: Lost 960 samples in the preprocessor (buffer full), injecting silence to compensate
    436. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    437. UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    438. UnityEngine.Logger:Log(LogType, Object)
    439. UnityEngine.Debug:LogWarning(Object)
    440. Dissonance.LogMessage:Log() (at Assets\Plugins\Dissonance\Core\Log.cs:63)
    441. Dissonance.Logs:SendLogMessage(String, LogLevel) (at Assets\Plugins\Dissonance\Core\Log.cs:95)
    442. Dissonance.Log:WriteLog(LogLevel, String) (at Assets\Plugins\Dissonance\Core\Log.cs:178)
    443. Dissonance.Log:WriteLogFormat(LogLevel, String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:187)
    444. Dissonance.Log:Warn(String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:390)
    445. Dissonance.Audio.Capture.BasePreprocessingPipeline:Dissonance.Audio.Capture.IMicrophoneSubscriber.ReceiveMicrophoneData(ArraySegment`1, WaveFormat) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasePreprocessingPipeline.cs:185)
    446. Dissonance.Audio.Capture.BasicMicrophoneCapture:SendFrame() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:330)
    447. Dissonance.Audio.Capture.BasicMicrophoneCapture:ConsumeSamples(ArraySegment`1) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:288)
    448. Dissonance.Audio.Capture.BasicMicrophoneCapture:DrainMicSamples() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:260)
    449. Dissonance.Audio.Capture.BasicMicrophoneCapture:UpdateSubscribers() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:195)
    450. Dissonance.Audio.Capture.CapturePipelineManager:Update(Boolean, Single) (at Assets\Plugins\Dissonance\Core\Audio\Capture\CapturePipelineManager.cs:162)
    451. Dissonance.DissonanceComms:Update() (at Assets\Plugins\Dissonance\DissonanceComms.cs:589)
    452. (Filename: Assets/Plugins/Dissonance/Core/Log.cs Line: 63)
    453.  
    454. [Dissonance:Recording] (16:30:13.160) BasePreprocessingPipeline: Lost 960 samples in the preprocessor (buffer full), injecting silence to compensate
    455. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    456. UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    457. UnityEngine.Logger:Log(LogType, Object)
    458. UnityEngine.Debug:LogWarning(Object)
    459. Dissonance.LogMessage:Log() (at Assets\Plugins\Dissonance\Core\Log.cs:63)
    460. Dissonance.Logs:SendLogMessage(String, LogLevel) (at Assets\Plugins\Dissonance\Core\Log.cs:95)
    461. Dissonance.Log:WriteLog(LogLevel, String) (at Assets\Plugins\Dissonance\Core\Log.cs:178)
    462. Dissonance.Log:WriteLogFormat(LogLevel, String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:187)
    463. Dissonance.Log:Warn(String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:390)
    464. Dissonance.Audio.Capture.BasePreprocessingPipeline:Dissonance.Audio.Capture.IMicrophoneSubscriber.ReceiveMicrophoneData(ArraySegment`1, WaveFormat) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasePreprocessingPipeline.cs:185)
    465. Dissonance.Audio.Capture.BasicMicrophoneCapture:SendFrame() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:330)
    466. Dissonance.Audio.Capture.BasicMicrophoneCapture:ConsumeSamples(ArraySegment`1) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:288)
    467. Dissonance.Audio.Capture.BasicMicrophoneCapture:DrainMicSamples() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:260)
    468. Dissonance.Audio.Capture.BasicMicrophoneCapture:UpdateSubscribers() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:195)
    469. Dissonance.Audio.Capture.CapturePipelineManager:Update(Boolean, Single) (at Assets\Plugins\Dissonance\Core\Audio\Capture\CapturePipelineManager.cs:162)
    470. Dissonance.DissonanceComms:Update() (at Assets\Plugins\Dissonance\DissonanceComms.cs:589)
    471. (Filename: Assets/Plugins/Dissonance/Core/Log.cs Line: 63)
    472.  
    473. [Dissonance:Recording] (16:30:13.162) BasePreprocessingPipeline: Lost 960 samples in the preprocessor (buffer full), injecting silence to compensate
    474. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    475. UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    476. UnityEngine.Logger:Log(LogType, Object)
    477. UnityEngine.Debug:LogWarning(Object)
    478. Dissonance.LogMessage:Log() (at Assets\Plugins\Dissonance\Core\Log.cs:63)
    479. Dissonance.Logs:SendLogMessage(String, LogLevel) (at Assets\Plugins\Dissonance\Core\Log.cs:95)
    480. Dissonance.Log:WriteLog(LogLevel, String) (at Assets\Plugins\Dissonance\Core\Log.cs:178)
    481. Dissonance.Log:WriteLogFormat(LogLevel, String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:187)
    482. Dissonance.Log:Warn(String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:390)
    483. Dissonance.Audio.Capture.BasePreprocessingPipeline:Dissonance.Audio.Capture.IMicrophoneSubscriber.ReceiveMicrophoneData(ArraySegment`1, WaveFormat) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasePreprocessingPipeline.cs:185)
    484. Dissonance.Audio.Capture.BasicMicrophoneCapture:SendFrame() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:330)
    485. Dissonance.Audio.Capture.BasicMicrophoneCapture:ConsumeSamples(ArraySegment`1) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:288)
    486. Dissonance.Audio.Capture.BasicMicrophoneCapture:DrainMicSamples() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:260)
    487. Dissonance.Audio.Capture.BasicMicrophoneCapture:UpdateSubscribers() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:195)
    488. Dissonance.Audio.Capture.CapturePipelineManager:Update(Boolean, Single) (at Assets\Plugins\Dissonance\Core\Audio\Capture\CapturePipelineManager.cs:162)
    489. Dissonance.DissonanceComms:Update() (at Assets\Plugins\Dissonance\DissonanceComms.cs:589)
    490. (Filename: Assets/Plugins/Dissonance/Core/Log.cs Line: 63)
    491.  
    492. Refresh: detecting if any assets need to be imported or removed ...
    493. Refresh: elapses 0.235288 seconds (Nothing changed)
    494. Refresh completed in 0.235438 seconds.
    495. [Dissonance:Recording] (16:30:13.595) BasicMicrophoneCapture: Insufficient buffer space, requested 457857, clamped to 16383 (dropping samples)
    496. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    497. UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    498. UnityEngine.Logger:Log(LogType, Object)
    499. UnityEngine.Debug:LogWarning(Object)
    500. Dissonance.LogMessage:Log() (at Assets\Plugins\Dissonance\Core\Log.cs:63)
    501. Dissonance.Logs:SendLogMessage(String, LogLevel) (at Assets\Plugins\Dissonance\Core\Log.cs:95)
    502. Dissonance.Log:WriteLog(LogLevel, String) (at Assets\Plugins\Dissonance\Core\Log.cs:178)
    503. Dissonance.Log:WriteLogFormat(LogLevel, String, UInt32, UInt32) (at Assets\Plugins\Dissonance\Core\Log.cs:196)
    504. Dissonance.Log:Warn(String, UInt32, UInt32) (at Assets\Plugins\Dissonance\Core\Log.cs:396)
    505. Dissonance.Audio.Capture.BasicMicrophoneCapture:DrainMicSamples() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:231)
    506. Dissonance.Audio.Capture.BasicMicrophoneCapture:UpdateSubscribers() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:195)
    507. Dissonance.Audio.Capture.CapturePipelineManager:Update(Boolean, Single) (at Assets\Plugins\Dissonance\Core\Audio\Capture\CapturePipelineManager.cs:162)
    508. Dissonance.DissonanceComms:Update() (at Assets\Plugins\Dissonance\DissonanceComms.cs:589)
    509. (Filename: Assets/Plugins/Dissonance/Core/Log.cs Line: 63)
    510.  
    511. [Dissonance:Recording] (16:30:13.598) BasePreprocessingPipeline: Lost 480 samples in the preprocessor (buffer full), injecting silence to compensate
    512. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    513. UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    514. UnityEngine.Logger:Log(LogType, Object)
    515. UnityEngine.Debug:LogWarning(Object)
    516. Dissonance.LogMessage:Log() (at Assets\Plugins\Dissonance\Core\Log.cs:63)
    517. Dissonance.Logs:SendLogMessage(String, LogLevel) (at Assets\Plugins\Dissonance\Core\Log.cs:95)
    518. Dissonance.Log:WriteLog(LogLevel, String) (at Assets\Plugins\Dissonance\Core\Log.cs:178)
    519. Dissonance.Log:WriteLogFormat(LogLevel, String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:187)
    520. Dissonance.Log:Warn(String, Int32) (at Assets\Plugins\Dissonance\Core\Log.cs:390)
    521. Dissonance.Audio.Capture.BasePreprocessingPipeline:Dissonance.Audio.Capture.IMicrophoneSubscriber.ReceiveMicrophoneData(ArraySegment`1, WaveFormat) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasePreprocessingPipeline.cs:185)
    522. Dissonance.Audio.Capture.BasicMicrophoneCapture:SendFrame() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:330)
    523. Dissonance.Audio.Capture.BasicMicrophoneCapture:ConsumeSamples(ArraySegment`1) (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:288)
    524. Dissonance.Audio.Capture.BasicMicrophoneCapture:DrainMicSamples() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:260)
    525. Dissonance.Audio.Capture.BasicMicrophoneCapture:UpdateSubscribers() (at Assets\Plugins\Dissonance\Core\Audio\Capture\BasicMicrophoneCapture.cs:195)
    526. Dissonance.Audio.Capture.CapturePipelineManager:Update(Boolean, Single) (at Assets\Plugins\Dissonance\Core\Audio\Capture\CapturePipelineManager.cs:162)
    527. Dissonance.DissonanceComms:Update() (at Assets\Plugins\Dissonance\DissonanceComms.cs:589)
    528. (Filename: Assets/Plugins/Dissonance/Core/Log.cs Line: 63)
    Here our DissonancePlayer class:

    Code (CSharp):
    1. using com.exyte.ver_game1.Multiplayer;
    2. using Dissonance;
    3. using UnityEngine;
    4. using UnityEngine.Networking;
    5.  
    6. namespace com.exyte.ver_game1.Players.Player.Sources {
    7.     [RequireComponent(typeof(NetworkIdentity))]
    8.     [NetworkSettings(channel = NetworkChannel)]
    9.     public class DissonanceVoicePlayer : NetworkBehaviour, IDissonancePlayer {
    10.         public GameObject Model;
    11.  
    12.         private static readonly Log Log = Logs.Create(LogCategory.Network, "HLAPI Player Component");
    13.  
    14.         private DissonanceComms _comms;
    15.  
    16.         public bool IsTracking { get; private set; }
    17.  
    18.         private const int NetworkChannel = (int) CustomChannels.NPCPlayerControl;
    19.  
    20.         [SyncVar]
    21.         private string _playerId;
    22.         public string PlayerId { get { return _playerId; } }
    23.  
    24.         public Vector3 Position {
    25.             get { return Model.transform.position; }
    26.         }
    27.  
    28.         public Quaternion Rotation {
    29.             get { return Model.transform.rotation; }
    30.         }
    31.  
    32.         public NetworkPlayerType Type {
    33.             get { return isLocalPlayer ? NetworkPlayerType.Local : NetworkPlayerType.Remote; }
    34.         }
    35.  
    36.         public void OnDestroy() {
    37.             if (_comms != null)
    38.                 _comms.LocalPlayerNameChanged -= SetPlayerName;
    39.         }
    40.  
    41.         public void OnEnable() {
    42.             _comms = FindObjectOfType<DissonanceComms>();
    43.         }
    44.  
    45.         public void OnDisable() {
    46.             if (IsTracking)
    47.                 StopTracking();
    48.         }
    49.  
    50.         public override void OnStartAuthority() {
    51.             base.OnStartAuthority();
    52.  
    53.             var comms = FindObjectOfType<DissonanceComms>();
    54.             if (comms == null) {
    55.                 throw Log.CreateUserErrorException(
    56.                     "cannot find DissonanceComms component in scene",
    57.                     "not placing a DissonanceComms component on a game object in the scene",
    58.                     "https://dissonance.readthedocs.io/en/latest/Basics/Quick-Start-UNet-HLAPI/",
    59.                     "9A79FDCB-263E-4124-B54D-67EDA39C09A5"
    60.                 );
    61.             }
    62.  
    63.             Log.Debug("OnStartAuthority Name={0}", comms.LocalPlayerName);
    64.  
    65.             if (comms.LocalPlayerName != null)
    66.                 SetPlayerName(comms.LocalPlayerName);
    67.  
    68.             comms.LocalPlayerNameChanged += SetPlayerName;
    69.         }
    70.  
    71.         private void SetPlayerName(string playerName) {
    72.             if (IsTracking)
    73.                 StopTracking();
    74.  
    75.             _playerId = playerName;
    76.             StartTracking();
    77.  
    78.             if (hasAuthority)
    79.                 CmdSetPlayerName(playerName);
    80.         }
    81.  
    82.         public override void OnStartClient() {
    83.             base.OnStartClient();
    84.  
    85.             if (!string.IsNullOrEmpty(PlayerId))
    86.                 StartTracking();
    87.         }
    88.  
    89.         [Command(channel = NetworkChannel)]
    90.         private void CmdSetPlayerName(string playerName) {
    91.             _playerId = playerName;
    92.  
    93.             RpcSetPlayerName(playerName);
    94.         }
    95.  
    96.         [ClientRpc(channel = NetworkChannel)]
    97.         private void RpcSetPlayerName(string playerName) {
    98.             if (!hasAuthority)
    99.                 SetPlayerName(playerName);
    100.         }
    101.  
    102.         private void StartTracking() {
    103.             if (IsTracking)
    104.                 throw Log.CreatePossibleBugException("Attempting to start player tracking, but tracking is already started", "B7D1F25E-72AF-4E93-8CFF-90CEBEAC68CF");
    105.  
    106.             if (_comms != null) {
    107.                 _comms.TrackPlayerPosition(this);
    108.                 IsTracking = true;
    109.             }
    110.         }
    111.  
    112.         private void StopTracking() {
    113.             if (!IsTracking)
    114.                 throw Log.CreatePossibleBugException("Attempting to stop player tracking, but tracking is not started", "EC5C395D-B544-49DC-B33C-7D7533349134");
    115.  
    116.             if (_comms != null) {
    117.                 _comms.StopTracking(this);
    118.                 IsTracking = false;
    119.             }
    120.         }
    121.     }
    122. }
    123.  
     
    Nyarlathothep likes this.