Пример #1
0
        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);
        }
Пример #2
0
        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);
        }