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