Example #1
0
        /// <summary>
        /// Init method, which creates a chain of filters with input provider as the first called element of the chain.
        /// </summary>
        private void Init()
        {
            // structure for high level filters
            _voiceStreamStruct = new VoiceStreamStruct();
            ISampleProvider sampleProvider = _inputSampleProvider;

            foreach (ILowLevelVoiceEffect effect in LowLevelEffects)
            {
                sampleProvider = effect.GetSampleProvider(sampleProvider);
            }
            sampleProvider        = _voiceStreamStruct.GetSampleProvider(sampleProvider);
            _finalSampleProvider  = sampleProvider;
            _highLevelProccessing = () =>
            {
                while (true)
                {
                    Task <VoiceStreamStruct> taskQueue = Task <VoiceStreamStruct> .FromResult(_voiceStreamStruct);

                    foreach (IHighLevelVoiceEffect effect in HighLevelEffects)
                    {
                        taskQueue = effect.ProccessAsync(taskQueue);
                    }
                }
            };
            // create task for infinite loop for the high level filters
            _highLevelProccessingTask = new Task(_highLevelProccessing, TaskCreationOptions.LongRunning);
        }
 public SampleProvider(VoiceStreamStruct voiceStreamStruct, ISampleProvider input)
 {
     this.buffer            = new float[buffSize];
     this.voiceStreamStruct = voiceStreamStruct;
     if (input.WaveFormat.Channels != 2)
     {
         this.input = input.ToStereo();
     }
     else
     {
         this.input = input;
     }
 }