protected virtual void OnMixerAudioChannelsCountChanged(OscMessage message)
        {
            var channelId = message.GetChannel();

            if (channelId == null)
            {
                return;
            }
            var channelsCount = Convert.ToInt32(message.ElementAtOrDefault(0));

            MixerAudioChannelsCountChanged?.Invoke(this, new MixerAudioChannelsCountEventArgs(channelsCount, channelId.Value));
        }
        protected virtual void OnMixerAudioDbfsChanged(OscMessage message)
        {
            var channelId = message.GetChannel();

            if (channelId == null)
            {
                return;
            }
            var dbfs = (float)(message.ElementAtOrDefault(0));

            MixerAudioDbfsChanged?.Invoke(this, new MixerAudioDbfsEventArgs(dbfs, channelId.Value));
        }
        protected virtual void OnProfilerTimeChanged(OscMessage message)
        {
            var channel = message.GetChannel();

            if (channel == null)
            {
                return;
            }

            var currentValue  = (float)(message.ElementAtOrDefault(0));
            var expectedValue = (float)(message.ElementAtOrDefault(1));

            ProfilerTimeChanged?.Invoke(this, new ProfilerTimeEventArgs(currentValue, expectedValue, channel.Value));
        }
        protected virtual void OnOutputTypePortChanged(OscMessage message)
        {
            var channel = message.GetChannel();

            if (channel == null)
            {
                return;
            }

            var type = message.ElementAtOrDefault(0)?.ToString();
            var port = message.GetNextAddressPartOf(Port).TryParseNullable();

            OutputPortChanged?.Invoke(this, new OutputPortTypeEventArgs(type, port.GetValueOrDefault(0), channel.Value));
        }
        protected virtual void OnOutputFormatChanged(OscMessage message)
        {
            var channel = message.GetChannel();

            if (channel == null)
            {
                return;
            }

            var format = message.ElementAtOrDefault(0)?.ToString();


            OutputFormatChanged?.Invoke(this, new OutputFormatEventArgs(format, channel.Value));
        }
        protected virtual void OnConsumerFrameCreatedChanged(OscMessage message)
        {
            var channel = message.GetChannel();

            if (channel == null)
            {
                return;
            }

            var usedFrames      = Convert.ToInt32(message.ElementAtOrDefault(0));
            var availableFrames = Convert.ToInt32(message.ElementAtOrDefault(1));
            var port            = message.GetNextAddressPartOf(Port).TryParseNullable();

            ConsumerFrameCreatedChanged?.Invoke(this, new ConsumerFrameCreatedEventArgs(usedFrames, availableFrames, port.GetValueOrDefault(0), channel.Value));
        }