private void Trigger()
 {
     unsafe
     {
         byte *triggersPtr = (byte *)_Triggers.GetUnsafePtr();
         for (int i = 0; i < _Triggers.Length; ++i)
         {
             SchmittTrigger *trigger = (SchmittTrigger *)(triggersPtr + UnsafeUtility.SizeOf <SchmittTrigger>() * i);
             trigger->Reset();
         }
     }
     unsafe
     {
         UnsafeUtility.MemClear(_Accumulators.GetUnsafePtr(), _Accumulators.Length * UnsafeUtility.SizeOf <float>());
     }
     _BufferIdx   = 0;
     _StepIdx     = 0;
     _WaitingTime = 0f;
 }
 public void Initialize()
 {
     _InputChannelsX = 0;
     _BufferX        = new NativeArray <float>(MAX_CHANNELS * BUFFER_SIZE, Allocator.AudioKernel, NativeArrayOptions.UninitializedMemory);
     _Triggers       = new NativeArray <SchmittTrigger>(MAX_CHANNELS, Allocator.AudioKernel, NativeArrayOptions.UninitializedMemory);
     unsafe
     {
         byte *triggersPtr = (byte *)_Triggers.GetUnsafePtr();
         for (int i = 0; i < _Triggers.Length; ++i)
         {
             SchmittTrigger *trigger = (SchmittTrigger *)(triggersPtr + UnsafeUtility.SizeOf <SchmittTrigger>() * i);
             trigger->Reset();
         }
     }
     _BufferIdx    = 0;
     _StepIdx      = 0;
     _WaitingTime  = 0f;
     _Accumulators = new NativeArray <float>(MAX_CHANNELS, Allocator.AudioKernel, NativeArrayOptions.UninitializedMemory);
 }
    private bool CheckTriggers(ref SampleBuffer sampleBuffer, float trigThreshold)
    {
        unsafe
        {
            byte *triggersPtr          = (byte *)_Triggers.GetUnsafePtr();
            NativeArray <float> buffer = sampleBuffer.Buffer;
            for (int s = 0; s < sampleBuffer.Samples; ++s)
            {
                for (int c = 0; c < sampleBuffer.Channels; ++c)
                {
                    float val = math.remap(trigThreshold, trigThreshold + 0.005f, 0.0f, 1.0f, buffer[s * sampleBuffer.Channels + c]);

                    SchmittTrigger *trigger = (SchmittTrigger *)(triggersPtr + UnsafeUtility.SizeOf <SchmittTrigger>() * c);
                    if (trigger->Process(val))
                    {
                        Trigger();
                        _StepIdx = s;
                        return(true);
                    }
                }
            }
            return(false);
        }
    }