protected override PlayerAec GetPlayer() { var mediaElement = new MediaElement(); var audioStreamSource = new AudioMediaStreamSource(null, AudioFormat.Default); mediaElement.SetSource(audioStreamSource); var player = new PlayerAec(mediaElement, audioStreamSource, mSourceAudioVisualizer, mEchoCancelFilter); audioStreamSource.AudioController = player; audioStreamSource.InstanceName = "ForTestRunnerLive"; return(player); }
protected virtual void StartNextTest() { Deployment.Current.Dispatcher.BeginInvoke(() => Status = string.Format("Executing test for latency {0} and filter length {1}", ExpectedLatency, FilterLength)); mTestStartTime = DateTime.Now; IAudioFilter playedResampler; IAudioFilter recordedResampler; mCancelledFrames = new List <byte[]>(); // Decide whether to synchronize the audio or not. if (AecIsSynchronized) { playedResampler = new ResampleFilter(audioFormat, audioFormat); recordedResampler = new ResampleFilter(audioFormat, audioFormat); } else { playedResampler = new NullAudioFilter(audioFormat.BytesPerFrame); recordedResampler = new NullAudioFilter(audioFormat.BytesPerFrame); } // Initialize the echo canceller playedResampler.InstanceName = "EchoCanceller_played"; recordedResampler.InstanceName = "EchoCanceller_recorded"; mediaConfig.ExpectedAudioLatency = ExpectedLatency; mediaConfig.FilterLength = FilterLength; switch (mEchoCancellerType) { case EchoCancellerType.Speex2: mEchoCancelFilter = new SpeexEchoCanceller2(mediaConfig, audioFormat, AudioFormat.Default); break; case EchoCancellerType.WebRtc: mEchoCancelFilter = new WebRtcFilter(mediaConfig.ExpectedAudioLatency, mediaConfig.FilterLength, audioFormat, AudioFormat.Default, true, true, false, playedResampler, recordedResampler); break; case EchoCancellerType.TimeDomain: mEchoCancelFilter = new TimeDomainEchoCancelFilter(ExpectedLatency, FilterLength, audioFormat, AudioFormat.Default, playedResampler, recordedResampler); break; case EchoCancellerType.Speex: mEchoCancelFilter = new SpeexEchoCancelFilter(ExpectedLatency, FilterLength, audioFormat, AudioFormat.Default, playedResampler, recordedResampler); break; default: throw new Exception(); } mPlayer = GetPlayer(); mRecorder = GetRecorder(); mRecorder.StartRecording(SpeakerFrames, FinishTest); mPlayer.StartPlaying(SourceFrames, mRecorder.StopRecording); }