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); } }