/// <summary> /// Start running. /// </summary> /// <param name="@delegate">Delegate to receive sample buffers.</param> public void StartRunning(SampleBufferDelegate @delegate) { attachment.@delegate = (sampleBuffer, timestamp) => { lock ((stagingBuffer as ICollection).SyncRoot) stagingBuffer.AddRange(sampleBuffer); }; var copyBuffer = new float[4096]; audioDevice.StartRunning((sampleBuffer, timestamp) => { // Copy lock ((stagingBuffer as ICollection).SyncRoot) { // CHECK // Indices are unsafe // Seek to match times stagingBuffer.CopyTo(0, copyBuffer, 0, sampleBuffer.Length); stagingBuffer.RemoveRange(0, sampleBuffer.Length); } // Mix for (var i = 0; i < sampleBuffer.Length; i++) { sampleBuffer[i] = (float)Math.Tanh(sampleBuffer[i] + copyBuffer[i]); } // Send to delegate @delegate(sampleBuffer, timestamp); }); }
/// <summary> /// Start running. /// </summary> /// <param name="@delegate">Delegate to receive sample buffers.</param> public abstract void StartRunning(SampleBufferDelegate @delegate);