/// <summary>
    /// Adds the handler
    /// </summary>
    /// <param name="handler">handler to add</param>
    public void AddVoiceHandler(IVoiceHandler handler)
    {
        //check if workflow is initialized
        if (manipulator == null)
        {
            throw new Exception("The current manipulator is null, be sure to initialize the workflow properly before any other action");
        }

        //Compatibility check between handler to add and manipulator
        AudioDataTypeFlag res = manipulator.AvailableTypes & handler.AvailableTypes;

        if (res == AudioDataTypeFlag.None)
        {
            throw new ArgumentException("the given handler type is incompatible with the current audio data manipulator");
        }

        //handler is added and callback for when mic data is available is set on the handler
        handlers.Add(handler.Identity.NetworkId, handler);
        handler.SetOnMicDataProcessed(OnMicDataProcessed);
    }
 /// <summary>
 /// Removes the handler
 /// </summary>
 /// <param name="handler">handler to remove</param>
 public void RemoveVoiceHandler(IVoiceHandler handler)
 {
     //handler and callback are removed
     handlers.Remove(handler.Identity.NetworkId);
     handler.SetOnMicDataProcessed(null);
 }