예제 #1
0
        /// <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);
            });
        }
예제 #2
0
 /// <summary>
 /// Start running.
 /// </summary>
 /// <param name="@delegate">Delegate to receive sample buffers.</param>
 public abstract void StartRunning(SampleBufferDelegate @delegate);